Getting the OpenLayers? code for the routing application
Please use the following code. Download it and copy all the stuff e.g. in the direcory OpenLayers?/examples/ ) and save it as index.html (be aware that you need to type the correct path to implement /lib/OpenLayers.js).
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <style type="text/css"> #map { width: 800px; height: 450px; border: 1px solid black; } </style> <script src="../../lib/OpenLayers.js"></script> <script type="text/javascript"> var SinglePoint = OpenLayers.Class.create(); SinglePoint.prototype = OpenLayers.Class.inherit(OpenLayers.Handler.Point, { createFeature: function(evt) { this.control.layer.removeFeatures(this.control.layer.features); OpenLayers.Handler.Point.prototype.createFeature.apply(this, arguments); } }); var start_style = OpenLayers.Util.applyDefaults({ externalGraphic: "start.png", graphicWidth: 18, graphicHeight: 26, graphicYOffset: -26, graphicOpacity: 1 }, OpenLayers.Feature.Vector.style['default']); var stop_style = OpenLayers.Util.applyDefaults({ externalGraphic: "stop.png", graphicWidth: 18, graphicHeight: 26, graphicYOffset: -26, graphicOpacity: 1 }, OpenLayers.Feature.Vector.style['default']); var result_style = OpenLayers.Util.applyDefaults({ strokeWidth: 3, strokeColor: "#ff0000", fillOpacity: 0 }, OpenLayers.Feature.Vector.style['default']); // global variables var map, parser, start, stop, downtown, result, controls; function Lon2Merc(lon) { return 20037508.34 * lon / 180; } function Lat2Merc(lat) { var PI = 3.14159265358979323846; lat = Math.log(Math.tan( (90 + lat) * PI / 360)) / (PI / 180); return 20037508.34 * lat / 180; } OpenLayers.IMAGE_RELOAD_ATTEMPTS = 3; OpenLayers.Util.onImageLoadErrorColor = "transparent"; function init() { var zoom = 18; var options = { projection: new OpenLayers.Projection("EPSG:900913"), // displayProjection: new OpenLayers.Projection("EPSG:4326"), units: "m", numZoomLevels: 22, maxResolution: 156543.0339, maxExtent: new OpenLayers.Bounds(-20037508, -20037508, 20037508, 20037508.34) }; map = new OpenLayers.Map('map', options); map.addControl(new OpenLayers.Control.LayerSwitcher()); map.addControl(new OpenLayers.Control.MousePosition()); //var wms= new OpenLayers.Layer.WMS.Untiled( "strassen", // "http://localhost/cgi-bin/mapserv?map=/your_path/routing.map", // {layers: 'streets',transparent:true, format: 'png'}); //var wms2= new OpenLayers.Layer.WMS.Untiled( "dead_ends", // "http://localhost/cgi-bin/mapserv?map=/your_path/routing.map", // {layers: 'dead_ends',transparent:true, format: 'png'}); //wms.isBaseLayer= false; // wms2.isBaseLayer= false; // create OSM layer var mapnik = new OpenLayers.Layer.TMS( "OpenStreetMap (Mapnik)", "http://a.tile.openstreetmap.org/", { type: 'png', getURL: osm_getTileURL, displayOutsideMaxExtent: true, attribution: '<a href="http://www.openstreetmap.org/">OpenStreetMap</a>' } ); start = new OpenLayers.Layer.Vector("Start point", {style: start_style}); stop = new OpenLayers.Layer.Vector("End point", {style: stop_style}); result = new OpenLayers.Layer.Vector("Routing results", {style: result_style}); map.addLayers([mapnik, start, stop,result]); // set default position map.zoomToExtent(new OpenLayers.Bounds(880000, 6840000, 915000, 6860000)); // controls controls = { start: new OpenLayers.Control.DrawFeature(start, SinglePoint), stop: new OpenLayers.Control.DrawFeature(stop, SinglePoint) } for (var key in controls) { map.addControl(controls[key]); } } function toggleControl(element) { for (key in controls) { if (element.value == key && element.checked) { controls[key].activate(); } else { controls[key].deactivate(); } } } function compute() { var startPoint = start.features[0]; var stopPoint = stop.features[0]; if (startPoint && stopPoint) { OpenLayers.loadURL("routing.php?startpoint="+startPoint.geometry.x+" "+startPoint.geometry.y+"&finalpoint="+stopPoint.geometry.x+" "+stopPoint.geometry.y+"&method=SPD&srid=900913", null, null, displayRoute, null); } } function displayRoute(response) { if (response && response.responseXML) { // erase the previous results result.removeFeatures(result.features); function parseWKT(wkt) { parser = new OpenLayers.Format.WKT(); var geometry = parser.read(wkt) var features = parser.read(wkt); var bounds; if(features) { if(features.constructor != Array) { features = [features]; } for(var i=0; i<features.length; ++i) { if (!bounds) { bounds = features[i].geometry.getBounds(); } else { bounds.extend(features[i].geometry.getBounds()); } } result.addFeatures(features); } else { alert ("wrong"); element.value = 'Bad WKT'; } } // parse the features var edges = response.responseXML.getElementsByTagName('edge'); var features = []; for (var i = 0; i < edges.length; i++) { var g = parseWKT(edges[i].getElementsByTagName('wkt')[0].textContent); features.push(new OpenLayers.Feature.Vector(g)); } result.addFeatures(features); } } function osm_getTileURL(bounds) { var res = this.map.getResolution(); var x = Math.round((bounds.left - this.maxExtent.left) / (res * this.tileSize.w)); var y = Math.round((this.maxExtent.top - bounds.top) / (res * this.tileSize.h)); var z = this.map.getZoom(); var limit = Math.pow(2, z); if (y < 0 || y >= limit) { return OpenLayers.Util.getImagesLocation() + "404.png"; } else { x = ((x % limit) + limit) % limit; return this.url + z + "/" + x + "/" + y + "." + this.type; } } </script> </head> <body onload="init()"> <div id="map"></div> <ul> <li> <input type="radio" name="control" id="noneToggle" onclick="toggleControl(this);" checked="checked" /> <label for="noneToggle">navigate</label> </li> <li> <input type="radio" name="control" value="start" id="startToggle" onclick="toggleControl(this);" /> <label for="startToggle">set start point</label> </li> <li> <input type="radio" name="control" value="stop" id="stopToggle" onclick="toggleControl(this);" /> <label for="stopToggle">set stop point</label> </li> </ul> <select id="method"> <option value="SPD">Shortest Path Dijkstra - undirected (BBox)</option> </select> <button onclick="compute()">Calculate Route</button> </body> </html>