Deleting old web front end.
| @ -31,11 +31,16 @@ or see http://www.gnu.org/licenses/agpl.txt. | ||||
| 
 | ||||
| class NodeInformationHelpDesk{ | ||||
| public: | ||||
| 	NodeInformationHelpDesk(const char* ramIndexInput, const char* fileIndexInput, const unsigned _numberOfNodes, const unsigned crc) : numberOfNodes(_numberOfNodes), checkSum(crc) { | ||||
| 		readOnlyGrid = new ReadOnlyGrid(ramIndexInput,fileIndexInput); | ||||
| 		coordinateVector.reserve(numberOfNodes); | ||||
| 	    assert(0 == coordinateVector.size()); | ||||
| 	} | ||||
|     NodeInformationHelpDesk(const char* ramIndexInput, const char* fileIndexInput, const unsigned _numberOfNodes, const unsigned crc) : numberOfNodes(_numberOfNodes), checkSum(crc) { | ||||
|         readOnlyGrid = new ReadOnlyGrid(ramIndexInput,fileIndexInput); | ||||
|         coordinateVector.reserve(numberOfNodes); | ||||
|         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() { | ||||
| 		delete readOnlyGrid; | ||||
| @ -50,6 +55,10 @@ public: | ||||
| 		readOnlyGrid->OpenIndexFiles(); | ||||
| 	} | ||||
| 
 | ||||
| 	void initNNGrid() { | ||||
| 	    readOnlyGrid->OpenIndexFiles(); | ||||
| 	} | ||||
| 
 | ||||
| 	inline int getLatitudeOfNode(const NodeID node) const { return coordinateVector.at(node).lat; } | ||||
| 
 | ||||
| 	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; } | ||||