Sometimes you just want to throw an image on a map. This example shows how to position an image using two locations for the top-right and bottom-left corner. The map takes care of panning and zooming! While this example requires that the image be axis-aligned, it can be easily extended to use an affine transform for more flexible projection.
The map background is an image layer from CloudMade. Register a developer account with CloudMade for your own API key.
The image overlay is implemented using an anonymous subclass of po.layer, which delegates tile creation to the overlay method.
var po = org.polymaps; var map = po.map() .container(document.getElementById("map").appendChild(po.svg("svg"))) .zoomRange([12, 15]) .add(po.interact()); map.add(po.image() .url(po.url("http://{S}tile.cloudmade.com" + "/1a1b06b230af4efdbb989ea99e9841af" // http://cloudmade.com/register + "/998/256/{Z}/{X}/{Y}.png") .hosts(["a.", "b.", "c.", ""]))); map.add(po.layer(overlay) .tile(false)); map.add(po.compass() .pan("none")); /** A lightweight layer implementation for an image overlay. */ function overlay(tile, proj) { proj = proj(tile); var tl = proj.locationPoint({lon: -122.518, lat: 37.816}), br = proj.locationPoint({lon: -122.375, lat: 37.755}), image = tile.element = po.svg("image"); image.setAttribute("preserveAspectRatio", "none"); image.setAttribute("x", tl.x); image.setAttribute("y", tl.y); image.setAttribute("width", br.x - tl.x); image.setAttribute("height", br.y - tl.y); image.setAttributeNS("http://www.w3.org/1999/xlink", "href", "sf1906.png"); }