It has occurred to me recently that there is actually a lot of confusion when talking about maps and adding mapping functionality to a Flex application, be it a web application or a mobile application. When talking about mapping, it’s important to first differentiate between straight ‘mapping’ and ‘GIS’. As well, you also need to differentiate between mapping frameworks & apis and map data sources. Things can get very confusing otherwise. I’ll go through the various options I know about below and try to explain and differentiate where possible.
When adding mapping functionality to an app, people tend to default to Google maps. I have absolutely no problem with Google maps, but there are many alternatives to Google maps to consider. ESRI and MapQuest are two key providers. ESRI is full enterprise class and supports many features that people currently working with Google maps wouldn’t even dream possible. MapQuest is extremely good and provides great consumer oriented services.
First, a few quick definitions:
- Mapping is what you’d expect. You want to be able to draw a map on the screen, be able to interact with that map (pan, zoom, click, etc.) and then be able to draw on the map.
- Geocoding is the process of finding associated geographic coordinates (lat/lon) from an address or simply a zipcode. This is a service that can be provided along with a mapping framework, but could be offered separately. If your mapping service lets you draw on it, and you have a way of turning lat/lon coordinates into x,y coordinates on the map, then it doesn’t matter where the geocoding is done, though it’s much easier if it’s all contained in your mapping service.
- Projection – Rumor has it that the world is round, so having a flat surface onto which you draw a map is an artificial construct. How you map the earth’s sphere to your flat map is called your projection (remember Mercator projections from high school anyone?). Not really important for this discussion, but I use the term later on, so figured I’d explain what it was here.
- Base Map – A base map is just a map that can be rendered using your mapping framework. It’s just a map, but to be able to find a lat/lon on that map, you need to know things like the scale of the map, offsets (e.g. lat/lon of bottom-left and top-right) and the projection of the map. Examples of base maps might be street maps, topographic maps, satellite images, etc. Examples of base map suppliers include:
- GIS (Geographic Information System) is essentially the merging of cartography (for all practical purposes – mapping), statistical analysis and database technology. ESRI is the main player in GIS. Ask any of the ESRI guys how their stuff is different than say Google maps and they’ll roll their eyes, bang their heads on the table and start speaking in tongues. To them, that would be like asking how Photoshop is different than Microsoft Paint.
- KML (Keyhole Markup Language) – Google Earth was originally called Keyhole. KML is an XML markup language for expressing geographic information (e.g. a list of cities and their lat/lons). You can use KML data sources to layer data points on your map.
Licensing as a Differentiating Factor
A key differentiator among the various options is licensing. This largely depends on how the mapping vendor traditionally gets their revenues, through server/service licenses (e.g. ESRI, UMapper) or ad-based revenue (e.g. Google Maps, MapQuest). And then there’s open source (Open Street Map, Open Scales).
AS3/Flex Map SDK
ESRI – ArcGIS API for Flex
This is the top of the line enterprise class API for building map-based Flex applications. Using ESRI’s Flex api you’ll be able to do everything you can do with any other API, and a ton more. Examples of unique things you can do with ESRI include:
- Show me a polygon of everything within a 10 minute drive from my current location. Other frameworks may allow you to draw simply everything within a certain distance as the crow flies.
- Clustered data level of detail – Show me all my data layers, but cluster the data as I zoom in/out.
- Query a map (how bizarre is that?) – Ask the map for all cities matching a certain pattern, or all households within a certain driving distance with a certain median income)
- Route around barriers
- Calculate viewshed – what can I see from my current vantage point, given the surrounding topology?
Base maps you can use with ESRI include (and I’m sure it is not limited to this): Bing Maps (aerial, hybrid and roads), ESRI maps (satellite imagery, street maps, topographic maps, shaded relief and terrain) and Open Street Maps.
ArcGIS 10 (the server to which the API connects) supports native AMF communications too, so performance is excellent; crucial in a data intensive application like mapping and even more crucial in a mobile world.
As well, ESRI released in the fall an open source lite version of their Flex api, which sites on top of the standard Flex API. This lite api is more suited for the developer wishing for basic mapping functionality without having to understand all the complexities of GIS. They are building mobile helper functions in to this api as well to make mobile application development trivial (e.g. whereAmI() is a 1-line call that will use Flex to figure out your current GPS location and draw that on the map, which is pretty sweet.
ESRI’s bread & butter is selling server licenses to governments and defense organizations. On the commercial side, ESRI is used heavily in the insurance industry.
Licensing: ESRI changed the licensing of their base maps this summer to make several of them free for commercial use. As well, the lite api is free. The Flex API is only free however for internal and non-commercial applications. Basically, the electricity is free (the base maps), but you have to pay for the outlets.
MapQuest – Flash Maps API
To be honest, my first thinking around MapQuest was, nah, that’s old technology. But, upon further investigation I was pleasantly surprised to see that they are putting a ton of effort into this API, the maps look great, and there are good licensing options. They have both a web and mobile set of APIs. I haven’t used either yet, so I don’t know how different they are though it would be nice if they could merge the two. MapQuest also includes services for determining directions, geocoding, traffic and search. I hope to write more on MapQuest as I get a chance to play around with that more.
Licensing: MapQuest offers both a community platform and an enterprise licensed platform. You can find out more about the licensing options here. It is not clear yet (need to investigate further), but MapQuest seems to have an Open Flash Map API, and then the regular Flash and Mobile Flash Maps APIs. I don’t know yet what the difference is between the api’s, and whether there is a mobile api that doesn’t fall under the licensed sdk category. If you look at their site, the regular Flash and Mobile Flash API’s fall under the licensed SDK categories.
Open Scales is an LGPL-licensed AS3/Flex mapping framework. It support web, mobile & desktop/AIR.
Open Scales is purely for drawing maps, drawing on top of the maps, drawing layers (imported from KML data source for example). It does not include services like geocoding. It’s not clear how widely used it is, but it does look very promising in the open source world.
Here’s an example of a map application built using Open Scales.
UMap is an AS3 Map component/sdk built by Advanced Flash Components (www.afcomponents.com). They have some very nice looking maps and support data from Bing Maps, OpenStreetMap, CloudMade, Yahoo, DigitalGlobe, MapQuest, ArcGIS (ESRI) and Zoomify.
Licensing details can be found here. They start around $2500 for a single domain.
Yahoo – ActionScript-Flash API
This has been deprecated in lieu of Nokia’s Ovi Maps
Flash-Based Map Application
The output is a fully baked, sometimes interactive map application. It’s not worth going into too much detail here as these are more fully baked solutions and not something you would use to build a custom application. Examples include:
I hope this clears a few things up. And of course, feel free to comment if you feel I’ve misrepresented anything here.