ArcGIS software for $100

You may be interested to know that ESRI, developer and supplier of one of the most popular commercial GIS software, also offers a home use licence for a suite of its products. For a $100 annual fee, the ArcGIS for Home Use 12-month term license includes:

  • ArcView
  • ArcGIS 3D Analyst
  • ArcGIS Geostatistical Analyst
  • ArcGIS Network Analyst
  • ArcGIS Publisher
  • ArcGIS Schematics
  • ArcGIS Spatial Analyst
  • ArcGIS Tracking Analyst

This offer is available to anyone. The catch is that the software is supplied only for non-commercial, self-education purposes. For any other use, you have to pay many thousands of dollars to acquire the software.

This is a similar program that Microsoft introduced a long time ago for its Office suite of software products. For example, if your employer has purchased Microsoft Office for use within the organisation, you can obtain the same software package for home use for under $50.

The ArcGIS for Home Use program is available worldwide. Customers in the United States can order it online. Customers outside the United States should contact their local distributor .

Google Maps Mashups 3

S-Bahn Munich: Real-Time Map


I’m a great fan of live real-time maps of city transit systems. There is something about watching trains moving in real-time on a map that really appeals to my inner geek.

This real-time Google Map of Munich’s S-Bahn shows the transit system’s trains live as they move around the city. Each train is represented on the map with a numbered map marker indicating which line it is travelling on.

You can click on any of the train markers and view its next stop and its destination station. It is also possible to click on any station on the network and view the times and destination of the next trains scheduled to arrive.

The GE Show: Future Flight: Points of Departure


General Electric’s Points of Departure is a nicely designed Google Map showcasing the 6,000 most popular airports in the world. You can browse the airports by name, by the busiest airports, the most scenic or even view those situated on small islands.

Each airport is shown with Google Maps satellite view. Pictures from Flickr are also displayed beneath the map and their location shown on the map with map markers. The map also includes a permalink buttom that allows you to share your favourite map view.

Australian Social Diversity on Google Maps


Arek of the All Things Spatial blog has created a series of Google Maps to highlight social diversity in New South Wales, Australia.

The Australian Bureau of Statistics attempts to quantify socio-economic diversity for geographic locations with a suite of four summary measures called Socio-Economic Indexes for Areas (SEIFA). Arek has imported the Bureau’s data for the four measures into Fusion Tables and created a map for each.

Each map provides a heat-map visualisation of one of the measure. In each map you can click on any of New South Wales’ postal areas to view the area’s rank and decile.

Sky Orchestra


London has today entered into the fantasy world of steampunk. In what seems like an episode from 2D Goggles a number of hot air balloons have been flying over London blasting out music to the populace below.

Don’t worry if you don’t live in London or if you have missed any of the balloons’ flights as you can replay it all on a handy Google Maps based application.

The map shows each of the hot air balloons and their flight track. If you click on the map marker of any of the hot air balloons you can then listen to the music that was played during the flight.

#1yeartogo Twitter Map


There is one year to go to the 2012 London Olympics. A number of events are being held in London to celebrate the occasion (including the flying of musical hot air balloons).

CASA is tracking all of today’s Twitter messages that include the hashtag ‘1yeartogo’ and have created a nice heat map of all the Tweets.

The map is actually a little sneak preview of a new heat map visualisation that will be made available to the general public in the next few weeks on MapTube. CASA are responsible for some of the best Google Maps tools (for example the CASA Image Cutter) so I can’t wait to play with this new heat map tool when it is released.

They Draw & Travel – World Map


They Draw & Travel is a collection of wonderful user submitted hand drawn maps.

As part of the launch of the website a Marvellous Map competition was held with a grand prize of $1,000 for the winner and 5 runner-ups each receiving $200. The six winners of the competition will be announced on Friday.

The World Map lets you browse the 225 maps (so far) submitted to They Draw & Travel on Google Maps. You can click on any of the 225 map markers and view the hand drawn map submitted for that location.

Official Google Blog

 


Public transport directions for London has been added to Google Maps. If you want to get around in London you can now get transit directions that include the London Underground, DLR, buses and trams.

To get public transit directions in London on Google Maps you just need to select ‘Get directions’, type in your starting point and destination and click on the train icon that appears in the side panel.

The resulting direction will then tell you which underground station you need to go to and even which tube line you need to catch.

One Day on Earth


On 10.10.10 One Day on Earth asked people around the world to create a video of their world. The goal of the project was to “create an open shareable archive and documentary film of the world on 10/10/10.”

Whilst you wait for the finished full-length film to be released you can browse and watch the thousands of videos that were contributed around the world on this Google Map.

If you click on a map marker you can watch the selected video in the map sidebar. For each video you can view details, such as where and when it was shot and who by.

 

By GoogleMapsMania

Android: Identifying App Installations

In the Android group, from time to time we hear complaints from developers about problems they’re having coming up with reliable, stable, unique device identifiers. This worries us, because we think that tracking such identifiers isn’t a good idea, and that there are better ways to achieve developers’ goals.

Tracking Installations

It is very common, and perfectly reasonable, for a developer to want to track individual installations of their apps. It sounds plausible just to call TelephonyManager.getDeviceId() and use that value to identify the installation. There are problems with this: First, it doesn’t work reliably (see below). Second, when it does work, that value survives device wipes (“Factory resets”) and thus you could end up making a nasty mistake when one of your customers wipes their device and passes it on to another person.

To track installations, you could for example use a UUID as an identifier, and simply create a new one the first time an app runs after installation. Here is a sketch of a class named “Installation” with one static method Installation.id(Context context). You could imagine writing more installation-specific data into the INSTALLATION file.

[php] public class Installation {
private static String sID = null;
private static final String INSTALLATION = "INSTALLATION";

public synchronized static String id(Context context) {
if (sID == null) {
File installation = new File(context.getFilesDir(), INSTALLATION);
try {
if (!installation.exists())
writeInstallationFile(installation);
sID = readInstallationFile(installation);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
return sID;
}

private static String readInstallationFile(File installation) throws IOException {
RandomAccessFile f = new RandomAccessFile(installation, "r");
byte[] bytes = new byte[(int) f.length()];
f.readFully(bytes);
f.close();
return new String(bytes);
}

private static void writeInstallationFile(File installation) throws IOException {
FileOutputStream out = new FileOutputStream(installation);
String id = UUID.randomUUID().toString();
out.write(id.getBytes());
out.close();
}
}[/php]

Identifying Devices

Suppose you feel that for the needs of your application, you need an actual hardware device identifier. This turns out to be a tricky problem.

In the past, when every Android device was a phone, things were simpler: TelephonyManager.getDeviceId() is required to return (depending on the network technology) the IMEI, MEID, or ESN of the phone, which is unique to that piece of hardware.

However, there are problems with this approach:

Non-phones: Wifi-only devices or music players that don’t have telephony hardware just don’t have this kind of unique identifier.
Persistence: On devices which do have this, it persists across device data wipes and factory resets. It’s not clear at all if, in this situation, your app should regard this as the same device.
Privilege:It requires READ_PHONE_STATE permission, which is irritating if you don’t otherwise use or need telephony.
Bugs: We have seen a few instances of production phones for which the implementation is buggy and returns garbage, for example zeros or asterisks.
Mac Address

It may be possible to retrieve a Mac address from a device’s WiFi or Bluetooth hardware. We do not recommend using this as a unique identifier. To start with, not all devices have WiFi. Also, if the WiFi is not turned on, the hardware may not report the Mac address.

Serial Number

Since Android 2.3 (“Gingerbread”) this is available via android.os.Build.SERIAL. Devices without telephony are required to report a unique device ID here; some phones may do so also.

ANDROID_ID

More specifically, Settings.Secure.ANDROID_ID. This is a 64-bit quantity that is generated and stored when the device first boots. It is reset when the device is wiped.

ANDROID_ID seems a good choice for a unique device identifier. There are downsides: First, it is not 100% reliable on releases of Android prior to 2.2 (“Froyo”). Also, there has been at least one widely-observed bug in a popular handset from a major manufacturer, where every instance has the same ANDROID_ID.

Conclusion

For the vast majority of applications, the requirement is to identify a particular installation, not a physical device. Fortunately, doing so is straightforward.

There are many good reasons for avoiding the attempt to identify a particular device. For those who want to try, the best approach is probably the use of ANDROID_ID on anything reasonably modern, with some fallback heuristics for legacy devices.