Yahoo is a nice alternative service to Google Maps for displaying maps on your website or service. Amongst its benefits:
- it’s super easy to set up, as we’ll show below
- it requires an “application key”, but once you have this you can run on any domain. GMaps requires a per-domain key, which means that if your deploying to multiple domains — for example, if you have a http://user.example.com type site — you’re suddenly going to find yourself with an intractable problem
- it plays moderately well with YUI conceptually, though it doesn’t seem to use the same code base. UPDATE: you have to do hacks to work with YUI. Sigh.
Note that Yahoo provides several APIs for maps, the AJAX API we’re using here, an API for Flash/Actionscript and a REST API for getting map images. There all different, so make sure you’re not reading the wrong docs for what you’re doing.
I’ve created an example map application which displays a map, the current lat/lon and zoom level, and lets the map position to be adjusted by editing those same values. If you’d like to get started with the Yahoo AJAX maps API:
- get an application key – do not reuse mine or anyone else’s please
- copy the code below to “map.html” in favorite hosting environment — it should even work off your disk
- add your application key in the appropriate place
- run, enjoy, modify
Further reading:
Source:
<html>
<head>
<script type="text/javascript"
src="http://api.maps.yahoo.com/ajaxymap?v=3.8&appid=YOURAPPID"></script>
<style type="text/css">
#map{
height: 75%;
width: 100%;
}
</style>
</head>
<body>
<div id="map"></div>
<p>
Lat: <input type="text" id="id_lat" onchange="map_js.onupdate_ll()" />
Lon: <input type="text" id="id_lon" onchange="map_js.onupdate_ll()" />
Zoom: <input type="text" id="id_zoom" onchange="map_js.onupdate_zoom()" />
</p>
<script type="text/javascript">
map_js = {
e_lat : null,
e_lon : null,
e_map : null,
y_map : null,
create : function() {
map_js.e_map = document.getElementById('map');
map_js.e_lat = document.getElementById("id_lat");
map_js.e_lon = document.getElementById("id_lon");
map_js.e_zoom = document.getElementById("id_zoom");
map_js.y_map = new YMap(map_js.e_map);
map_js.y_map.addTypeControl();
map_js.y_map.addZoomLong();
map_js.y_map.addPanControl();
map_js.y_map.setMapType(YAHOO_MAP_REG);
YEvent.Capture(map_js.y_map, EventsList.endMapDraw, map_js.onposition);
YEvent.Capture(map_js.y_map, EventsList.changeZoom, map_js.onposition);
YEvent.Capture(map_js.y_map, EventsList.endPan, map_js.onposition);
map_js.y_map.drawZoomAndCenter("Toronto, ON", 5);
},
onposition : function() {
var c = map_js.y_map.getCenterLatLon();
map_js.e_lat.value = c.Lat;
map_js.e_lon.value = c.Lon;
var z = map_js.y_map.getZoomLevel();
map_js.e_zoom.value = z;
},
onupdate_ll : function() {
map_js.y_map.panToLatLon(new YGeoPoint(map_js.e_lat.value, map_js.e_lon.value));
},
onupdate_zoom : function() {
map_js.y_map.setZoomLevel(map_js.e_zoom.value);
},
end : 0
};
map_js.create();
</script>
</body>
</html>
[...] way we set up the events in Google Maps is a little different than we did in MapQuest, Yahoo Maps and Visual Earth. GMaps uses a two phase creation scheme, using one call to create the map object [...]