- function mercator2lonlat( merc ) {
- var lon_deg = (merc.lon / 20037508.34) * 180;
- var lat_deg = (merc.lat / 20037508.34) * 180;
- var PI = 3.14159265358979323846;
- lat_deg = 180/PI * (2 * Math.atan(Math.exp(lat_deg * PI / 180)) - PI / 2);
- return new OpenLayers.LonLat(lon_deg,lat_deg);
- }
-
- function lonlat2mercator( ll ) {
- var lon = ll.lon * 20037508.34 / 180;
- var lat = Math.log(Math.tan( (90 + ll.lat) * PI / 360)) / (PI / 180);
- lat = lat * 20037508.34 / 180;
- return new OpenLayers.LonLat(lon,lat);
- }
-
- function init(){
-
- OpenLayers.Util.onImageLoadError = function() {
- this.src = OpenLayers.Util.getImagesLocation() + "404.png";
- }
- map = new OpenLayers.Map( "map",
- {maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34), maxZoomLevel:18, maxResolution:156543, units:'meters', projection: "EPSG:41001"} );
- layer = new OpenLayers.Layer.TMS( "Mapnik", "http://tile.openstreetmap.org/", {type:'png', getURL:getTileURL} );
- map.addLayer(layer);
- layer = new OpenLayers.Layer.TMS( "Osmarender", "http://dev.openstreetmap.org/~ojw/Tiles/tile.php/", {type:'png', getURL:getTileURL} );
- map.addLayer(layer);
-
- //Marker stuff
-
- markers = new OpenLayers.Layer.Markers("markers");
- map.addLayer(markers);
-
- <% if marker %>
- marker = new OpenLayers.Marker(new OpenLayers.LonLat(mlon,mlat));
- marker.events.register("click", "marker", markerOnClick );
- markers.addMarker(marker);
- <%end%>
-
- var near_icon = OpenLayers.Marker.defaultIcon();
- near_icon.url = OpenLayers.Util.getImagesLocation() + "marker-green.png";;
- var i = nearest.length;
- while( i-- ) {
- var nearmarker = new OpenLayers.Marker( lonlat2mercator( new OpenLayers.LonLat( nearest[i].home_lon, nearest[i].home_lat ) ), near_icon.clone() );
- markers.addMarker( nearmarker );
- nearmarker.events.register("click", "nearmarker", makeMarkerFunction( i ) );
- }
-
- map.addControl(new OpenLayers.Control.LayerSwitcher());
- map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
-
- map.events.register("click", map, setHome);
- }
-
- function getTileURL( bounds ) {
- var res = this.map.getResolution();
- var x = Math.round ((bounds.left - this.maxExtent.left) / (res * this.tileSize.w));
- var y = Math.round ((this.maxExtent.top - bounds.top) / (res * this.tileSize.h));
- var z = this.map.getZoom();
- return this.url + z + "/" + x + "/" + y + "." + this.type;
- }
-
- function makeMarkerFunction( i ) {
- return function() { markerOnClick( i ); };
- }
-
- function markerOnClick( i ) {
- var html, position;
- if( typeof( i ) == 'number' ) {
- html = '<p>Nearby mapper: <a href="/user/'+nearest[i].display_name+'">'+nearest[i].display_name+'</a></p>';
- html += '<p style="text-align:right">(<a href="#" onclick="return closePopup();">close</a>)</p>';
- position = lonlat2mercator( new OpenLayers.LonLat( nearest[i].home_lon, nearest[i].home_lat ) );
- } else {
- html = '<p>Your location (<a href="#" onclick="return closePopup()">close</a>)</p>';
- position = new OpenLayers.LonLat(mlon,mlat);
- }
- var box = document.getElementById( 'highlightinfo' );
- box.innerHTML = html;
- closePopup();
- popup = new OpenLayers.Popup.AnchoredBubble( 'popup', position, new OpenLayers.Size( box.offsetWidth, box.offsetHeight ), html, OpenLayers.Marker.defaultIcon(), true );
- map.addPopup( popup );
- }