Zit Yahoo Maps fout?
Omdat Google Maps hier en daar nog weleens een time-out geeft (G_GEO_SERVER_ERROR), besloot ik een afstandsberekening via Yahoo Maps te proberen.
1. API sleutel
Allereerst een API sleutel aangevraagd via https://developer.yahoo.com/wsregapp/. Dit kan alleen als je al een Yahoo account hebt, dus die moet je eventueel OOK aanvragen.
YGeopoints
Yahoo biedt 2 API’s aan: een Ajax API en een Flash AS3 API. Zie http://developer.yahoo.com/maps/. Omdat ik geen kaartje wilde tonen en zo weinig mogelijk code wil gebruiken, heb ik gekozen voor de Ajax API.
Na lang speuren en doorlezen van de Reference Manual, kwam ik erachter dat ik 2 YGeoPoints met elkaar moest vergelijken. YGeoPoints worden gedefineerd door lengte- en breedtegraden. Helaas biedt Yahoo Maps geen mogelijkheid om tekstuele strings (b.v. “Zuiddijk 415, Zaandam”) om te zetten in graden. Ik heb derhalve de juiste graden via http://developer.yahoo.com/maps/rest/V1/geocode.html
(Aangezien je met deze GeoCoding API XML terugkrijgt, is het vrij eenvoudig om via b.v. PHP en Ajax de juiste graden te achterhalen, maar dat terzijde….)
Javascript functies
Vervolgens roep je de juiste Javascript functies aan:
in de <HEAD>:
<script type=”text/javascript” src=”http://api.maps.yahoo.com/ajaxymap?v=3.8&appid=JOUW EIGEN API SLEUTEL”></script> in de <HEAD>-tag
in de <BODY>:
<script type=”text/javascript”>
// eerste adres = Zuiddijk 415, Zaandam
// tweede adres = Dam 1, Amsterdam
// lengte- en breedtegraden opgehaald via http://developer.yahoo.com/maps/rest/V1/geocode.html
var g1 = new YGeoPoint(52.426520,4.839082);
var g2 = new YGeoPoint(52.373277,4.893598);
var d = g1.distance(g2);
alert(d.kilometers);
</script>
Resultaat
Bovenstaande berekening geeft 6,98 kilometer terug, terwijl de werkelijke afstand ongeveer 15,5 kilometer is. Gebruikt Yahoo Maps de Haversine formula, die eigenlijk niet zo geschikt is voor “echte, over-de-weg kilometerberekening” of doe ik gewoon iets fout? Opmerkingen zijn welkom, ik heb de vraag al in het Ajax API forum geplaatst, maar dat forum is helaas niet zo levendig als het lijkt….