Deleting old web front end.
| @ -31,11 +31,16 @@ or see http://www.gnu.org/licenses/agpl.txt. | |||||||
| 
 | 
 | ||||||
| class NodeInformationHelpDesk{ | class NodeInformationHelpDesk{ | ||||||
| public: | public: | ||||||
| 	NodeInformationHelpDesk(const char* ramIndexInput, const char* fileIndexInput, const unsigned _numberOfNodes, const unsigned crc) : numberOfNodes(_numberOfNodes), checkSum(crc) { |     NodeInformationHelpDesk(const char* ramIndexInput, const char* fileIndexInput, const unsigned _numberOfNodes, const unsigned crc) : numberOfNodes(_numberOfNodes), checkSum(crc) { | ||||||
| 		readOnlyGrid = new ReadOnlyGrid(ramIndexInput,fileIndexInput); |         readOnlyGrid = new ReadOnlyGrid(ramIndexInput,fileIndexInput); | ||||||
| 		coordinateVector.reserve(numberOfNodes); |         coordinateVector.reserve(numberOfNodes); | ||||||
| 	    assert(0 == coordinateVector.size()); |         assert(0 == coordinateVector.size()); | ||||||
| 	} |     } | ||||||
|  | 
 | ||||||
|  |     //Todo: Shared memory mechanism
 | ||||||
|  |     NodeInformationHelpDesk(const char* ramIndexInput, const char* fileIndexInput, const unsigned crc) : checkSum(crc) { | ||||||
|  |         readOnlyGrid = new ReadOnlyGrid(ramIndexInput,fileIndexInput); | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
| 	~NodeInformationHelpDesk() { | 	~NodeInformationHelpDesk() { | ||||||
| 		delete readOnlyGrid; | 		delete readOnlyGrid; | ||||||
| @ -50,6 +55,10 @@ public: | |||||||
| 		readOnlyGrid->OpenIndexFiles(); | 		readOnlyGrid->OpenIndexFiles(); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	void initNNGrid() { | ||||||
|  | 	    readOnlyGrid->OpenIndexFiles(); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	inline int getLatitudeOfNode(const NodeID node) const { return coordinateVector.at(node).lat; } | 	inline int getLatitudeOfNode(const NodeID node) const { return coordinateVector.at(node).lat; } | ||||||
| 
 | 
 | ||||||
| 	inline int getLongitudeOfNode(const NodeID node) const { return coordinateVector.at(node).lon; } | 	inline int getLongitudeOfNode(const NodeID node) const { return coordinateVector.at(node).lon; } | ||||||
|  | |||||||
| @ -1,176 +0,0 @@ | |||||||
| /* |  | ||||||
|  *  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: Geocode.js |  | ||||||
|  * Description: JS file for geocoding |  | ||||||
|  * |  | ||||||
|  * @author Pascal Neis, pascal@neis-one.org  |  | ||||||
|  * @version 0.1 2011-05-15 |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| //======================
 |  | ||||||
| // OBJECTS
 |  | ||||||
| var HOST_GEOCODE_URL = 'http://open.mapquestapi.com'; |  | ||||||
| var GEOCODE_POST = HOST_GEOCODE_URL + '/nominatim/v1/search?format=json&json_callback=showResultsGeocode'; |  | ||||||
| var searchType = 'search'; |  | ||||||
| 
 |  | ||||||
| var isStartPointSet = false; |  | ||||||
| var isEndPointSet = false; |  | ||||||
| 
 |  | ||||||
| //======================
 |  | ||||||
| // FUNCTIONS
 |  | ||||||
| /* |  | ||||||
|  * geocodeAddress()-Function to read out textfield and send request to a OSM nominatim geocoder |  | ||||||
|  */ |  | ||||||
| function geocodeAddress(tf){ |  | ||||||
| 	var freeform; |  | ||||||
| 		 |  | ||||||
| 	if(tf == 'start'){ |  | ||||||
| 		freeform = document.getElementById('tfStartSearch').value; |  | ||||||
| 	} |  | ||||||
| 	if(tf == 'end'){ |  | ||||||
| 		freeform = document.getElementById('tfEndSearch').value; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if(freeform.match(/^\s*[-+]?[0-9]*\.?[0-9]+\s*[,;]\s*[-+]?[0-9]*\.?[0-9]+\s*$/)){ |  | ||||||
| 		 |  | ||||||
| 		var marker; |  | ||||||
| 		if(tf == 'start'){ |  | ||||||
| 			isStartPointSet = true; |  | ||||||
| 			marker = 'start'; |  | ||||||
| 		} |  | ||||||
| 		if(tf == 'end'){ |  | ||||||
| 			isEndPointSet = true; |  | ||||||
| 			marker = 'end'; |  | ||||||
| 		} |  | ||||||
| 		var coord = freeform.split(/[,;]/); |  | ||||||
|                 lonlat = new OpenLayers.LonLat(coord[1],coord[0]); |  | ||||||
|                 setMarkerAndZoom(marker, lonlat); |  | ||||||
|                 return; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	document.getElementById('information').style.visibility = 'visible'; |  | ||||||
| 	document.getElementById('information').innerHTML =  '<p class="infoHL">One moment please ...</p>'; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     var newURL = GEOCODE_POST + "&q="+freeform; |  | ||||||
| 	var script = document.createElement('script'); |  | ||||||
|     script.type = 'text/javascript'; |  | ||||||
|     script.src = newURL; |  | ||||||
|     document.body.appendChild(script); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /* |  | ||||||
|  * showResultsGeocode()-Function to show the geocode result in a div |  | ||||||
|  */ |  | ||||||
| function showResultsGeocode(response) { |  | ||||||
|     var html = '';     |  | ||||||
|     var lonlat = ''; |  | ||||||
| 	 |  | ||||||
| 	if(response){ |  | ||||||
| 		html += '<p class="infoHL">Search Results:</p>'; |  | ||||||
| 		html += '<table>' |  | ||||||
| 		var markername; |  | ||||||
| 		if(getStatus()=='start'){ |  | ||||||
| 			markername = 'start'; isStartPointSet = true; |  | ||||||
| 		} |  | ||||||
| 		else if(getStatus()=='end'){ |  | ||||||
| 			markername = 'end';	isEndPointSet = true; |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 		for(var i=0; i < response.length; i++){ |  | ||||||
| 			var result = response[i]; var resultNum = i+1;			 |  | ||||||
|         	//odd or even ?
 |  | ||||||
|         	var rowstyle='geocodeResultOdd'; |  | ||||||
|         	if(i%2==0){ rowstyle='geocodeResultEven'; } |  | ||||||
|         	 |  | ||||||
| 			html += '<tr class="'+rowstyle+'">'; |  | ||||||
| 			html += '<td align="right" valign="top"><span class="routeSummarybold">'+resultNum+'</span></td>'; |  | ||||||
| 			html += '<td class="'+rowstyle+'">'; |  | ||||||
| 			if(result.display_name){ |  | ||||||
| 				var new_display_name = result.display_name;//.replace(/,/g, ",<br />")
 |  | ||||||
| 				html += '<a href="#" onclick="javascript:setMarkerAndZoom(\''+markername+'\', new OpenLayers.LonLat('+result.lon+','+result.lat+'));">'+new_display_name.trim()+'</a>'; |  | ||||||
| 			} |  | ||||||
| 			html += "</td></tr>"; |  | ||||||
| 			 |  | ||||||
| 			//alert(result.lat + ", " + result.lon);
 |  | ||||||
| 			if(lonlat == ''){ |  | ||||||
| 				lonlat = new OpenLayers.LonLat(result.lon,result.lat); |  | ||||||
| 			} |  | ||||||
| 		}		 |  | ||||||
| 		html += '</table>'; |  | ||||||
| 		 |  | ||||||
| 		setMarkerAndZoom(markername, lonlat); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
|      |  | ||||||
|     switch (searchType) { |  | ||||||
| 		case "search": |  | ||||||
| 			document.getElementById('information').style.display = ""; |  | ||||||
| 			document.getElementById('information').innerHTML = html; |  | ||||||
| 			break; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /* |  | ||||||
|  * setMarkerAndZoom()-Function to set a marker on the map and zoom |  | ||||||
|  */ |  | ||||||
| function setMarkerAndZoom(markername,lonlat){ |  | ||||||
| 	setMarker(markername,lonlat); |  | ||||||
| 	 |  | ||||||
| 	//Hack - FIXME !
 |  | ||||||
| 	lonlat.lon -= 500; |  | ||||||
| 	//Set Center
 |  | ||||||
| 	map.setCenter(lonlat, 15); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /* |  | ||||||
|  * setMarker()-Function to set a marker on the map |  | ||||||
|  */ |  | ||||||
| function setMarker(markername,lonlat){ |  | ||||||
| 	lonlat.transform(EPSG_4326, EPSG_900913); |  | ||||||
| 	for(var i= 0; i<dragLayer.features.length; i++){ |  | ||||||
| 		if(dragLayer.features[i].name == markername){ dragLayer.removeFeatures([dragLayer.features[i]]); }	 |  | ||||||
| 	} |  | ||||||
| 	var point = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat)); |  | ||||||
| 	point.attributes = { icon: "img/start.png" }; |  | ||||||
| 
 |  | ||||||
| 	if(markername == 'start'){ |  | ||||||
| 		point.attributes = { icon: "img/start.png" }; |  | ||||||
| 	} |  | ||||||
| 	else if(markername == 'end'){ |  | ||||||
| 		point.attributes = { icon: "img/end.png" }; |  | ||||||
| 	} |  | ||||||
| 		 |  | ||||||
| 	point.name = markername; |  | ||||||
| 	dragLayer.addFeatures([point]); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /* |  | ||||||
|  * getMarkerByName()-Function to return the marker-object by a name |  | ||||||
|  */ |  | ||||||
| function getMarkerByName(markerName){ |  | ||||||
| 	for(var i= 0; i<dragLayer.features.length; i++){ |  | ||||||
| 		if(dragLayer.features[i].name == markerName){ |  | ||||||
| 			return dragLayer.features[i]; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| @ -1,355 +0,0 @@ | |||||||
| /* |  | ||||||
|  *  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; } |  | ||||||
| 
 |  | ||||||
| //Indicator
 |  | ||||||
| var ISDRAGGING = false; |  | ||||||
| 
 |  | ||||||
| //Layer
 |  | ||||||
| var dragLayer; |  | ||||||
| var vectorLayerRoute; |  | ||||||
| var vectorLayerViaRoute; |  | ||||||
| var markersLayer; |  | ||||||
| 
 |  | ||||||
| var selectFeature; |  | ||||||
| //======================
 |  | ||||||
| // 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("OSM.org")); |  | ||||||
| 	map.addLayer(new OpenLayers.Layer.OSM.De("OSM.de")); |  | ||||||
| 	map.addLayer(new OpenLayers.Layer.OSM.MapQuest("MapQuest Open")); |  | ||||||
| 	map.addLayer(new OpenLayers.Layer.OSM.Transport("Transport Map")); |  | ||||||
| 
 |  | ||||||
| 	//Add layer for the route
 |  | ||||||
| 	vectorLayerRoute = new OpenLayers.Layer.Vector("Route",{maxResolution: 156543.0339}); |  | ||||||
| 	map.addLayer(vectorLayerRoute); |  | ||||||
| 	 |  | ||||||
| 	//Add layer for temporary via route
 |  | ||||||
| 	vectorLayerViaRoute = new OpenLayers.Layer.Vector("ViaRoute",{maxResolution: 156543.0339}); |  | ||||||
| 	map.addLayer(vectorLayerViaRoute); |  | ||||||
|      |  | ||||||
| 	//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: {zIndexing: true} |  | ||||||
|                 } |  | ||||||
|            ); |  | ||||||
|     // Add a drag feature control to move features around.
 |  | ||||||
|     var dragFeatures = new OpenLayers.Control.DragFeature(dragLayer, |  | ||||||
| 		{ onDrag: function(feature, pixel){ |  | ||||||
| 			ISDRAGGING = true; |  | ||||||
| 	    	if(feature.name == "start" || feature.name == "end") { |  | ||||||
| 	    		feature.move(map.getLonLatFromPixel(pixel)); |  | ||||||
| 				if(!ISCALCULATING){ routing(true); } |  | ||||||
| 			} |  | ||||||
| 			if(feature.name == "via") { |  | ||||||
| 				computeViaRoute(pixel, true); |  | ||||||
| 			}  |  | ||||||
| 			if(feature.name == "viapoint" && feature.popup) { |  | ||||||
| 				map.removePopup(feature.popup); |  | ||||||
| 				computeViaRoute(pixel, true, feature.viaIndex); |  | ||||||
| 			}  |  | ||||||
| 			}, |  | ||||||
| 		  onComplete: function(feature, pixel){ |  | ||||||
| 			  ISDRAGGING = false; |  | ||||||
| 				if(feature.name == "start" || feature.name == "end") { |  | ||||||
| 					feature.move(map.getLonLatFromPixel(pixel)); |  | ||||||
| 					routing(false); |  | ||||||
| 				} else if(feature.name == "via") { |  | ||||||
| 					console.log('finished via'); |  | ||||||
| 					//Erase temporary point from draglayer
 |  | ||||||
| 					dragLayer.renderer.eraseFeatures([feature]); |  | ||||||
| 					//delete temporary route from via route Layer
 |  | ||||||
| 					vectorLayerViaRoute.removeFeatures(vectorLayerViaRoute.features); |  | ||||||
| 					//compute via route
 |  | ||||||
| 					computeViaRoute(pixel, false); |  | ||||||
| 					feature.destroy(); |  | ||||||
| 				} else if(feature.name == "viapoint") { |  | ||||||
| 					//Erase temporary point from draglayer
 |  | ||||||
| 					dragLayer.renderer.eraseFeatures([feature]); |  | ||||||
| 					//delete via point from vector
 |  | ||||||
| 					viaPointsVector.splice(feature.viaIndex,1); |  | ||||||
| 					//delete temporary route from via route Layer
 |  | ||||||
| 					vectorLayerViaRoute.removeFeatures(vectorLayerViaRoute.features); |  | ||||||
| 					//compute via route
 |  | ||||||
| 					computeViaRoute(pixel, false); |  | ||||||
| 					feature.destroy(); |  | ||||||
| 				} |  | ||||||
| 				}, |  | ||||||
| 		  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();distanceToRoute(null);}}); |  | ||||||
| 	 |  | ||||||
| 	// Register Callback to evaluate distance to from mouse location to route on Mousemove
 |  | ||||||
| 	map.events.on({mousemove: function(e) {distanceToRoute(e.xy);}}); |  | ||||||
| 	 |  | ||||||
| 	// 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(); 	 |  | ||||||
| 	 |  | ||||||
| 	for(var i = 0; i < map.layers.length; i++) { |  | ||||||
| 		map.layers[i].transitionEffect = 'resize'; |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	document.getElementById('map').oncontextmenu = function(e){ |  | ||||||
| 		 e = e?e:window.event; |  | ||||||
| 		 if (e.preventDefault) e.preventDefault(); // For non-IE browsers.
 |  | ||||||
| 		 else return false; // For IE browsers.
 |  | ||||||
| 	}; |  | ||||||
| 
 |  | ||||||
| 	// A control class for capturing click events...
 |  | ||||||
| 	OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, {                 |  | ||||||
| 
 |  | ||||||
| 	defaultHandlerOptions: { |  | ||||||
| 	'single': true, |  | ||||||
| 	'double': true, |  | ||||||
| 	'pixelTolerance': 0, |  | ||||||
| 	'stopSingle': false, |  | ||||||
| 	'stopDouble': false |  | ||||||
| 	}, |  | ||||||
| 	handleRightClicks:true, |  | ||||||
| 	initialize: function(options) { |  | ||||||
| 	this.handlerOptions = OpenLayers.Util.extend( |  | ||||||
| 	{}, this.defaultHandlerOptions |  | ||||||
| 	); |  | ||||||
| 	OpenLayers.Control.prototype.initialize.apply( |  | ||||||
| 	this, arguments |  | ||||||
| 	);  |  | ||||||
| 	this.handler = new OpenLayers.Handler.Click( |  | ||||||
| 	this, this.eventMethods, this.handlerOptions |  | ||||||
| 	); |  | ||||||
| 	}, |  | ||||||
| 	CLASS_NAME: "OpenLayers.Control.Click" |  | ||||||
| 
 |  | ||||||
| 	}); |  | ||||||
| 
 |  | ||||||
| 	// Add an instance of the Click control that listens to various click events:
 |  | ||||||
| 	var oClick = new OpenLayers.Control.Click({eventMethods:{ |  | ||||||
| 	'rightclick': function(e) { |  | ||||||
| 	rightClick(e); |  | ||||||
| 	}, |  | ||||||
| 	'click': function(e) { |  | ||||||
| 	leftClick(e); |  | ||||||
| 	}, |  | ||||||
| 	'dblclick': function(e) { |  | ||||||
| 	dblClick(e); |  | ||||||
| 	}, |  | ||||||
| 	'dblrightclick': function(e) { |  | ||||||
| 	dblRightClick(e); |  | ||||||
| 	} |  | ||||||
| 	}}); |  | ||||||
| 	map.addControl(oClick); |  | ||||||
| 	oClick.activate(); |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
| 	selectFeature = new OpenLayers.Control.SelectFeature( |  | ||||||
|     [dragLayer], |  | ||||||
|     { |  | ||||||
|         clickout: true, toggle: false, |  | ||||||
|         multiple: false, hover: true, |  | ||||||
|         toggleKey: "ctrlKey", // ctrl key removes from selection
 |  | ||||||
|         multipleKey: "shiftKey", // shift key adds to selection
 |  | ||||||
|         onSelect: createPopup, |  | ||||||
| 		onUnselect: destroyPopup |  | ||||||
| 
 |  | ||||||
|     } |  | ||||||
| 	); |  | ||||||
| 	map.addControl(selectFeature); |  | ||||||
| 	dragLayer.events.on({ |  | ||||||
| 		"featureselected": function(e) { |  | ||||||
| 			featureSelected(e); |  | ||||||
| 		}, |  | ||||||
| 		"featureunselected": function(e) { |  | ||||||
| 			featureUnselected(e); |  | ||||||
| 		} |  | ||||||
| 	}); |  | ||||||
| 	 |  | ||||||
| 	selectFeature.activate();  |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| //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('&');  |  | ||||||
| 		console.log(getArray); |  | ||||||
| 		for(i=0 ; i<getArray.length ; ++i){  |  | ||||||
| 			var v='';  |  | ||||||
| 			var vArr = getArray[i].split('=');  |  | ||||||
| 			if(vArr.length>1){ v = vArr[1]; }  |  | ||||||
| 			if("via" == vArr[0]) { |  | ||||||
| 				var via_loc = unescape(v).split(',');  |  | ||||||
| 				for(var j=0; j<via_loc.length; j++) { via_loc[j] = parseFloat(via_loc[j]); } |  | ||||||
| 				viaPointsVector.push(via_loc); |  | ||||||
| 			} else { |  | ||||||
| 				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];  |  | ||||||
| }  |  | ||||||
| @ -1,115 +0,0 @@ | |||||||
| var selectedFeature = null; |  | ||||||
| var popupCloseTimer = null; |  | ||||||
| var popupToRemove = null; |  | ||||||
| 
 |  | ||||||
| function rightClick(e) { |  | ||||||
| 	console.log("right click1"); |  | ||||||
| 	if(null == selectedFeature) |  | ||||||
| 		return; |  | ||||||
| 	//alert('rightclick at '+e.xy.x+','+e.xy.y);
 |  | ||||||
| 	console.log("right click2"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function dblClick(e) { |  | ||||||
| 	//alert('dblclick at '+e.xy.x+','+e.xy.y);
 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function dblRightClick(e) { |  | ||||||
| 	//alert('dblrightclick at '+e.xy.x+','+e.xy.y);
 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function leftClick(e) { |  | ||||||
| 	//set start and target via clicks
 |  | ||||||
| 	var lonlat = map.getLonLatFromViewPortPx(e.xy); |  | ||||||
| 	var markername = ""; |  | ||||||
| 	 |  | ||||||
| /*	//routing shall not be done by left clicks |  | ||||||
|  * if (e.ctrlKey || e.altKey) { |  | ||||||
| 		markername = "end"; |  | ||||||
| 		isEndPointSet = true; |  | ||||||
| 	} else if(e.shiftKey) { |  | ||||||
| 		markername = "start"; |  | ||||||
| 		isStartPointSet = true; |  | ||||||
| 	} |  | ||||||
| 	for(var i= 0; i<dragLayer.features.length; i++){ |  | ||||||
| 		if(dragLayer.features[i].name == markername){ dragLayer.removeFeatures([dragLayer.features[i]]); }	 |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	var point = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat)); |  | ||||||
| 	point.attributes = { icon: "img/start.png" }; |  | ||||||
| 
 |  | ||||||
| 	if(markername == 'start'){ |  | ||||||
| 		point.attributes = { icon: "img/start.png" }; |  | ||||||
| 	} |  | ||||||
| 	else if(markername == 'end'){ |  | ||||||
| 		point.attributes = { icon: "img/end.png" }; |  | ||||||
| 	} |  | ||||||
| 		 |  | ||||||
| 	point.name = markername; |  | ||||||
| 	dragLayer.addFeatures([point]); |  | ||||||
| 	reroute(); |  | ||||||
| 	*/ |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function featureSelected(f) { |  | ||||||
| 	if("viapoint" == f.feature.name) { |  | ||||||
| 	//	console.log('selected ' + f.feature.name);
 |  | ||||||
| 		selectedFeature = f.feature; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function featureUnselected(f) { |  | ||||||
| 	if("viapoint" == f.feature.name) { |  | ||||||
| 	//	console.log('unselected ' + f.feature.name);
 |  | ||||||
| 		selectedFeature = null; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function createPopup(feature) { |  | ||||||
| 	if("viapoint" != feature.name || ISDRAGGING) |  | ||||||
| 		return; |  | ||||||
| 		 |  | ||||||
| 	if(popupCloseTimer != null) { |  | ||||||
| 		clearInterval(popupCloseTimer); |  | ||||||
| 		popupCloseTimer = null; |  | ||||||
| 		map.removePopup(popupToRemove); |  | ||||||
| 		popupToRemove = null; |  | ||||||
| 	} |  | ||||||
| 	var location = feature.geometry.getBounds().getCenterLonLat().clone(); |  | ||||||
| 	location.lon; location.lat; |  | ||||||
| 	feature.popup = new OpenLayers.Popup.Anchored("ViaPointInfo", |  | ||||||
| 		location, |  | ||||||
| 		new OpenLayers.Size(16,16), |  | ||||||
| 		'<div><a href="javascript:removeViaPoint('+ feature.viaIndex +')"><img src="img/cancel_small.png"/></a></div>', |  | ||||||
| 		null, |  | ||||||
| 		false, |  | ||||||
| 		destroyPopup ); |  | ||||||
| 	feature.popup.backgroundColor = 'transparent'; |  | ||||||
| 	feature.popup.fixedRelativePosition = true; |  | ||||||
| 	feature.popup.relativePosition = "tr"; |  | ||||||
| 	map.addPopup(feature.popup, true); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function destroyPopup(feature) { |  | ||||||
| 	if(feature.popup) { |  | ||||||
| 		popupToRemove = feature.popup; |  | ||||||
| 		popupCloseTimer = setTimeout("removePopup()",2000); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function removePopup() { |  | ||||||
| 	if(null == popupToRemove) |  | ||||||
| 		return; |  | ||||||
| 		 |  | ||||||
| 	map.removePopup(popupToRemove); |  | ||||||
| 	popupToRemove = null; |  | ||||||
| 	popupCloseTimer = null; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function removeViaPoint(index) { |  | ||||||
| 	for(var i = 0; i < map.popups.length; i++) { |  | ||||||
| 		map.removePopup(map.popups[i]); |  | ||||||
| 	} |  | ||||||
| 	viaPointsVector.splice(index, 1); |  | ||||||
| 	reroute(); |  | ||||||
| } |  | ||||||
| @ -1,394 +0,0 @@ | |||||||
| /* |  | ||||||
|  *  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: Route.js |  | ||||||
|  * Description: JS file for routing |  | ||||||
|  * |  | ||||||
|  * @author Pascal Neis, pascal@neis-one.org  |  | ||||||
|  * @version 0.2 2011-06-23 |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| //======================
 |  | ||||||
| // OBJECTS
 |  | ||||||
| //Map
 |  | ||||||
| var HOST_ROUTING_URL = 'http://localhost:5000/viaroute'; |  | ||||||
| //var HOST_ROUTING_URL = 'http://routingdemo.geofabrik.de/route-via/';
 |  | ||||||
| var HOST_WEBSITE = 'http://map.project-osrm.org/';//location.host
 |  | ||||||
| 
 |  | ||||||
| var ISCALCULATING = false; |  | ||||||
| var EPSG_4326 = new OpenLayers.Projection("EPSG:4326"); |  | ||||||
| var EPSG_900913 = new OpenLayers.Projection("EPSG:900913"); |  | ||||||
| var allRoutePoints = []; |  | ||||||
| //======================
 |  | ||||||
| // FUNCTIONS
 |  | ||||||
| /* |  | ||||||
|  * routing()-Function to create and send route request |  | ||||||
|  */ |  | ||||||
| function routing(isDragRoute){ |  | ||||||
| 	//Check if startpoint is set		
 |  | ||||||
| 	if(!isStartPointSet){ |  | ||||||
| 		//alert("Please set your Start location first!");
 |  | ||||||
| 		document.getElementById('information').innerHTML =  '<p class="infoHLRed">Please set your Start location first!</p>'; |  | ||||||
| 		return; |  | ||||||
| 	} |  | ||||||
| 	//Check if endpoint is set
 |  | ||||||
| 	if(!isEndPointSet){  |  | ||||||
| 		//alert("Please set your Destination first!");
 |  | ||||||
| 		document.getElementById('information').innerHTML =  '<p class="infoHLRed">Please set your Destination first!</p>'; |  | ||||||
| 		return; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	//Check if already a route is planning
 |  | ||||||
| 	if(!isDragRoute){ ISCALCULATING = false; } |  | ||||||
| 	if(ISCALCULATING){ return; } |  | ||||||
| 	else{ ISCALCULATING = true; } |  | ||||||
| 	 |  | ||||||
| 	//Get Coordinates of the Start and Endpoint
 |  | ||||||
| 	var startFeat = getMarkerByName('start'); |  | ||||||
| 	var endFeat = getMarkerByName('end'); |  | ||||||
| 	var from = new OpenLayers.LonLat(startFeat.geometry.x,startFeat.geometry.y).transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:4326")); |  | ||||||
| 	var to = new OpenLayers.LonLat(endFeat.geometry.x,endFeat.geometry.y).transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:4326")); |  | ||||||
| 
 |  | ||||||
| 	//Send Request
 |  | ||||||
| 	var script = document.createElement('script'); |  | ||||||
|     script.type = 'text/javascript'; |  | ||||||
|      |  | ||||||
|     var callBackFunction = 'showResultsRoute'; |  | ||||||
|     var instructions = '&geomformat=cmp&instructions=true'; |  | ||||||
|     if(isDragRoute){ |  | ||||||
|        callBackFunction = 'showResultsDragRoute'; |  | ||||||
|        instructions = '&geomformat=cmp&instructions=false'; |  | ||||||
|        document.getElementById('information').innerHTML =  '<p class="infoHL">Release mouse button to get Route Information!</p>(If no Route Summary is diplayed, press the Route!-button)'; |  | ||||||
|     } |  | ||||||
|      |  | ||||||
|     script.src = HOST_ROUTING_URL + "?loc="+from.lat + ',' + from.lon; |  | ||||||
|     for(var i = 0; i < viaPointsVector.length; i++) { |  | ||||||
| 		script.src += ('&loc=' + viaPointsVector[i][0] + ',' + viaPointsVector[i][1]); |  | ||||||
| 	} |  | ||||||
| 	script.src += '&loc=' + to.lat + ',' + to.lon; |  | ||||||
|     script.src +='&z='+this.map.getZoom()+'&output=json&jsonp='+callBackFunction+instructions; |  | ||||||
|     document.body.appendChild(script); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /* |  | ||||||
|  * reroute()-Function |  | ||||||
|  */ |  | ||||||
| function reroute() { |  | ||||||
| 	if(!isStartPointSet || !isEndPointSet){ return; }	 |  | ||||||
| 	routing(false); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /* |  | ||||||
|  * showResultsDragRoute()-Function to show route result for drag-route |  | ||||||
|  */ |  | ||||||
| function showResultsDragRoute(response) { |  | ||||||
|     if (response) { |  | ||||||
|     	//Display Route
 |  | ||||||
|     	showRouteGeometry(response); |  | ||||||
|     } |  | ||||||
|   	markersLayer.clearMarkers(); |  | ||||||
|     ISCALCULATING = false; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /* |  | ||||||
|  * showResultsRoute()-Function to show route result |  | ||||||
|  */ |  | ||||||
| function showResultsRoute(response) { |  | ||||||
|     if (response) { |  | ||||||
| 		//Display Route
 |  | ||||||
| 		if(document.getElementById("cbNoNames").checked == true){ |  | ||||||
| 			showNoNameStreets(response); |  | ||||||
| 		} |  | ||||||
| 		else{ |  | ||||||
| 			showRouteGeometry(response); |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 		//Save Via Points that come with route
 |  | ||||||
| 		var lengthOfArray = response.via_points.length; |  | ||||||
| 		var i = 0; |  | ||||||
| 		viaPointsVector.length = 0; |  | ||||||
| 		viaPointsVector = response.via_points.slice(0); |  | ||||||
| 		paintViaPoints(); |  | ||||||
|   |  | ||||||
|   		//Create Link of the route
 |  | ||||||
| 		var startFeat = getMarkerByName('start'); |  | ||||||
| 		var endFeat = getMarkerByName('end'); |  | ||||||
| 		var from = new OpenLayers.LonLat(startFeat.geometry.x,startFeat.geometry.y).transform(EPSG_900913,EPSG_4326); |  | ||||||
| 		var to = new OpenLayers.LonLat(endFeat.geometry.x,endFeat.geometry.y).transform(EPSG_900913,EPSG_4326); |  | ||||||
| 		var routelink = '<div id="routelink"><input name="routelink" type="submit" title="Get Link" onClick="createShortLink(\''+HOST_WEBSITE+'?fr='+from.lat.toFixed(6)+','+from.lon.toFixed(6)+'&to='+to.lat.toFixed(6)+','+to.lon.toFixed(6); |  | ||||||
| 		for(i = 0; i < viaPointsVector.length; i++) { |  | ||||||
| 				routelink += "&via=" + viaPointsVector[i][0] + "," + viaPointsVector[i][1]; |  | ||||||
| 		} |  | ||||||
| 		routelink += '\');" value="Get Link"></div>'; |  | ||||||
| 
 |  | ||||||
| 		//Link for the GPX Download 
 |  | ||||||
| 		var gpxLink = '(<a href="'+HOST_ROUTING_URL+'?loc='+from.lat.toFixed(6)+','+from.lon.toFixed(6); |  | ||||||
| 		for(i = 0; i < viaPointsVector.length; i++) { |  | ||||||
| 				gpxLink += "&loc=" + viaPointsVector[i][0] + "," + viaPointsVector[i][1]; |  | ||||||
| 		} |  | ||||||
| 		gpxLink += '&loc='+to.lat.toFixed(6)+','+to.lon.toFixed(6)+'&z='+this.map.getZoom() |  | ||||||
| 		gpxLink += '&output=gpx">Get GPX File</a>)';; |  | ||||||
| 
 |  | ||||||
|         //Show Route Summary
 |  | ||||||
|         var output = '<p class="routeSummaryHL">Some information about your Way <br> from \'<span class="routeSummaryHLlight">'+response.route_summary.start_point+'</span>\' to \'<span class="routeSummaryHLlight">'+response.route_summary.end_point+'</span>\'</p>'; |  | ||||||
|         output += '<p class="routeSummary">Distance: <span class="routeSummarybold">'+response.route_summary.total_distance/1000+' km</span> - Duration: <span class="routeSummarybold">'+secondsToTime(response.route_summary.total_time)+'</span></p><p>'+routelink+'</p><p><span class="routeInstructionsHL">The Route-Instructions:</span> '+gpxLink+'</p>'; |  | ||||||
|         //Show Route Instructions
 |  | ||||||
|         output += '<table>'; |  | ||||||
|         lengthOfArray = response.route_instructions.length; |  | ||||||
| 
 |  | ||||||
|         var rowstyle='routeInstructionsEven'; |  | ||||||
|         var indexPos = response.route_instructions[0][3]; |  | ||||||
| 		var point = allRoutePoints[indexPos]; |  | ||||||
| 		 |  | ||||||
| 		//Hack to suppress output of initial "0m" instruction		
 |  | ||||||
| 		output += '<tr class="'+rowstyle+'"><td align="right" valign="top"><span class="routeSummarybold">1.</span></td><td class="'+rowstyle+'"><a href="#" class="nolinkStyle" onclick="setMapCenter(new OpenLayers.LonLat('+point.x+','+point.y+'));">'+response.route_instructions[0][0]+' on '+response.route_instructions[0][1]; |  | ||||||
| 		if(response.route_instructions[0][2] != 0) |  | ||||||
| 			output += ' for '+getDistanceWithUnit(response.route_instructions[0][2]); |  | ||||||
| 	   	output += '</a></td></tr>'; |  | ||||||
|   |  | ||||||
| 		for (i = 1; i < lengthOfArray; i++) { |  | ||||||
| 			//console.log(response.route_instructions[i]);
 |  | ||||||
|         	//odd or even ?
 |  | ||||||
|         	if(i%2==0){  |  | ||||||
|  				rowstyle='routeInstructionsEven';  |  | ||||||
|  			} else { |  | ||||||
|  				rowstyle='routeInstructionsOdd'; |  | ||||||
|  			}	 |  | ||||||
| 			 |  | ||||||
|             indexPos = response.route_instructions[i][3]; |  | ||||||
| 			//console.log('setting : ' + response.route_instructions[i] + ' at ' + allRoutePoints[indexPos]);
 |  | ||||||
| 			point = allRoutePoints[indexPos]; |  | ||||||
|  			       	 |  | ||||||
|             output += '<tr class="'+rowstyle+'"><td align="right" valign="top"><span class="routeSummarybold">'+(i+1)+'.</span></td><td class="'+rowstyle+'"><a href="#" class="nolinkStyle" onclick="setMapCenter(new OpenLayers.LonLat('+point.x+','+point.y+'));">'+response.route_instructions[i][0]+' on '+response.route_instructions[i][1]+' for '+getDistanceWithUnit(response.route_instructions[i][2])+'</a></td></tr>'; |  | ||||||
|         } |  | ||||||
| 		var rowstyle='routeInstructionsOdd'; |  | ||||||
|        	if(i%2==0){ rowstyle='routeInstructionsEven'; } |  | ||||||
| 		if( lengthOfArray > 0) { |  | ||||||
| 	        var point = allRoutePoints[allRoutePoints.length-1]; |  | ||||||
| 	        output += '<tr class="'+rowstyle+'"><td align="right" valign="top"><span class="routeSummarybold">'+(i+1)+'.</span></td><td class="'+rowstyle+'"><a href="#" class="nolinkStyle" onclick="setMapCenter(new OpenLayers.LonLat('+point.x+','+point.y+'));">You have reached your destination</a></td></tr>'; |  | ||||||
|         } |  | ||||||
| 		output += '</table>'; |  | ||||||
|         //alert(vectorLayerRoute.features[0].geometry.getVertices());
 |  | ||||||
|          |  | ||||||
|         document.getElementById('information').innerHTML = output; |  | ||||||
| 	    ISCALCULATING = false; |  | ||||||
| 		ISCALCULATINGVIA = false; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /* |  | ||||||
|  * showRouteGeometry()-Function to show route result |  | ||||||
|  */ |  | ||||||
| function showRouteGeometry(response) { |  | ||||||
| 	if (response) { |  | ||||||
| 	 	allRoutePoints.length = 0; |  | ||||||
|     	// now with compression of the route geometry
 |  | ||||||
|         var geometry = decodeRouteGeometry(response.route_geometry, 5); |  | ||||||
|        	var lengthOfArray = geometry.length; |  | ||||||
|         var points = []; |  | ||||||
|         points.length = lengthOfArray; |  | ||||||
|         var points = []; |  | ||||||
|  		//delete any previously displayed via route
 |  | ||||||
| 		vectorLayerViaRoute.removeFeatures(vectorLayerViaRoute.features); |  | ||||||
| 		vectorLayerRoute.removeAllFeatures(); |  | ||||||
|   |  | ||||||
|         //Create Route Layer for Display
 |  | ||||||
|         for (var i = 0; i < lengthOfArray; i++) { |  | ||||||
|             var point = new OpenLayers.Geometry.Point(geometry[i][1], geometry[i][0]).transform(EPSG_4326, EPSG_900913); |  | ||||||
|             allRoutePoints.push(point); |  | ||||||
| 			points.push(point); |  | ||||||
|             	 |  | ||||||
| 			if(i % 1024 == 0 && i>0 || i==lengthOfArray-1){ |  | ||||||
| /*	 			var feature2 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(points), null, { |  | ||||||
| 					strokeColor: "#000066", |  | ||||||
| 					strokeOpacity: 1, |  | ||||||
| 					strokeWidth: 9 |  | ||||||
| 				}); |  | ||||||
| 
 |  | ||||||
| 	 			var feature1 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(points), null, { |  | ||||||
| 					strokeColor: "#ffffff", |  | ||||||
| 					strokeOpacity: 0.75, |  | ||||||
| 					strokeWidth: 7 |  | ||||||
| 				}); |  | ||||||
| */ |  | ||||||
| 
 |  | ||||||
| 	 			var feature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(points), null, { |  | ||||||
| 					strokeColor: "#0033ff", |  | ||||||
| 					strokeOpacity: 0.7, |  | ||||||
| 					strokeWidth: 5 |  | ||||||
| 				}); |  | ||||||
| 			//	vectorLayerRoute.addFeatures([feature2]);
 |  | ||||||
| 			//	vectorLayerRoute.addFeatures([feature1]);
 |  | ||||||
| 				vectorLayerRoute.addFeatures([feature]); |  | ||||||
| 				points = []; |  | ||||||
| 				points.push(point); |  | ||||||
| 			} |  | ||||||
|         } |  | ||||||
|    } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /* |  | ||||||
|  * showNoNameStreets()-Function to show route result |  | ||||||
|  */ |  | ||||||
| function showNoNameStreets(response) { |  | ||||||
|     if (response) { |  | ||||||
|     	allRoutePoints.length = 0; |  | ||||||
|     	vectorLayerRoute.removeFeatures(vectorLayerRoute.features); |  | ||||||
|       	// now with compression of the route geometry
 |  | ||||||
|         var geometry = decodeRouteGeometry(response.route_geometry, 5); |  | ||||||
|        	var lengthOfArray = geometry.length; |  | ||||||
|         var points = []; |  | ||||||
|         points.length = lengthOfArray; |  | ||||||
|          |  | ||||||
|         //Check if a instruction has no name !
 |  | ||||||
|         var colors = []; |  | ||||||
|         if(true){ |  | ||||||
|         	var instrucLength = response.route_instructions.length; |  | ||||||
|         	for (var i = 0; i < instrucLength; i++) { |  | ||||||
|         		var indexPos = response.route_instructions[i][3]; |  | ||||||
|         		var streetName = response.route_instructions[i][1]; |  | ||||||
| 				if(streetName == ''){ colors[indexPos] = "#FF00FF"; } |  | ||||||
| 				else{ colors[indexPos] = "#0033ff"; } |  | ||||||
|         	} |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|  		//delete any previously displayed via route
 |  | ||||||
| 		vectorLayerViaRoute.removeFeatures(vectorLayerViaRoute.features); |  | ||||||
| 		vectorLayerRoute.removeAllFeatures(); |  | ||||||
|          |  | ||||||
|         //Create Route Layer for Display
 |  | ||||||
|         var color = "#0033ff"; |  | ||||||
|         var changeColor = false; |  | ||||||
|         for (var i = 0; i < lengthOfArray; i++) { |  | ||||||
|             var point = new OpenLayers.Geometry.Point(geometry[i][1], geometry[i][0]).transform(EPSG_4326, EPSG_900913); |  | ||||||
|             points.push(point); |  | ||||||
|             allRoutePoints.push(point); |  | ||||||
| 				 |  | ||||||
|             if(colors[i] != undefined){ changeColor=true;} |  | ||||||
|             	 |  | ||||||
| 			if(i % 1024 == 0 && i>0 || i==lengthOfArray-1 || changeColor){ |  | ||||||
| 				var feature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(points), null, { |  | ||||||
| 					strokeColor: color, |  | ||||||
| 					strokeOpacity: 0.7, |  | ||||||
| 					strokeWidth: 5 |  | ||||||
| 				}); |  | ||||||
| 				vectorLayerRoute.addFeatures([feature]); |  | ||||||
| 				points = []; |  | ||||||
| 				points.push(point); |  | ||||||
| 				 |  | ||||||
| 				if(colors[i] != undefined){ color = colors[i]; } |  | ||||||
| 				changeColor=false; |  | ||||||
| 			} |  | ||||||
|         } |  | ||||||
|    } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /* |  | ||||||
|  * secondsToTime()-Function to transform seconds to a time string |  | ||||||
|  */ |  | ||||||
| function secondsToTime(seconds){ |  | ||||||
|    seconds = parseInt(seconds); |  | ||||||
|    minutes = parseInt(seconds/60); |  | ||||||
|    seconds = seconds%60; |  | ||||||
|    hours = parseInt(minutes/60); |  | ||||||
|    minutes = minutes%60; |  | ||||||
|    //return stunden+':'+minuten+':'+seconds;
 |  | ||||||
|    if(hours==0){ |  | ||||||
|    	return minutes+' min(s)'; |  | ||||||
|    } |  | ||||||
|    else{ |  | ||||||
|    	return hours+' h '+minutes+' min(s)'; |  | ||||||
|    } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /* |  | ||||||
|  * getDistanceWithUnit()-Function to return a distance with units |  | ||||||
|  */ |  | ||||||
| function getDistanceWithUnit(distance){ |  | ||||||
| 	distance = parseInt(distance); |  | ||||||
| 	if(distance >= 1000){ return (parseInt(distance/1000))+' km'; } |  | ||||||
| 	else{ return distance+' m'; } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /* |  | ||||||
|  * setMapCenter()-Function to add a marker and center the map |  | ||||||
|  */ |  | ||||||
| function setMapCenter(lonlat){ |  | ||||||
| 	//lonlat.transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913"));
 |  | ||||||
| 	//console.log('zooming to :' + lonlat);
 |  | ||||||
| 	 |  | ||||||
| 	//Add Marker
 |  | ||||||
| 	markersLayer.clearMarkers(); |  | ||||||
| 	var size = new OpenLayers.Size(21,25); |  | ||||||
|     var offset = new OpenLayers.Pixel(-(size.w/2), -size.h); |  | ||||||
|     var icon = new OpenLayers.Icon('img/marker.png',size,offset); |  | ||||||
|     markersLayer.addMarker(new OpenLayers.Marker(lonlat,icon)); |  | ||||||
| 
 |  | ||||||
| 	//Hack - FIXME !
 |  | ||||||
| 	map.setCenter(new OpenLayers.LonLat(lonlat.lon-200, lonlat.lat), 17); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /* |  | ||||||
|  * decodeRouteGeometry()-Function to decode encoded Route Geometry |  | ||||||
|  */ |  | ||||||
| function decodeRouteGeometry(encoded, precision) { |  | ||||||
| 	precision = Math.pow(10, -precision); |  | ||||||
| 	var len = encoded.length, index=0, lat=0, lng = 0, array = []; |  | ||||||
| 	while (index < len) { |  | ||||||
| 		var b, shift = 0, result = 0; |  | ||||||
| 		do { |  | ||||||
| 			b = encoded.charCodeAt(index++) - 63; |  | ||||||
| 			result |= (b & 0x1f) << shift; |  | ||||||
| 			shift += 5; |  | ||||||
| 		} while (b >= 0x20); |  | ||||||
| 		var dlat = ((result & 1) ? ~(result >> 1) : (result >> 1)); |  | ||||||
| 		lat += dlat; |  | ||||||
| 		shift = 0; |  | ||||||
| 		result = 0; |  | ||||||
| 		do { |  | ||||||
| 			b = encoded.charCodeAt(index++) - 63; |  | ||||||
| 			result |= (b & 0x1f) << shift; |  | ||||||
| 			shift += 5; |  | ||||||
| 		} while (b >= 0x20); |  | ||||||
| 		var dlng = ((result & 1) ? ~(result >> 1) : (result >> 1)); |  | ||||||
| 		lng += dlng; |  | ||||||
| 		array.push([lat * precision, lng * precision]); |  | ||||||
| 	} |  | ||||||
| 	return array; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /* |  | ||||||
|  * createShortLink()-Function to "create" shortlink of a route |  | ||||||
|  */ |  | ||||||
| function createShortLink(str){ |  | ||||||
| 	var script = document.createElement('script'); |  | ||||||
|     script.type = 'text/javascript'; |  | ||||||
|     var callBackFunction = 'showRouteLink'; |  | ||||||
|     script.src = 'http://map.project-osrm.org/shorten/'+str+'&jsonp=showRouteLink';  	 |  | ||||||
|     document.body.appendChild(script); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /* |  | ||||||
|  * showRouteLink()-Function |  | ||||||
|  */ |  | ||||||
| function showRouteLink(response){ |  | ||||||
| 	document.getElementById('routelink').innerHTML = '<span class="routeSummarybold"> >> Your ShortLink:</span> <a href="'+response.ShortURL+'">'+response.ShortURL+'</a>'; |  | ||||||
| } |  | ||||||
| @ -1,114 +0,0 @@ | |||||||
| /* |  | ||||||
|  *  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: Slide.js |  | ||||||
|  * Description: Fixme |  | ||||||
|  * |  | ||||||
|  * @author Pascal Neis, pascal@neis-one.org  |  | ||||||
|  * @version 0.1 2011-05-15 |  | ||||||
|  */ |  | ||||||
|   |  | ||||||
| var timerlen = 5; |  | ||||||
| var slideAniLen = 250; |  | ||||||
| 
 |  | ||||||
| var timerID = new Array(); |  | ||||||
| var startTime = new Array(); |  | ||||||
| var obj = new Array(); |  | ||||||
| var endWidth = new Array(); |  | ||||||
| var moving = new Array(); |  | ||||||
| var dir = new Array(); |  | ||||||
| 
 |  | ||||||
| function toggleSlide(objname){ |  | ||||||
| 	document.getElementById('panzoombar').style.top="25px"; |  | ||||||
| 	document.getElementById('panzoombar').style.display = "none"; |  | ||||||
| 	document.getElementById('slide').style.display = "none"; |  | ||||||
| 	if(document.getElementById(objname).style.display == "none"){ |  | ||||||
| 	 	// div is hidden, so let's slide right
 |  | ||||||
| 		slide_right(objname); |  | ||||||
| 	}else{ |  | ||||||
| 		// div is not hidden, so slide left
 |  | ||||||
| 		slide_left(objname); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function slide_right(objname){ |  | ||||||
| 	if(moving[objname]){ return; } |  | ||||||
| 	if(document.getElementById(objname).style.display != "none"){ |  | ||||||
| 		return; // cannot slide right something that is already visible
 |  | ||||||
| 	} |  | ||||||
| 	moving[objname] = true; dir[objname] = "right"; startslide(objname); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function slide_left(objname){ |  | ||||||
| 	if(moving[objname]){ return; } |  | ||||||
| 	if(document.getElementById(objname).style.display == "none"){ |  | ||||||
| 		return; // cannot slide left something that is already hidden
 |  | ||||||
| 	} |  | ||||||
| 	moving[objname] = true; dir[objname] = "left"; startslide(objname); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function startslide(objname){ |  | ||||||
| 	obj[objname] = document.getElementById(objname); |  | ||||||
| 	endWidth[objname] = parseInt(obj[objname].style.width); |  | ||||||
| 	startTime[objname] = (new Date()).getTime();	 |  | ||||||
| 	if(dir[objname] == "right"){ obj[objname].style.width = "1px"; } |  | ||||||
|     obj[objname].style.display = "block"; |  | ||||||
|     timerID[objname] = setInterval('slidetick(\'' + objname + '\');',timerlen); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function slidetick(objname){ |  | ||||||
| 	var elapsed = (new Date()).getTime() - startTime[objname]; |  | ||||||
| 	if (elapsed > slideAniLen){ endSlide(objname); } |  | ||||||
| 	else { |  | ||||||
| 		var d = Math.round(elapsed / slideAniLen * endWidth[objname]); |  | ||||||
| 		if(dir[objname] == "left"){ d = endWidth[objname] - d; } |  | ||||||
| 		obj[objname].style.width = d + "px"; |  | ||||||
| 	} |  | ||||||
|     return; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function endSlide(objname){ |  | ||||||
| 	clearInterval(timerID[objname]); |  | ||||||
| 	 |  | ||||||
| 	if(dir[objname] == "left"){ |  | ||||||
| 		obj[objname].style.display = "none"; |  | ||||||
| 		document.getElementById('panzoombar').style.left="25px"; |  | ||||||
| 		document.getElementById('panzoombar').style.display = ""; |  | ||||||
| 		document.getElementById('slide').style.left="5px"; |  | ||||||
| 		document.getElementById('slide').innerHTML = "<a class=\"btn-slide\" href=\"javascript:;\" onmousedown=\"toggleSlide('data');\">>></a>"; |  | ||||||
|         document.getElementById('slide').style.display = ""; |  | ||||||
|     } |  | ||||||
|     else{ |  | ||||||
|     	document.getElementById('panzoombar').style.left="400px"; |  | ||||||
|     	document.getElementById('panzoombar').style.display = "";document.getElementById('slide').style.left="365px"; |  | ||||||
|     	document.getElementById('slide').innerHTML = "<a class=\"btn-slide\" href=\"javascript:;\" onmousedown=\"toggleSlide('data');\"><<</a>"; |  | ||||||
|     	document.getElementById('slide').style.display = ""; |  | ||||||
|     } |  | ||||||
|    	obj[objname].style.width = endWidth[objname] + "px"; |  | ||||||
|    	 |  | ||||||
|    	delete(moving[objname]); |  | ||||||
|    	delete(timerID[objname]); |  | ||||||
|    	delete(startTime[objname]); |  | ||||||
|    	delete(endWidth[objname]); |  | ||||||
|    	delete(obj[objname]); |  | ||||||
|    	delete(dir[objname]); |  | ||||||
|    	return; |  | ||||||
| } |  | ||||||
| @ -1,341 +0,0 @@ | |||||||
| /* |  | ||||||
|  *  Open Source Routing Machine (OSRM) - Web (GUI) Interface |  | ||||||
|  *	Copyright (C) Dennis Luxen, 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: ViaRoute.js |  | ||||||
|  * Description: JS file for routing with via points |  | ||||||
|  * |  | ||||||
|  * @author Dennis Luxen, luxen@kit.edu  |  | ||||||
|  * @version 0.1 June 2011 |  | ||||||
|  *  |  | ||||||
|  */ |  | ||||||
| //======================
 |  | ||||||
| // OBJECTS
 |  | ||||||
| 
 |  | ||||||
| //global timestamp to control frequency of mouse->route distance computations
 |  | ||||||
| var timestamp = (new Date()).getTime(); |  | ||||||
| var ISCOMPUTINGDISTANCE = false; |  | ||||||
| var ISCALCULATINGVIA = false; |  | ||||||
| //var HASDELETEDTEMPORARYVIAROUTE = false;
 |  | ||||||
| var nearestPoint = new OpenLayers.Geometry.Point(1,1); |  | ||||||
| var nearestSegmentIndex = null; |  | ||||||
| var viaPointsVector = []; |  | ||||||
| var p0; |  | ||||||
| 
 |  | ||||||
| var temporaryViaStyle = {  |  | ||||||
| 	fillColor: "#ffffff", |  | ||||||
| 	strokeColor: "#33ff33",  |  | ||||||
| 	strokeOpacity: 0.6,  |  | ||||||
| 	strokeWidth: 2,  |  | ||||||
| 	pointRadius: 4,  |  | ||||||
| 	pointerEvents: "visiblePainted"  |  | ||||||
| };  |  | ||||||
| 
 |  | ||||||
| var permanentViaStyle = {  |  | ||||||
| 	fillColor: "#ffffff", |  | ||||||
| 	strokeColor: "#0033ff",  |  | ||||||
| 	strokeOpacity: 0.6,  |  | ||||||
| 	strokeWidth: 2,  |  | ||||||
| 	pointRadius: 4,  |  | ||||||
| 	pointerEvents: "visiblePainted"  |  | ||||||
| };  |  | ||||||
| 
 |  | ||||||
| //======================
 |  | ||||||
| //FUNCTIONS
 |  | ||||||
| function distanceBetweenPoint(x1, y1, x2, y2) { |  | ||||||
| 	var a = x1 - x2; |  | ||||||
| 	var b = y1 - y2; |  | ||||||
| 	return Math.sqrt(a*a + b*b); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /* Distance from a point to a line or segment. |  | ||||||
| x  point's x coord |  | ||||||
| y  point's y coord |  | ||||||
| x0 x coord of the line's A point |  | ||||||
| y0 y coord of the line's A point |  | ||||||
| x1 x coord of the line's B point |  | ||||||
| y1 y coord of the line's B point |  | ||||||
| o specifies if the distance should respect the limits of the segment  |  | ||||||
|   (overLine = true) or if it should consider the segment as an infinite  |  | ||||||
|   line (overLine = false), if false returns the distance from the point  |  | ||||||
|   to the line, otherwise the distance from the point to the segment |  | ||||||
| */ |  | ||||||
| function dotLineLength(x, y, x0, y0, x1, y1, o){ |  | ||||||
|     function lineLength(x, y, x0, y0){ |  | ||||||
|         return Math.sqrt((x -= x0) * x + (y -= y0) * y); |  | ||||||
|     } |  | ||||||
|     if(o && !(o = function(x, y, x0, y0, x1, y1){ |  | ||||||
|         if(!(x1 - x0)) return {x: x0, y: y}; |  | ||||||
|         else if(!(y1 - y0)) return {x: x, y: y0}; |  | ||||||
|         var left, tg = -1 / ((y1 - y0) / (x1 - x0)); |  | ||||||
|         return {x: left = (x1 * (x * tg - y + y0) + x0 * (x * - tg + y - y1)) / (tg * (x1 - x0) + y0 - y1), y: tg * left - tg * x + y}; |  | ||||||
|     }(x, y, x0, y0, x1, y1), o.x >= Math.min(x0, x1) && o.x <= Math.max(x0, x1) && o.y >= Math.min(y0, y1) && o.y <= Math.max(y0, y1))){ |  | ||||||
|         var l1 = lineLength(x, y, x0, y0), l2 = lineLength(x, y, x1, y1); |  | ||||||
|         return l1 > l2 ? l2 : l1; |  | ||||||
|     } |  | ||||||
|     else { |  | ||||||
|         var a = y0 - y1, b = x1 - x0, c = x0 * y1 - y0 * x1; |  | ||||||
|         return Math.abs(a * x + b * y + c) / Math.sqrt(a * a + b * b); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| function distanceToRoute(pixel) { |  | ||||||
| 	if(!isStartPointSet || !isEndPointSet){ |  | ||||||
| 		return; |  | ||||||
| 	} |  | ||||||
| 	if(ISDRAGGING) { |  | ||||||
| 		return; |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	if(ISCOMPUTINGDISTANCE) { |  | ||||||
| 		return; |  | ||||||
| 	} |  | ||||||
| 	var tempTime = (new Date()).getTime() |  | ||||||
| 	if( tempTime - timestamp < 25) { |  | ||||||
| 		return; |  | ||||||
| 	} |  | ||||||
| 	timestamp = tempTime; |  | ||||||
| 	if(ISCALCULATING) { |  | ||||||
| 		var viaPointFeature = dragLayer.getFeatureBy("name", 'via'); |  | ||||||
| 		if(viaPointFeature != null) { |  | ||||||
| 			dragLayer.removeFeatures(viaPointFeature); |  | ||||||
| 			viaPointFeature.destroy; |  | ||||||
| 		} |  | ||||||
| 		return; |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	if(pixel == null) { |  | ||||||
| 		pixel.x = window.event.clientX; |  | ||||||
| 		pixel.y = window.event.clientY; |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	var newLonLat = map.getLonLatFromPixel(pixel); |  | ||||||
| 	var minimumDist = 20*Math.pow(2,(19- this.map.getZoom())); |  | ||||||
| 	var minimumDistToVia = 20*Math.pow(2,(19- this.map.getZoom())); |  | ||||||
| 	var indexToInsertViaPoint = 0; |  | ||||||
| 	 |  | ||||||
| 	var startFeat = getMarkerByName('start'); |  | ||||||
| 	var endFeat = getMarkerByName('end'); |  | ||||||
| 	var from = new OpenLayers.LonLat(startFeat.geometry.x,startFeat.geometry.y).transform(EPSG_900913, EPSG_4326); |  | ||||||
| 	var to = new OpenLayers.LonLat(endFeat.geometry.x,endFeat.geometry.y).transform(EPSG_900913, EPSG_4326); |  | ||||||
| 
 |  | ||||||
| 	var mapExtent = map.getExtent(); |  | ||||||
| 	for(var i = 0; i < allRoutePoints.length-1; i++) { |  | ||||||
| 		var p1 = allRoutePoints[i]; |  | ||||||
| 		var p2 = allRoutePoints[i+1]; |  | ||||||
| 		if(p1.x < mapExtent.left || p1.x > mapExtent.right || p1.y < mapExtent.bottom || p1.y > mapExtent.top) { |  | ||||||
| 			if(p2.x < mapExtent.left || p2.x > mapExtent.right || p2.y < mapExtent.bottom || p2.y > mapExtent.top) { |  | ||||||
| 				continue; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		//check if previous segment is closest to via point
 |  | ||||||
| 		//if yes, then we have passed a via point.
 |  | ||||||
| 		if(viaPointsVector.length > indexToInsertViaPoint && p0) { |  | ||||||
| 			var viaPoint = new OpenLayers.LonLat(viaPointsVector[indexToInsertViaPoint][1],viaPointsVector[indexToInsertViaPoint][0]).transform(EPSG_4326, EPSG_900913); |  | ||||||
| 			var dist2 = dotLineLength(viaPoint.lon, viaPoint.lat, p1.x, p1.y, p0.x, p0.y, true) |  | ||||||
| 			if( 0 == dist2 ) { |  | ||||||
| 				indexToInsertViaPoint++; |  | ||||||
| 			} |  | ||||||
| 			var tmpDist = distanceBetweenPoint(viaPoint.lat, viaPoint.lon, newLonLat.lat, newLonLat.lon); |  | ||||||
| 			if(tmpDist < minimumDistToVia) { |  | ||||||
| 				minimumDistToVia = tmpDist; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 		//continue if point out of view
 |  | ||||||
| 		dist = dotLineLength(newLonLat.lon, newLonLat.lat, p1.x, p1.y, p2.x, p2.y, true); |  | ||||||
| 		if(dist <= minimumDist) { |  | ||||||
| 			nearestSegmentIndex = indexToInsertViaPoint; |  | ||||||
| 			minimumDist = dist; |  | ||||||
| 			var lonDiff = (p2.x - p1.x) |  | ||||||
| 			var m = (p2.y - p1.y) / lonDiff; |  | ||||||
| 			 |  | ||||||
| 			var b = p1.y - (m * p1.x); |  | ||||||
| 			var m2 = m*m; |  | ||||||
| 			var x = (m * newLonLat.lat + newLonLat.lon - m * b) / (m2 + 1); |  | ||||||
| 			var y = (m2 * newLonLat.lat + m * newLonLat.lon + b) / (m2 + 1); |  | ||||||
| 			var r = (x - p1.x) / lonDiff; |  | ||||||
| 			if ( r <= 1 && r >= 0 ) { |  | ||||||
| 				nearestPoint.x = x; |  | ||||||
| 				nearestPoint.y = y; |  | ||||||
| 			} else { |  | ||||||
| 				if( r < 0 ) { |  | ||||||
| 					nearestPoint.x = p1.x; |  | ||||||
| 					nearestPoint.y = p1.y; |  | ||||||
| 				} if ( r > 1 ) { |  | ||||||
| 					nearestPoint.x = p2.x; |  | ||||||
| 					nearestPoint.y = p2.y; |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 			if(p2.x == p1.x) { |  | ||||||
| 				nearestPoint.x = p1.x; |  | ||||||
| 				nearestPoint.y = newLonLat.lat; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	var zoomFactor = Math.pow(2,(19- this.map.getZoom())); |  | ||||||
| 	var viaPointFeature = dragLayer.getFeatureBy("name", 'via'); |  | ||||||
| 	if(viaPointFeature != null) { |  | ||||||
| 		dragLayer.removeFeatures(viaPointFeature); |  | ||||||
| 		viaPointFeature.destroy; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	//too close to start or destination?
 |  | ||||||
| 	if(Math.min(distanceBetweenPoint(startFeat.geometry.x, startFeat.geometry.y, newLonLat.lon, newLonLat.lat), |  | ||||||
| 			distanceBetweenPoint(endFeat.geometry.x, endFeat.geometry.y, newLonLat.lon, newLonLat.lat)) < 10*zoomFactor) { |  | ||||||
| 		ISCOMPUTINGDISTANCE = false; |  | ||||||
| 		return; |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	//Are we close to the route but sufficiently far away from any existing via point?
 |  | ||||||
| 	if(minimumDist < 10*zoomFactor && minimumDistToVia > 5*zoomFactor) { |  | ||||||
| 		viaPointFeature = new OpenLayers.Feature.Vector( OpenLayers.Geometry.Polygon.createRegularPolygon( nearestPoint,  (1.5*zoomFactor), 15, 0 ), null, temporaryViaStyle ); |  | ||||||
| 		viaPointFeature.name = "via"; |  | ||||||
| 		dragLayer.addFeatures( viaPointFeature ); |  | ||||||
| 		//console.log('nearestSegmentIndex: ' + nearestSegmentIndex);
 |  | ||||||
| 	} |  | ||||||
| 	ISCOMPUTINGDISTANCE = false; |  | ||||||
| 	p0 = p1; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function computeViaRoute(pixel, isTemporary, skipViaPointsIndex) { |  | ||||||
| 	if(ISCALCULATINGVIA && isTemporary) |  | ||||||
| 		return; |  | ||||||
| 	 |  | ||||||
| 	if( nearestSegmentIndex == null ) { |  | ||||||
| 		//console.log('nearestSegmentIndex: ' + nearestSegmentIndex);
 |  | ||||||
| 		return; |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	if(isTemporary == null) { |  | ||||||
| 		isTemporary = false; |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	//So, we jumped all fences
 |  | ||||||
| 	ISCALCULATINGVIA = true; |  | ||||||
| 		 |  | ||||||
| 	var startFeat = getMarkerByName('start'); |  | ||||||
| 	var endFeat = getMarkerByName('end'); |  | ||||||
| 	var from = new OpenLayers.LonLat(startFeat.geometry.x,startFeat.geometry.y).transform(EPSG_900913, EPSG_4326); |  | ||||||
| 	var to = new OpenLayers.LonLat(endFeat.geometry.x,endFeat.geometry.y).transform(EPSG_900913, EPSG_4326); |  | ||||||
| 
 |  | ||||||
| 	var coordinate = map.getLonLatFromPixel(pixel); |  | ||||||
| 	var via = coordinate.transform(EPSG_900913, EPSG_4326); |  | ||||||
| 	var viaNodeInserted = false; |  | ||||||
| 	var newURL = HOST_ROUTING_URL + "?loc="+from.lat + ',' + from.lon; |  | ||||||
| 	newURL += '&geomformat=cmp'; |  | ||||||
| 	for(var i = 0; i < viaPointsVector.length; i++) { |  | ||||||
| 		if(i == nearestSegmentIndex) { //insert new via node here
 |  | ||||||
| 			newURL += '&loc=' + via.lat + ',' + via.lon; |  | ||||||
| 			viaNodeInserted = true; |  | ||||||
| 		} |  | ||||||
| 		if(skipViaPointsIndex == i) |  | ||||||
| 			continue; |  | ||||||
| 		newURL += '&loc=' + viaPointsVector[i][0] + ',' + viaPointsVector[i][1]; |  | ||||||
| 	} |  | ||||||
| 	if(false == viaNodeInserted) { |  | ||||||
| 		newURL += '&loc=' + via.lat + ',' + via.lon; |  | ||||||
| 	} |  | ||||||
| 	newURL += '&loc=' + to.lat + ',' + to.lon; |  | ||||||
| 	newURL += '&output=json' + '&z=' + this.map.getZoom(); |  | ||||||
| 	if(!isTemporary) { |  | ||||||
| 		newURL += '&instructions=true&jsonp=showResultsRoute'; |  | ||||||
| 	} else { |  | ||||||
| 		newURL += '&instructions=false&jsonp=showResultsViaRoute'; |  | ||||||
| 	} |  | ||||||
| 	//console.log(newURL);
 |  | ||||||
| 	var script = document.createElement('script'); |  | ||||||
| 	script.id = 'JSONP'; |  | ||||||
| 	script.type = 'application/javascript'; |  | ||||||
| 	script.src = newURL; |  | ||||||
| 	 |  | ||||||
| 	document.body.appendChild(script); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function showResultsViaRoute(response) { |  | ||||||
| 		if (response) { |  | ||||||
| 			var viaRouteVector = []; |  | ||||||
| 	    	// now with compression of the route geometry
 |  | ||||||
| 	        var geometry = decodeRouteGeometry(response.route_geometry, 5); |  | ||||||
| 	       	var lengthOfArray = geometry.length; |  | ||||||
| 	        var points = []; |  | ||||||
| 	        points.length = lengthOfArray; |  | ||||||
| 
 |  | ||||||
| 	        //Create Route Layer for Display
 |  | ||||||
| 	        for (var i = 0; i < lengthOfArray; i++) { |  | ||||||
| 	            var point = new OpenLayers.Geometry.Point(geometry[i][1], geometry[i][0]).transform(EPSG_4326, EPSG_900913); |  | ||||||
| 	            allRoutePoints.push(point); |  | ||||||
| 				points.push(point); |  | ||||||
| 	            	 |  | ||||||
| 				if(i % 1024 == 0 && i>0 || i==lengthOfArray-1){ |  | ||||||
| 			/*		var feature1 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(points), null, { |  | ||||||
| 						strokeColor: "#006600", |  | ||||||
| 						strokeOpacity: 1, |  | ||||||
| 						strokeWidth: 9 |  | ||||||
| 					}); |  | ||||||
| 			*/		 |  | ||||||
| 					var feature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(points), null, { |  | ||||||
| 						strokeColor: "#aaffaa", |  | ||||||
| 						strokeOpacity: 0.8, |  | ||||||
| 						strokeWidth: 7 |  | ||||||
| 					}); |  | ||||||
| 			//		viaRouteVector.push(feature1);
 |  | ||||||
| 					viaRouteVector.push(feature); |  | ||||||
| 					points = []; |  | ||||||
| 					points.push(point); |  | ||||||
| 				} |  | ||||||
| 	        } |  | ||||||
| 			vectorLayerViaRoute.removeFeatures(vectorLayerViaRoute.features); |  | ||||||
| 
 |  | ||||||
| 			for(var i = 0; i< viaRouteVector.length; i++) { |  | ||||||
| 				vectorLayerViaRoute.addFeatures(viaRouteVector[i]); |  | ||||||
| 			} |  | ||||||
| 			viaRouteVector.length = 0; |  | ||||||
| 			ISCALCULATINGVIA = false; |  | ||||||
| 		}     |  | ||||||
| }     |  | ||||||
| 
 |  | ||||||
| function paintViaPoints() { |  | ||||||
| 	//remove all previous via points
 |  | ||||||
| 	var featuresToRemove = []; |  | ||||||
| 	for(var i = 0; i < dragLayer.features.length; i++) {  |  | ||||||
| 		if(dragLayer.features[i].name == "viapoint" || "via" == dragLayer.features[i].name ) { |  | ||||||
| 			 featuresToRemove.push(dragLayer.features[i]); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	dragLayer.removeFeatures(featuresToRemove); |  | ||||||
| 	featuresToRemove.length = 0; |  | ||||||
| 	 |  | ||||||
| 	//paint all via points
 |  | ||||||
| 	var zoomFactor = Math.pow(2,(19- this.map.getZoom())); |  | ||||||
| 	//console.log('painting ' + viaPointsVector.length + ' via points');
 |  | ||||||
| 	for(var i = 0; i < viaPointsVector.length; i++) { |  | ||||||
| 		//console.log(viaPointsVector[i]);
 |  | ||||||
| 		var viapoint = new OpenLayers.Geometry.Point( |  | ||||||
| 							viaPointsVector[i][1],  |  | ||||||
| 							viaPointsVector[i][0]); |  | ||||||
| 		viapoint.transform(EPSG_4326, EPSG_900913); |  | ||||||
| 		var viaPointFeature = new OpenLayers.Feature.Vector( OpenLayers.Geometry.Polygon.createRegularPolygon( viapoint,  (1.5*zoomFactor), 20, 0 ), null, permanentViaStyle ); |  | ||||||
| 		viaPointFeature.name = "viapoint"; |  | ||||||
| 		viaPointFeature.viaIndex = i; |  | ||||||
| 		dragLayer.addFeatures( viaPointFeature )	 |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| Before Width: | Height: | Size: 2.9 KiB | 
| Before Width: | Height: | Size: 3.0 KiB | 
| Before Width: | Height: | Size: 2.4 KiB | 
| Before Width: | Height: | Size: 1.0 KiB | 
| Before Width: | Height: | Size: 934 B | 
| Before Width: | Height: | Size: 1.3 KiB | 
| Before Width: | Height: | Size: 2.9 KiB | 
| Before Width: | Height: | Size: 831 B | 
| Before Width: | Height: | Size: 1.4 KiB | 
| Before Width: | Height: | Size: 3.0 KiB | 
| @ -1,70 +0,0 @@ | |||||||
| <html> |  | ||||||
| <head> |  | ||||||
| 	<meta http-equiv="content-type" content="text/html; charset=UTF-8"> |  | ||||||
| 	<title>OSRM Web(GUI)Interface</title> |  | ||||||
| 	<meta name="description" content="OSRM Web(GUI)Interface"/> |  | ||||||
|     <meta name="language" content="en" /> |  | ||||||
|     <meta name="robots" content="index,follow" /> |  | ||||||
|     <meta name="author" content="Pascal Neis" /> |  | ||||||
|     <meta name="revisit-After" content="7 days" /> |  | ||||||
|     <meta name="distribution" content="global" /> |  | ||||||
| 
 |  | ||||||
| 	<script src="ol/OpenLayers.js"></script> |  | ||||||
| 	<script src="ol/OpenStreetMap.js"></script> |  | ||||||
| 	<script src="Slides.js"></script> |  | ||||||
| 	<script src="Map.js"></script> |  | ||||||
| 	<script src="Route.js"></script> |  | ||||||
| 	<script src="ViaRoute.js"></script> |  | ||||||
| 	<script src="Geocode.js"></script> |  | ||||||
| 	<script src="MouseClick.js"></script> |  | ||||||
| 	<!-- <script src="osrm.js"></script>  --> |  | ||||||
| 
 |  | ||||||
|    	<link rel="stylesheet" href="style.css" type="text/css" media="all" /> |  | ||||||
| </head> |  | ||||||
|   |  | ||||||
| <body onload="init();"> |  | ||||||
| 
 |  | ||||||
|     <div id="slide" class="slide"><a class="btn-slide" href="javascript:;" onmousedown="toggleSlide('data');"><<</a></div> |  | ||||||
| 	<div id="data" style="width:350px;overflow:hidden;" class="data"> |  | ||||||
| 		<div id="inner" style="width:350px;overflow:hidden;"> |  | ||||||
| 		<div id="routing"> |  | ||||||
| 		<!-- http://map.project-osrm.org/osrm3_small.png - http://project-osrm.org/osrm3.png --> |  | ||||||
| 		<img src="http://map.project-osrm.org/osrm3_small.png" style="margin-left:auto; margin-right:auto; width:200px; display:block; padding: 5px;" alt=""> |  | ||||||
| 		 |  | ||||||
| 		<table width="100%">  |  | ||||||
|               <tr id="StartPoint"> |  | ||||||
|                 <td><div class="textLabel"><img src="img/arrow-start.png" class="radioIcons" width="12" height="16" alt=""><span class="text"></span></div></td> |  | ||||||
|                 <td><input name="tfStartSearch" style="width:220px" type="text" id="tfStartSearch" class="tfPoints" value="Berlin" title="Search your start point!" onKeyPress="checkReturn('start',event);" > |  | ||||||
|                 	<button name="enterStart" onclick="setStatus('start'); geocodeAddress('start');">Search</button></td> |  | ||||||
|                 <td rowspan="2" valign="middle"> |  | ||||||
|                 	<!-- <button name="switchStartEnd" disabled="true" id="switchStartEnd" type="button" |  | ||||||
| 						value="Change Start and Endpoint"onClick="changeStartEnd();"><img src="img/changePos.gif" width="9" height="22" alt="Tausche Start- und Endpunkt"><br> --></button></td> |  | ||||||
|               </tr> |  | ||||||
|               <tr id="EndPoint">                |  | ||||||
|                 <td nowrap> |  | ||||||
| 					<div class="textLabel"><img src="img/arrow-finish.png" class="radioIcons" width="12" height="16" alt=""><span class="text"></span></div>                 |  | ||||||
| 				</td> |  | ||||||
|                 <td id="tdEnd"> |  | ||||||
|                 	<input name="tfEndSearch" style="width:220px" type="text" id="tfEndSearch" class="tfPoints" value="München, Altstadt" title="Search your end point!" onKeyPress="checkReturn('end',event);"> |  | ||||||
|                 	<button name="enterEnd" onclick="setStatus('end'); geocodeAddress('end');">Search</button> |  | ||||||
|                 </td> |  | ||||||
|               </tr> |  | ||||||
| 			  </table> |  | ||||||
| 		</div> |  | ||||||
| 		 |  | ||||||
| 		<div id="calc_route" class="calc_route"><span class="options"><a href="#" onclick="closeOpenDiv('options');">Options</a></span> |  | ||||||
| 				<select name="selectRoutePref" id="selectRoutePref" title="Select the route preference ..."><option value="Fastest" selected>Car (travel time)</option></select> |  | ||||||
| 				<input name="Submit5" type="submit"  class="calculate_button" id="Calculate" title="Route!" onClick="markersLayer.clearMarkers(); routing(false);" value="Route!"></div> |  | ||||||
| 		 |  | ||||||
| 		<div id="options" class="options_div" style="display:none"><input class="checkbox" type="checkbox" name="cbNoNames" id="cbNoNames" value="checkbox">Highlight No Name Streets in my Route</div> |  | ||||||
| 		<div id="information" class="information"> <p class="infoHL">Demo Website for the <br><a target="_blank" href="http://project-osrm.org/">Open Source Routing Machine Project</a></p> </div> |  | ||||||
| 		<div id="thx" class="thx">GUI v0.3 110722 - OSRM hosting by <a target="_blank" href="http://www.geofabrik.de/">Geofabrik</a> - Geocoder by <a target="_blank" href="http://developer.mapquest.com/web/products/open/nominatim/">MapQuest</a></div> |  | ||||||
| 		</div> |  | ||||||
| 	</div> |  | ||||||
| 
 |  | ||||||
| 	<div id="map" class="map"></div> |  | ||||||
| 
 |  | ||||||
| 	<div class="copyright">© 2011 <a target="_blank" href="http://project-osrm.org/">Project OSRM</a> - Map data <a target="_blank" href="http://creativecommons.org/licenses/by-sa/2.0/">CC-By-SA</a> <a target="_blank" href="http://www.openstreetmap.org">by OpenStreetMap</a></div> |  | ||||||
| 
 |  | ||||||
| </body> |  | ||||||
| </html> |  | ||||||
| @ -1,169 +0,0 @@ | |||||||
| /** |  | ||||||
|  * Namespace: Util.OSM |  | ||||||
|  */ |  | ||||||
| OpenLayers.Util.OSM = {}; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Constant: MISSING_TILE_URL |  | ||||||
|  * {String} URL of image to display for missing tiles |  | ||||||
|  */ |  | ||||||
| OpenLayers.Util.OSM.MISSING_TILE_URL = "http://www.openstreetmap.org/openlayers/img/404.png"; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Property: originalOnImageLoadError |  | ||||||
|  * {Function} Original onImageLoadError function. |  | ||||||
|  */ |  | ||||||
| OpenLayers.Util.OSM.originalOnImageLoadError = OpenLayers.Util.onImageLoadError; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Function: onImageLoadError |  | ||||||
|  */ |  | ||||||
| OpenLayers.Util.onImageLoadError = function() { |  | ||||||
|     if (this.src.match(/^http:\/\/[abc]\.[a-z]+\.openstreetmap\.org\//)) { |  | ||||||
|         this.src = OpenLayers.Util.OSM.MISSING_TILE_URL; |  | ||||||
|     } else if (this.src.match(/^http:\/\/[def]\.tah\.openstreetmap\.org\//)) { |  | ||||||
|         // do nothing - this layer is transparent
 |  | ||||||
|     } else { |  | ||||||
|         OpenLayers.Util.OSM.originalOnImageLoadError; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Class: OpenLayers.Layer.OSM.Mapnik |  | ||||||
|  * |  | ||||||
|  * Inherits from: |  | ||||||
|  *  - <OpenLayers.Layer.OSM> |  | ||||||
|  */ |  | ||||||
| OpenLayers.Layer.OSM.Mapnik = OpenLayers.Class(OpenLayers.Layer.OSM, { |  | ||||||
|     /** |  | ||||||
|      * Constructor: OpenLayers.Layer.OSM.Mapnik |  | ||||||
|      * |  | ||||||
|      * Parameters: |  | ||||||
|      * name - {String} |  | ||||||
|      * options - {Object} Hashtable of extra options to tag onto the layer |  | ||||||
|      */ |  | ||||||
|     initialize: function(name, options) { |  | ||||||
|         var url = [ |  | ||||||
|             "http://a.tile.openstreetmap.org/${z}/${x}/${y}.png", |  | ||||||
|             "http://b.tile.openstreetmap.org/${z}/${x}/${y}.png", |  | ||||||
|             "http://c.tile.openstreetmap.org/${z}/${x}/${y}.png" |  | ||||||
|         ]; |  | ||||||
|         options = OpenLayers.Util.extend({ numZoomLevels: 19, buffer: 0 }, options); |  | ||||||
|         var newArguments = [name, url, options]; |  | ||||||
|         OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments); |  | ||||||
|     }, |  | ||||||
| 
 |  | ||||||
|     CLASS_NAME: "OpenLayers.Layer.OSM.Mapnik" |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Class: OpenLayers.Layer.OSM.Transport |  | ||||||
|  * |  | ||||||
|  * Inherits from: |  | ||||||
|  *  - <OpenLayers.Layer.OSM> |  | ||||||
|  */ |  | ||||||
| OpenLayers.Layer.OSM.Transport = OpenLayers.Class(OpenLayers.Layer.OSM, { |  | ||||||
|     /** |  | ||||||
|      * Constructor: OpenLayers.Layer.OSM.Transport |  | ||||||
|      * |  | ||||||
|      * Parameters: |  | ||||||
|      * name - {String} |  | ||||||
|      * options - {Object} Hashtable of extra options to tag onto the layer |  | ||||||
|      */ |  | ||||||
|     initialize: function(name, options) { |  | ||||||
|         var url = [ |  | ||||||
|             "http://a.tile2.opencyclemap.org/transport/${z}/${x}/${y}.png", |  | ||||||
|             "http://b.tile2.opencyclemap.org/transport/${z}/${x}/${y}.png", |  | ||||||
|             "http://c.tile2.opencyclemap.org/transport/${z}/${x}/${y}.png" |  | ||||||
|         ]; |  | ||||||
|         options = OpenLayers.Util.extend({ numZoomLevels: 18, buffer: 0 }, options); |  | ||||||
|         var newArguments = [name, url, options]; |  | ||||||
|         OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments); |  | ||||||
|     }, |  | ||||||
| 
 |  | ||||||
|     CLASS_NAME: "OpenLayers.Layer.OSM.Transport" |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Class: OpenLayers.Layer.OSM.CycleMap |  | ||||||
|  * |  | ||||||
|  * Inherits from: |  | ||||||
|  *  - <OpenLayers.Layer.OSM> |  | ||||||
|  */ |  | ||||||
| OpenLayers.Layer.OSM.CycleMap = OpenLayers.Class(OpenLayers.Layer.OSM, { |  | ||||||
|     /** |  | ||||||
|      * Constructor: OpenLayers.Layer.OSM.CycleMap |  | ||||||
|      * |  | ||||||
|      * Parameters: |  | ||||||
|      * name - {String} |  | ||||||
|      * options - {Object} Hashtable of extra options to tag onto the layer |  | ||||||
|      */ |  | ||||||
|     initialize: function(name, options) { |  | ||||||
|         var url = [ |  | ||||||
|             "http://a.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png", |  | ||||||
|             "http://b.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png", |  | ||||||
|             "http://c.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png" |  | ||||||
|         ]; |  | ||||||
|         options = OpenLayers.Util.extend({ numZoomLevels: 19, buffer: 0 }, options); |  | ||||||
|         var newArguments = [name, url, options]; |  | ||||||
|         OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments); |  | ||||||
|     }, |  | ||||||
| 
 |  | ||||||
|     CLASS_NAME: "OpenLayers.Layer.OSM.CycleMap" |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Class: OpenLayers.Layer.OSM.MapQuest |  | ||||||
|  * |  | ||||||
|  * Inherits from: |  | ||||||
|  *  - <OpenLayers.Layer.OSM> |  | ||||||
|  */ |  | ||||||
| OpenLayers.Layer.OSM.MapQuest = OpenLayers.Class(OpenLayers.Layer.OSM, { |  | ||||||
|     /** |  | ||||||
|      * Constructor: OpenLayers.Layer.OSM.MapQuest |  | ||||||
|      * |  | ||||||
|      * Parameters: |  | ||||||
|      * name - {String} |  | ||||||
|      * options - {Object} Hashtable of extra options to tag onto the layer |  | ||||||
|      */ |  | ||||||
|     initialize: function(name, options) { |  | ||||||
|         var url = [ |  | ||||||
|             "http://otile1.mqcdn.com/tiles/1.0.0/osm/${z}/${x}/${y}.png", |  | ||||||
|             "http://otile2.mqcdn.com/tiles/1.0.0/osm/${z}/${x}/${y}.png", |  | ||||||
|             "http://otile3.mqcdn.com/tiles/1.0.0/osm/${z}/${x}/${y}.png" |  | ||||||
|         ]; |  | ||||||
|         options = OpenLayers.Util.extend({ numZoomLevels: 19, buffer: 0 }, options); |  | ||||||
|         var newArguments = [name, url, options]; |  | ||||||
|         OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments); |  | ||||||
|     }, |  | ||||||
| 
 |  | ||||||
|     CLASS_NAME: "OpenLayers.Layer.OSM.MapQuest" |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Class: OpenLayers.Layer.OSM.De |  | ||||||
|  * |  | ||||||
|  * Inherits from: |  | ||||||
|  *  - <OpenLayers.Layer.OSM> |  | ||||||
|  */ |  | ||||||
| OpenLayers.Layer.OSM.De = OpenLayers.Class(OpenLayers.Layer.OSM, { |  | ||||||
|     /** |  | ||||||
|      * Constructor: OpenLayers.Layer.OSM.De |  | ||||||
|      * |  | ||||||
|      * Parameters: |  | ||||||
|      * name - {String} |  | ||||||
|      * options - {Object} Hashtable of extra options to tag onto the layer |  | ||||||
|      */ |  | ||||||
|     initialize: function(name, options) { |  | ||||||
|         var url = [ |  | ||||||
|             "http://a.tile.openstreetmap.de/tiles/osmde/${z}/${x}/${y}.png", |  | ||||||
|             "http://b.tile.openstreetmap.de/tiles/osmde/${z}/${x}/${y}.png", |  | ||||||
|             "http://c.tile.openstreetmap.de/tiles/osmde/${z}/${x}/${y}.png" |  | ||||||
|         ]; |  | ||||||
|         options = OpenLayers.Util.extend({ numZoomLevels: 19, buffer: 0 }, options); |  | ||||||
|         var newArguments = [name, url, options]; |  | ||||||
|         OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments); |  | ||||||
|     }, |  | ||||||
| 
 |  | ||||||
|     CLASS_NAME: "OpenLayers.Layer.OSM.De" |  | ||||||
| }); |  | ||||||
| @ -1 +0,0 @@ | |||||||
| This is the OpenLayers Version 2.10 |  | ||||||
| Before Width: | Height: | Size: 42 B | 
| Before Width: | Height: | Size: 3.1 KiB | 
| Before Width: | Height: | Size: 1.2 KiB | 
| Before Width: | Height: | Size: 1.2 KiB | 
| Before Width: | Height: | Size: 451 B | 
| Before Width: | Height: | Size: 451 B | 
| Before Width: | Height: | Size: 249 B | 
| Before Width: | Height: | Size: 992 B | 
| Before Width: | Height: | Size: 831 B | 
| Before Width: | Height: | Size: 967 B | 
| Before Width: | Height: | Size: 606 B | 
| Before Width: | Height: | Size: 3.3 KiB | 
| Before Width: | Height: | Size: 3.7 KiB | 
| Before Width: | Height: | Size: 484 B | 
| Before Width: | Height: | Size: 3.8 KiB | 
| Before Width: | Height: | Size: 3.9 KiB | 
| Before Width: | Height: | Size: 285 B | 
| Before Width: | Height: | Size: 481 B | 
| Before Width: | Height: | Size: 453 B | 
| Before Width: | Height: | Size: 359 B | 
| Before Width: | Height: | Size: 489 B | 
| Before Width: | Height: | Size: 1.0 KiB | 
| Before Width: | Height: | Size: 463 B | 
| @ -1,10 +0,0 @@ | |||||||
| .olLayerGoogleCopyright { |  | ||||||
|     right: 3px; |  | ||||||
|     bottom: 2px; |  | ||||||
|     left: auto;   |  | ||||||
| } |  | ||||||
| .olLayerGooglePoweredBy { |  | ||||||
|     left: 2px; |  | ||||||
|     bottom: 2px;    |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| @ -1,7 +0,0 @@ | |||||||
| .olControlZoomPanel div { |  | ||||||
|     background-image: url(img/zoom-panel-NOALPHA.png); |  | ||||||
| } |  | ||||||
| .olControlPanPanel div { |  | ||||||
|     background-image: url(img/pan-panel-NOALPHA.png); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Before Width: | Height: | Size: 1.6 KiB | 
| Before Width: | Height: | Size: 1.4 KiB | 
| Before Width: | Height: | Size: 42 B | 
| Before Width: | Height: | Size: 1.1 KiB | 
| Before Width: | Height: | Size: 1.2 KiB | 
| Before Width: | Height: | Size: 1.2 KiB | 
| Before Width: | Height: | Size: 1.5 KiB | 
| Before Width: | Height: | Size: 1.4 KiB | 
| Before Width: | Height: | Size: 1.6 KiB | 
| Before Width: | Height: | Size: 1.4 KiB | 
| Before Width: | Height: | Size: 1.5 KiB | 
| Before Width: | Height: | Size: 1.4 KiB | 
| Before Width: | Height: | Size: 3.8 KiB | 
| Before Width: | Height: | Size: 1.5 KiB | 
| Before Width: | Height: | Size: 1.3 KiB | 
| Before Width: | Height: | Size: 6.9 KiB | 
| Before Width: | Height: | Size: 79 B | 
| Before Width: | Height: | Size: 566 B | 
| Before Width: | Height: | Size: 1.3 KiB | 
| Before Width: | Height: | Size: 1.7 KiB | 
| Before Width: | Height: | Size: 1.5 KiB | 
| Before Width: | Height: | Size: 3.8 KiB | 
| Before Width: | Height: | Size: 3.9 KiB | 
| Before Width: | Height: | Size: 1.6 KiB | 
| Before Width: | Height: | Size: 1.4 KiB | 
| Before Width: | Height: | Size: 1.2 KiB | 
| Before Width: | Height: | Size: 357 B | 
| Before Width: | Height: | Size: 364 B | 
| Before Width: | Height: | Size: 1.6 KiB | 
| Before Width: | Height: | Size: 1.6 KiB | 
| Before Width: | Height: | Size: 1.5 KiB | 
| Before Width: | Height: | Size: 1.6 KiB | 
| Before Width: | Height: | Size: 1.1 KiB | 
| Before Width: | Height: | Size: 1.6 KiB | 
| @ -1,397 +0,0 @@ | |||||||
| div.olMap { |  | ||||||
|     z-index: 0; |  | ||||||
|     padding: 0px!important; |  | ||||||
|     margin: 0px!important; |  | ||||||
|     cursor: default; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| div.olMapViewport { |  | ||||||
|     text-align: left; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| div.olLayerDiv { |  | ||||||
|    -moz-user-select: none; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .olLayerGoogleCopyright { |  | ||||||
|     left: 2px; |  | ||||||
|     bottom: 2px;   |  | ||||||
| } |  | ||||||
| .olLayerGooglePoweredBy { |  | ||||||
|     left: 2px; |  | ||||||
|     bottom: 15px;    |  | ||||||
| } |  | ||||||
| .olControlAttribution { |  | ||||||
|     font-size: smaller;  |  | ||||||
|     right: 3px;  |  | ||||||
|     bottom: 4.5em;  |  | ||||||
|     position: absolute;  |  | ||||||
|     display: block; |  | ||||||
| } |  | ||||||
| .olControlScale { |  | ||||||
|     right: 3px; |  | ||||||
|     bottom: 3em; |  | ||||||
|     display: block; |  | ||||||
|     position: absolute; |  | ||||||
|     font-size: smaller; |  | ||||||
| } |  | ||||||
| .olControlScaleLine { |  | ||||||
|    display: block; |  | ||||||
|    position: absolute; |  | ||||||
|    left: 10px; |  | ||||||
|    bottom: 15px; |  | ||||||
|    font-size: xx-small; |  | ||||||
| } |  | ||||||
| .olControlScaleLineBottom { |  | ||||||
|    border: solid 2px black; |  | ||||||
|    border-bottom: none; |  | ||||||
|    margin-top:-2px; |  | ||||||
|    text-align: center; |  | ||||||
| } |  | ||||||
| .olControlScaleLineTop { |  | ||||||
|    border: solid 2px black; |  | ||||||
|    border-top: none; |  | ||||||
|    text-align: center; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .olControlPermalink { |  | ||||||
|     right: 3px; |  | ||||||
|     bottom: 1.5em; |  | ||||||
|     display: block; |  | ||||||
|     position: absolute; |  | ||||||
|     font-size: smaller; |  | ||||||
| }  |  | ||||||
| 
 |  | ||||||
| div.olControlMousePosition { |  | ||||||
|     bottom: 0em; |  | ||||||
|     right: 3px; |  | ||||||
|     display: block; |  | ||||||
|     position: absolute; |  | ||||||
|     font-family: Arial; |  | ||||||
|     font-size: smaller; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .olControlOverviewMapContainer { |  | ||||||
|     position: absolute; |  | ||||||
|     bottom: 0px; |  | ||||||
|     right: 0px; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .olControlOverviewMapElement { |  | ||||||
|     padding: 10px 18px 10px 10px; |  | ||||||
|     background-color: #00008B; |  | ||||||
|     -moz-border-radius: 1em 0 0 0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .olControlOverviewMapMinimizeButton { |  | ||||||
|     right: 0px; |  | ||||||
|     bottom: 80px; |  | ||||||
| }     |  | ||||||
| 
 |  | ||||||
| .olControlOverviewMapMaximizeButton { |  | ||||||
|     right: 0px; |  | ||||||
|     bottom: 80px; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .olControlOverviewMapExtentRectangle { |  | ||||||
|     overflow: hidden; |  | ||||||
|     background-image: url("img/blank.gif"); |  | ||||||
|     cursor: move; |  | ||||||
|     border: 2px dotted red; |  | ||||||
| } |  | ||||||
| .olControlOverviewMapRectReplacement { |  | ||||||
|     overflow: hidden; |  | ||||||
|     cursor: move; |  | ||||||
|     background-image: url("img/overview_replacement.gif"); |  | ||||||
|     background-repeat: no-repeat; |  | ||||||
|     background-position: center; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .olLayerGeoRSSDescription { |  | ||||||
|     float:left; |  | ||||||
|     width:100%; |  | ||||||
|     overflow:auto; |  | ||||||
|     font-size:1.0em; |  | ||||||
| } |  | ||||||
| .olLayerGeoRSSClose { |  | ||||||
|     float:right; |  | ||||||
|     color:gray; |  | ||||||
|     font-size:1.2em; |  | ||||||
|     margin-right:6px; |  | ||||||
|     font-family:sans-serif; |  | ||||||
| } |  | ||||||
| .olLayerGeoRSSTitle { |  | ||||||
|     float:left;font-size:1.2em; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .olPopupContent { |  | ||||||
|     padding:5px; |  | ||||||
|     overflow: auto; |  | ||||||
| }     |  | ||||||
| .olControlNavToolbar {  |  | ||||||
|     width:0px; |  | ||||||
|     height:0px; |  | ||||||
| }     |  | ||||||
| .olControlNavToolbar div {  |  | ||||||
|   display:block; |  | ||||||
|   width:  28px; |  | ||||||
|   height: 28px; |  | ||||||
|   top: 300px; |  | ||||||
|   left: 6px; |  | ||||||
|   position: relative; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .olControlNavigationHistory { |  | ||||||
|    background-image: url("img/navigation_history.png"); |  | ||||||
|    background-repeat: no-repeat; |  | ||||||
|    width:  24px; |  | ||||||
|    height: 24px; |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| .olControlNavigationHistoryPreviousItemActive {  |  | ||||||
|   background-position: 0px 0px; |  | ||||||
| } |  | ||||||
| .olControlNavigationHistoryPreviousItemInactive {  |  | ||||||
|    background-position: 0px -24px; |  | ||||||
| } |  | ||||||
| .olControlNavigationHistoryNextItemActive {  |  | ||||||
|    background-position: -24px 0px; |  | ||||||
| } |  | ||||||
| .olControlNavigationHistoryNextItemInactive {  |  | ||||||
|    background-position: -24px -24px; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .olControlNavToolbar .olControlNavigationItemActive {  |  | ||||||
|   background-image: url("img/panning-hand-on.png"); |  | ||||||
|   background-repeat: no-repeat; |  | ||||||
| } |  | ||||||
| .olControlNavToolbar .olControlNavigationItemInactive {  |  | ||||||
|   background-image: url("img/panning-hand-off.png"); |  | ||||||
|   background-repeat: no-repeat; |  | ||||||
| } |  | ||||||
| .olControlNavToolbar .olControlZoomBoxItemActive {  |  | ||||||
|   background-image: url("img/drag-rectangle-on.png"); |  | ||||||
|   background-color: orange; |  | ||||||
|   background-repeat: no-repeat; |  | ||||||
| } |  | ||||||
| .olControlNavToolbar .olControlZoomBoxItemInactive {  |  | ||||||
|   background-image: url("img/drag-rectangle-off.png"); |  | ||||||
|   background-repeat: no-repeat; |  | ||||||
| } |  | ||||||
| .olControlEditingToolbar  { |  | ||||||
|     float:right; |  | ||||||
|     right: 0px; |  | ||||||
|     height: 30px;  |  | ||||||
|     width: 200px; |  | ||||||
| } |  | ||||||
| .olControlEditingToolbar div {  |  | ||||||
|   background-image: url("img/editing_tool_bar.png"); |  | ||||||
|   background-repeat: no-repeat; |  | ||||||
|   float:right; |  | ||||||
|   width:  24px; |  | ||||||
|   height: 24px; |  | ||||||
|   margin: 5px; |  | ||||||
| } |  | ||||||
| .olControlEditingToolbar .olControlNavigationItemActive {  |  | ||||||
|   background-position: -103px -23px;  |  | ||||||
| } |  | ||||||
| .olControlEditingToolbar .olControlNavigationItemInactive {  |  | ||||||
|   background-position: -103px -0px;  |  | ||||||
| } |  | ||||||
| .olControlEditingToolbar .olControlDrawFeaturePointItemActive {  |  | ||||||
|   background-position: -77px -23px;  |  | ||||||
| } |  | ||||||
| .olControlEditingToolbar .olControlDrawFeaturePointItemInactive {  |  | ||||||
|   background-position: -77px -0px;  |  | ||||||
| } |  | ||||||
| .olControlEditingToolbar .olControlDrawFeaturePathItemInactive {  |  | ||||||
|   background-position: -51px 0px;  |  | ||||||
| } |  | ||||||
| .olControlEditingToolbar .olControlDrawFeaturePathItemActive {  |  | ||||||
|   background-position: -51px -23px;  |  | ||||||
| } |  | ||||||
| .olControlEditingToolbar .olControlDrawFeaturePolygonItemInactive {  |  | ||||||
|   background-position: -26px 0px;  |  | ||||||
| } |  | ||||||
| .olControlEditingToolbar .olControlDrawFeaturePolygonItemActive {  |  | ||||||
|   background-position: -26px -23px ;                                                                    |  | ||||||
| } |  | ||||||
| div.olControlSaveFeaturesItemActive {  |  | ||||||
|     background-image: url(img/save_features_on.png); |  | ||||||
|     background-repeat: no-repeat; |  | ||||||
|     background-position: 0px 1px; |  | ||||||
| } |  | ||||||
| div.olControlSaveFeaturesItemInactive {  |  | ||||||
|     background-image: url(img/save_features_off.png); |  | ||||||
|     background-repeat: no-repeat; |  | ||||||
|     background-position: 0px 1px; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .olHandlerBoxZoomBox { |  | ||||||
|     border: 2px solid red; |  | ||||||
|     position: absolute; |  | ||||||
|     background-color: white; |  | ||||||
|     opacity: 0.50; |  | ||||||
|     font-size: 1px; |  | ||||||
|     filter: alpha(opacity=50); |  | ||||||
| } |  | ||||||
| .olHandlerBoxSelectFeature { |  | ||||||
|     border: 2px solid blue; |  | ||||||
|     position: absolute; |  | ||||||
|     background-color: white; |  | ||||||
|     opacity: 0.50; |  | ||||||
|     font-size: 1px; |  | ||||||
|     filter: alpha(opacity=50); |  | ||||||
| }    |  | ||||||
| 
 |  | ||||||
| .olControlPanPanel { |  | ||||||
|     top: 10px; |  | ||||||
|     left: 5px; |  | ||||||
| }   |  | ||||||
| 
 |  | ||||||
| .olControlPanPanel div { |  | ||||||
|     background-image: url(img/pan-panel.png); |  | ||||||
|     height: 18px; |  | ||||||
|     width: 18px; |  | ||||||
|     cursor: pointer; |  | ||||||
|     position: absolute; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .olControlPanPanel .olControlPanNorthItemInactive { |  | ||||||
|     top: 0px; |  | ||||||
|     left: 9px; |  | ||||||
|     background-position: 0px 0px; |  | ||||||
| } |  | ||||||
| .olControlPanPanel .olControlPanSouthItemInactive { |  | ||||||
|     top: 36px; |  | ||||||
|     left: 9px; |  | ||||||
|     background-position: 18px 0px; |  | ||||||
| } |  | ||||||
| .olControlPanPanel .olControlPanWestItemInactive { |  | ||||||
|     position: absolute; |  | ||||||
|     top: 18px; |  | ||||||
|     left: 0px; |  | ||||||
|     background-position: 0px 18px; |  | ||||||
| } |  | ||||||
| .olControlPanPanel .olControlPanEastItemInactive { |  | ||||||
|     top: 18px; |  | ||||||
|     left: 18px; |  | ||||||
|     background-position: 18px 18px; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .olControlZoomPanel { |  | ||||||
|     top: 71px; |  | ||||||
|     left: 14px; |  | ||||||
| }  |  | ||||||
| 
 |  | ||||||
| .olControlZoomPanel div { |  | ||||||
|     background-image: url(img/zoom-panel.png); |  | ||||||
|     position: absolute; |  | ||||||
|     height: 18px; |  | ||||||
|     width: 18px; |  | ||||||
|     cursor: pointer; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .olControlZoomPanel .olControlZoomInItemInactive { |  | ||||||
|     top: 0px; |  | ||||||
|     left: 0px; |  | ||||||
|     background-position: 0px 0px; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .olControlZoomPanel .olControlZoomToMaxExtentItemInactive { |  | ||||||
|     top: 18px; |  | ||||||
|     left: 0px; |  | ||||||
|     background-position: 0px -18px; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .olControlZoomPanel .olControlZoomOutItemInactive { |  | ||||||
|     top: 36px; |  | ||||||
|     left: 0px; |  | ||||||
|     background-position: 0px 18px; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .olPopupCloseBox { |  | ||||||
|   background: url("img/close.gif") no-repeat; |  | ||||||
|   cursor: pointer; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .olFramedCloudPopupContent { |  | ||||||
|     padding: 5px; |  | ||||||
|     overflow: auto; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .olControlNoSelect { |  | ||||||
|  -moz-user-select: none; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .olImageLoadError { |  | ||||||
|     background-color: pink; |  | ||||||
|     opacity: 0.5; |  | ||||||
|     filter: alpha(opacity=50); /* IE */ |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Cursor styles |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| .olCursorWait { |  | ||||||
|     cursor: wait; |  | ||||||
| } |  | ||||||
| .olDragDown { |  | ||||||
|     cursor: move; |  | ||||||
| } |  | ||||||
| .olDrawBox { |  | ||||||
|     cursor: crosshair; |  | ||||||
| } |  | ||||||
| .olControlDragFeatureOver { |  | ||||||
|     cursor: move; |  | ||||||
| } |  | ||||||
| .olControlDragFeatureActive.olControlDragFeatureOver.olDragDown { |  | ||||||
|     cursor: -moz-grabbing; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Layer switcher |  | ||||||
|  */ |  | ||||||
| .olControlLayerSwitcher { |  | ||||||
|     position: absolute; |  | ||||||
|     top: 25px; |  | ||||||
|     right: 0px; |  | ||||||
|     width: 20em; |  | ||||||
|     font-family: sans-serif; |  | ||||||
|     font-weight: bold; |  | ||||||
|     margin-top: 3px; |  | ||||||
|     margin-left: 3px; |  | ||||||
|     margin-bottom: 3px; |  | ||||||
|     font-size: smaller; |  | ||||||
|     color: white; |  | ||||||
|     background-color: transparent; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .olControlLayerSwitcher .layersDiv { |  | ||||||
|     padding-top: 5px; |  | ||||||
|     padding-left: 10px; |  | ||||||
|     padding-bottom: 5px; |  | ||||||
|     padding-right: 75px; |  | ||||||
|     background-color: darkblue; |  | ||||||
|     width: 100%; |  | ||||||
|     height: 100%; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .olControlLayerSwitcher .layersDiv .baseLbl, |  | ||||||
| .olControlLayerSwitcher .layersDiv .dataLbl { |  | ||||||
|     margin-top: 3px; |  | ||||||
|     margin-left: 3px; |  | ||||||
|     margin-bottom: 3px; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .olControlLayerSwitcher .layersDiv .baseLayersDiv, |  | ||||||
| .olControlLayerSwitcher .layersDiv .dataLayersDiv { |  | ||||||
|     padding-left: 10px; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .olControlLayerSwitcher .maximizeDiv, |  | ||||||
| .olControlLayerSwitcher .minimizeDiv { |  | ||||||
|     top: 5px; |  | ||||||
|     right: 0px; |  | ||||||
| } |  | ||||||
| @ -1,119 +0,0 @@ | |||||||
| html,body{margin:0;padding:0;height: 100%;width: 100%;} |  | ||||||
| 
 |  | ||||||
| .copyright{ |  | ||||||
| 	text-align:center; |  | ||||||
| 	font-size:10px; |  | ||||||
| 	font-family:Verdana; |  | ||||||
| 	font-weight: bold; |  | ||||||
|     bottom: 5px; |  | ||||||
|     right: 5px; |  | ||||||
|     position: absolute;  |  | ||||||
|     display: block; |  | ||||||
|     z-index: 999; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| div.olControlLayerSwitcher { |  | ||||||
|     position: absolute; |  | ||||||
|     top: 25px; |  | ||||||
|     right: 0px; |  | ||||||
|     width: 15em; |  | ||||||
|     font-family: sans-serif; |  | ||||||
|     font-weight: bold; |  | ||||||
|     margin-top: 3px; |  | ||||||
|     margin-left: 3px; |  | ||||||
|     margin-bottom: 3px; |  | ||||||
|     font-size: smaller; |  | ||||||
|     color: white; |  | ||||||
|     background-color: transparent; |  | ||||||
|     white-space:nowrap; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| div.olControlPermalink { |  | ||||||
|     right: 5px; |  | ||||||
|     bottom: 30px; |  | ||||||
|     display: block; |  | ||||||
|     position: absolute; |  | ||||||
|     font-family:Verdana; |  | ||||||
|     font-size: smaller; |  | ||||||
| }  |  | ||||||
| 
 |  | ||||||
| #data { |  | ||||||
| 	padding:5px; |  | ||||||
| 	margin:5px; |  | ||||||
| 	height:95% !important; /* Important Regel für moderne Browser */ |  | ||||||
| 	width:350px; |  | ||||||
| 	background-color: #FFFFFF; |  | ||||||
| 	position:absolute; |  | ||||||
| 	z-index: 999; |  | ||||||
| 	border:1px solid #bebebe; |  | ||||||
| 	border-radius: 6px;-moz-border-radius: 6px; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #map { |  | ||||||
| 	background-color:#000000; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .slide { |  | ||||||
| 	position:absolute; |  | ||||||
| 	z-index: 999; |  | ||||||
| 	top:40px; |  | ||||||
| 	left:365px; |  | ||||||
| 	background-color:#FF7F00; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .button { |  | ||||||
| 	text-align: center; |  | ||||||
| 	width: 10px; |  | ||||||
| 	height: 10px; |  | ||||||
| 	display: block; |  | ||||||
| 	color: #fff; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .calc_route { padding: 5px;margin-left:auto; margin-right:46;text-align:right; } |  | ||||||
| .options { margin-right:10px; font-size:9px; font-family:Verdana; } |  | ||||||
| .options_div { margin-left:20px; font-size:9px; font-family:Verdana; } |  | ||||||
| 
 |  | ||||||
| .text { |  | ||||||
| 	text-align: center; |  | ||||||
| 	font: bold 90%/80% Arial, Helvetica, sans-serif; |  | ||||||
| 	color: #000000; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .radioIcons{ |  | ||||||
| 	vertical-align: sub; |  | ||||||
| 	_vertical-align: middle;//IE_Hack |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .information { |  | ||||||
| 	font-family: Arial, Helvetica, sans-serif; |  | ||||||
| 	font-size: 12px; |  | ||||||
| 	color: #000000; |  | ||||||
| 	overflow:auto; |  | ||||||
| 	height:70%; |  | ||||||
| 	overflow-x:hidden; |  | ||||||
| 	margin-left: 10px; |  | ||||||
| 	margin-right: 10px; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .text_textfiled { |  | ||||||
| 	font-family: Arial, Helvetica, sans-serif; |  | ||||||
| 	font-size: 12px; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .infoHL { font-family: Arial, Helvetica, sans-serif; font-weight:bold; font-size: 12px; color: #000000; } |  | ||||||
| .infoHLRed { font-family: Arial, Helvetica, sans-serif; font-weight:bold; font-size: 12px; color: #FF0000; } |  | ||||||
| 
 |  | ||||||
| .geocodeResultEven { padding-left:5px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #000000; } |  | ||||||
| .geocodeResultOdd { padding-left:5px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #000000; } |  | ||||||
| 
 |  | ||||||
| .routeSummaryHL { font-family: Arial, Helvetica, sans-serif; font-weight:bold; font-size: 12px; color: #000000; } |  | ||||||
| .routeSummaryHLlight { font-family: Arial, Helvetica, sans-serif; font-weight:bold; font-size: 13px; color: #000000; } |  | ||||||
| .routeSummary { font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #000000; } |  | ||||||
| .routeSummarybold { font-family: Arial, Helvetica, sans-serif; font-weight:bold; font-size: 12px; color: #000000; } |  | ||||||
| .routeInstructionsHL { font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #000000; text-decoration:underline; } |  | ||||||
| .routeInstructionsEven { padding-left:5px; padding-right:5px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #000000; background-color: #D3D3D3; } |  | ||||||
| .routeInstructionsOdd { padding-left:5px; padding-right:5px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #000000; } |  | ||||||
| 
 |  | ||||||
| .nolinkStyle { text-decoration:none; color: #000000; } |  | ||||||
| 
 |  | ||||||
| .thx{ text-align:center; font-size:9px; font-family:Verdana; bottom: 5px; position: absolute; width:350; } |  | ||||||