Removing Docs subdirectory
44
Docs/FAQ.txt
@ -1,44 +0,0 @@
|
|||||||
FAQ
|
|
||||||
---
|
|
||||||
|
|
||||||
Q: What platforms does OSMR run on?
|
|
||||||
A: Virtually any Unix-like platform with g++ installed. It has been developed
|
|
||||||
under Linux and tested on MacOS X 10.6. It should run under Windows as well
|
|
||||||
though the code will need some adjustments.
|
|
||||||
|
|
||||||
Q: What is the workflow to get the engine up and running
|
|
||||||
A: Road network extraction->Preprocessing->Startup
|
|
||||||
|
|
||||||
Q: What does OSRM stand for?
|
|
||||||
A: It is an abbreviation for Open Source Routing Machine.
|
|
||||||
|
|
||||||
Q: What does HSGR stand for?
|
|
||||||
A: It is an abbreviation for Hierarchy Search GRaph.
|
|
||||||
|
|
||||||
Q: What is the .nodes file?
|
|
||||||
A: It is a map that translates between internal and external Node IDs. Remember
|
|
||||||
that external NodeIDs can be arbitrary and non-contigous. Internally the
|
|
||||||
nodes are numbered from 0 to n-1.
|
|
||||||
|
|
||||||
Q: The routing engine crashes with a seg-fault
|
|
||||||
A: Check the startup parameters.
|
|
||||||
|
|
||||||
Q: Something about the route is odd. I know that there is a better path
|
|
||||||
A: Most probably it is missing data in the OSM file.
|
|
||||||
|
|
||||||
Q: I work for this company that would like to use the code, but we are hesistant
|
|
||||||
because of the license.
|
|
||||||
A: Contact me. Probably, we can work something out.
|
|
||||||
|
|
||||||
Q: How fast is this thing?
|
|
||||||
A: Good question. Here is a number. The engine was able to handle more than
|
|
||||||
2800 requests per Minute on the German road network with the travel time
|
|
||||||
metric on a Core 2 Duo. This also includes transfer of data across a
|
|
||||||
switched 100MBit/s LAN. So, I guess it's fair to say it's fast.
|
|
||||||
|
|
||||||
Q: What is the difference between extractNetwork and extractLargeNetwork?
|
|
||||||
A: extractNetwork does all of its magic in RAM, while extractLargeNetwork uses the
|
|
||||||
stxxl library to store the data in external memory. Use the first one for small
|
|
||||||
networks, but beware of running out of RAM. Swapping is the kiss of death. For
|
|
||||||
larger networks use extractLargeNetwork. It will be somewhat slower on the
|
|
||||||
smaller files, but way faster with large ones like the planet file.
|
|
@ -1,6 +0,0 @@
|
|||||||
- extractorLargeNetwork finishes with:
|
|
||||||
terminate called after throwing an instance of 'stxxl::resource_error'
|
|
||||||
what(): Error in function void stxxl::mutex::lock() pthread_mutex_lock(&_mutex) Invalid argument
|
|
||||||
|
|
||||||
This ist a known, albeit odd behavior that is caused by a bug in stxxl. It can be ignored. Upgrade
|
|
||||||
to version 1.3.1 of stxxl.
|
|
@ -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; }
|
|