/* * Open Source Routing Machine (OSRM) - Web (GUI) Interface * Copyright (C) Pascal Neis, 2011 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU AFFERO General Public License as published by * the Free Software Foundation; either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * or see http://www.gnu.org/licenses/agpl.txt. */ /** * Title: Map.js * Description: JS file to show a map, for markers, left slide div, ... * * @author Pascal Neis, pascal@neis-one.org * @version 0.1.1 2011-06-09 */ //====================== // OBJECTS //Map var map; //Status object for what position actually a coordinate is searched var status = ''; //possible values [start,end] function getStatus(){ return status; } function setStatus(stat){ status = stat; } //Layer var dragLayer; var vectorLayerRoute; var markersLayer; //====================== // FUNCTIONS /* * init()-Function to create the map div */ function init(){ //Create Map map = new OpenLayers.Map ("map", { controls:[ new OpenLayers.Control.Navigation(), new OpenLayers.Control.Permalink(), new OpenLayers.Control.LayerSwitcher()], maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34), maxResolution: 156543.0399, numZoomLevels: 19, units: 'm', projection: new OpenLayers.Projection("EPSG:900913"), displayProjection: new OpenLayers.Projection("EPSG:4326") } ); //Add the base layers. var coverageLayer = new OpenLayers.Layer.Vector("Coverage", { style: { strokeColor: "#000000", strokeTransparency: 0.5, strokeWidth: 4 } }); if("map.project-osrm.org" == location.host) { var coveragePointList = [ new OpenLayers.Geometry.Point(-11.99, 58.80), new OpenLayers.Geometry.Point(-11.99, 35.30), new OpenLayers.Geometry.Point(-7.57, 35.30), new OpenLayers.Geometry.Point(9.22, 38.24), new OpenLayers.Geometry.Point(15.38, 35.39), new OpenLayers.Geometry.Point(18.92, 40.02), new OpenLayers.Geometry.Point(15.70, 42.25), new OpenLayers.Geometry.Point(15.70, 55.40), new OpenLayers.Geometry.Point(30.31, 60.29), new OpenLayers.Geometry.Point(30.31, 71.27), new OpenLayers.Geometry.Point(21.01, 71.27), new OpenLayers.Geometry.Point(-11.99, 58.80) ]; var line_string = new OpenLayers.Geometry.LineString(coveragePointList).transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913")); coverageLayer.addFeatures([new OpenLayers.Feature.Vector(line_string)]); map.addLayer(coverageLayer); } map.addLayer(new OpenLayers.Layer.OSM.Mapnik("Mapnik")); map.addLayer(new OpenLayers.Layer.OSM.MapQuest("MapQuest")); map.addLayer(new OpenLayers.Layer.OSM.Osmarender("Osmarender")); //Add layer for the route vectorLayerRoute = new OpenLayers.Layer.Vector("Route",{maxResolution: 156543.0339}); map.addLayer(vectorLayerRoute); //Add Layerswitcher map.addControl(new OpenLayers.Control.LayerSwitcher()); //Add Panzoombar var panZoomBar = new OpenLayers.Control.PanZoomBar({id:'panzoombar',displayClass:'olControlPanZoomBar'}) map.addControl(panZoomBar); //Customize the position of the panzoombar document.getElementById('panzoombar').style.left="400px"; document.getElementById('panzoombar').style.top="25px"; //Create drag vector layer dragLayer = new OpenLayers.Layer.Vector( "Start/End Marker",{ styleMap: new OpenLayers.StyleMap({ // Set the external graphic and background graphic images. externalGraphic: '${icon}', // Makes sure the background graphic is placed correctly relative // to the external graphic. backgroundXOffset: -11, backgroundYOffset: -40, graphicXOffset: -11, graphicYOffset: -40, // Set the z-indexes of both graphics to make sure the background // graphics stay in the background (shadows on top of markers looks // odd; let's not do that). graphicZIndex: 10, backgroundGraphicZIndex: 11, pointRadius: 10, graphicWidth: 22, graphicHeight: 40 }), rendererOptions: {yOrdering: true} } ); // Add a drag feature control to move features around. var dragFeatures = new OpenLayers.Control.DragFeature(dragLayer, { onDrag: function(feature, pixel){ feature.move(map.getLonLatFromPixel(pixel)); if(!ISCALCULATING){ routing(true); }}, onComplete: function(feature, pixel){ feature.move(map.getLonLatFromPixel(pixel)); routing(false); }, onLeave: function(f){ if(!ISCALCULATING){ routing(false); }} }); map.addControl(dragFeatures); dragFeatures.activate(); map.addLayers([dragLayer]); //Add a marker layer markersLayer = new OpenLayers.Layer.Markers("Markers"); map.addLayer(markersLayer); //Add zoom event for rerouting map.events.on({zoomend: function(e) {reroute();}}); // Set center of the map if (!map.getCenter()){ map.setCenter(new OpenLayers.LonLat(600000, 6600000),6); } //Check if the URL contains some GET parameter, e.g. for the route checkURL(); } //Helper Functions function checkReturn(textfieldname,e){ var evt = e || window.event; if(!evt){ return; } var key = 0; if (evt.keyCode) { key = evt.keyCode; } else if (typeof(evt.which)!= 'undefined') { key = evt.which; } if( key == 13 && textfieldname=='start'){ setStatus('start'); geocodeAddress('start'); return; } if( key == 13 && textfieldname=='end'){ setStatus('end'); geocodeAddress('end'); return; } } function closeOpenDiv(name){ if(document.getElementById(name).style.display == 'none'){ document.getElementById(name).style.display = ''; } else{ document.getElementById(name).style.display = 'none'; } } //URL Functions function checkURL(){ var getObjs = new Array(); var getString = document.location.search.substr(1,document.location.search.length); if(getString != ''){ var getArray=getString.split('&'); for(i=0 ; i1){ v = vArr[1]; } getObjs[unescape(vArr[0])]=unescape(v); } } var fr = getObjectOfArray(getObjs, "fr"); var to = getObjectOfArray(getObjs, "to"); if(fr != 'undefined' && to != 'undefined'){ //From var fr_pos = fr.split(','); var fr_lonlat = new OpenLayers.LonLat(fr_pos[1],fr_pos[0]); setMarkerAndZoom('start', fr_lonlat); isStartPointSet = true; //To var to_pos = to.split(','); var to_lonlat = new OpenLayers.LonLat(to_pos[1],to_pos[0]); setMarker('end', to_lonlat); isEndPointSet = true; //Calculate the route routing(false); } } function getObjectOfArray(objects, elementName){ if(!objects[elementName]){ return 'undefined'; } return objects[elementName]; }