A look at the various open source/open data options for an open maps stack - OpenStreetMap, OpenLayers, etc. Also goes into a bit more detail on the Mapstraction library.
2. Mapping APIs These are the top players in the (Interactive) Mapping API world. Google Yahoo! Microsoft Mapquest
3. Mapping APIs underlying data javascript UI library rendered tiles Basically each of those APIs have this composition, where most or all of the blocks are not “open.” provided for developer use
4. Mapping APIs underlying data javascript UI library rendered tiles So, to have an "Open Maps API", we need to make each of these layers open. OpenStreetMap OpenAerialMap OpenTopoMap ..other sources... OSMARender Mapnik Mapstraction OpenLayers
5. OpenStreetMap/OSMARender Basically a map wiki. Users trace data, upload GPS tracks, import other open data. Primarily for POIs/roads. OSMARender software is used to output tiles of data. Editing: Using: underlying data rendered tiles
6. OpenAerialMap/OpenTopoMap A repository for satellite and physical map uploads (raster data). Blended together for unified tile output. underlying data rendered tiles
7. Mapnik Open source C++ software that generates map tiles from geo input formats (SHP/TIFF/PostGIS). rendered tiles
8. OpenLayers Open-source JS library that creates interactive maps with any tile source and adds overlays. Also designed for easy hook-up with tile generating servers. javascript UI library
9. Mapstraction Open-source JS library that wraps other maps APIs (Google, MS, Yahoo, OpenLayers, MapQuest, MultiMap, OpenLayers,etc). Developer can avoid vendor lock-in while abiding to ToU. javascript UI library
10. Possible open stacks OpenStreetMap + OSMARender OpenAerialMap OpenTopoMap OpenLayers Google Maps API OpenLayers Mapquest API Mapstraction OpenStreetMap + OSMARender OpenAerialMap OpenTopoMap Google Maps API ESRI SHP files + PostGIS DB OpenLayers Mapnik Depending on your needs (licensing/data flexibility/pricing), you can combine the various open components for a custom stack. Just a few permutations below...
15. Mapstraction: Looking at the code Mapstraction.prototype.setCenterAndZoom = function(point, zoom) { var map = this.maps[this.api]; switch (this.api) { case 'google': case 'openstreetmap': map.setCenter(point.toGoogle(), zoom); break; case 'microsoft': map.SetCenterAndZoom(point.toMicrosoft(),zoom); break; case 'openlayers': map.setCenter(point.toOpenLayers(), zoom); break; case 'multimap': map.goToPosition( new MMLatLon( point.lat, point.lng ), zoom ); break; case 'map24': var newSettings = {}; newSettings.Latitude = point.lat*60; newSettings.Longitude = point.lon*60; ..... A snippet from setCenterAndZoom in the JS: