2008. november 11., kedd

Gyalogos útvonaltervezés API reloaded

A múltkoriban írtam a témában egy rövidet. Akkor idemásoltam egy kódrészletet, ami elvben szemléltetné a használatot. Nos szemléltetésre épp jó csak nem működik :)
Amikor élesben akartam használni a függvényt, mégpedig úgy, hogy az útvonalat ÉN MAGAM rajzoltatom ki és nem adok meg sem panelt az itinernek, sem pedig map paramétert kiderült, hogy ez bizony így nem megy:

var directions = new GDirections();


Nem tudom bug-e vagy feature, de az ititnert feldolgozó DIV megadása nélkül nem működik.

var directions = new GDirections(map, directionsPanel);


Az, hogy az itiner ne legyen látható, elég egyszerű hack.

<div id="route" style="width: 0px; height:0px; display: none;">



Ha (úgy ahogy én) csak a polyline-t akarjuk beszerezni, akkor a konstruktorban lehet null-t adni a map helyén:

var directions = new GDirections(null, directionsPanel);


Egészében a működő cucc:

Bár ennél a megjelenítésnél nem látszik, de az irány több helyen egyirányú utcákban szemben megy, bizonyítván ezzel, hogy tényleg gyalogos útvonalterv készült :)
Íme a forrás:

var map;

var directionsPanel;

var directions;

function initialize() {

map = new GMap2(document.getElementById("map_canvas"));

map.enableScrollWheelZoom();

geocoder = new GClientGeocoder();

geocoder.getLocations("Hungary, Budapest Jókai tér 5", function(response) {

var place = response.Placemark[0];

var p = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);

map.setCenter(p, 17);

}

);

directionsPanel = document.getElementById("route");

directions = new GDirections(null, directionsPanel);

GEvent.addListener(directions, "load", function() {


var gdpolyline = directions.getPolyline();

map.addOverlay(gdpolyline);

});

var opts = { getPolyline: true, getSteps: true, preserveViewport: false, travelMode: G_TRAVEL_MODE_WALKING };

directions.load("from: Hungary, Budapest Jókai tér 5 to: Hungary, Budapest Hernád utca 48", opts);

}

2 megjegyzés:

honlapkészítés írta...

Az útvonal leírást hova töltöd be?

NJoco írta...

Az itiner egy egyszerű DIV-be megy, ami jelen példában el van dugva:
<div id="route" style="width: 0px; height:0px; display: none;">
A konstruktorban kell megadni neki:
new GDirections(map, directionsPanel);
Első paraméter a térképet tartalmazó, a második az itinert tartalmazó DIV-re mutat.