Nullbeta aka HansR - online sinds 2001. Tegelijkertijd baasje en knecht van het slechtst gelezen weblog van het noordelijk halfrond. XHTML en cascading style sheet fetisjist. Parttime usability neuroot. Object oriëntatie losert. SQL wannabe. De ongekroonde koning van de ongedocumenteerde spaghetticode. Verliefd op en ziek van SEO. Vindt zijn Asics tegenwoordig vaak leuker dan zijn laptop.

Nullbeta sluit zich aan bij de woorden van Dante – All hope abandoned, he who entereth here ...

Black and blue SEO; optimization that will knock you out

Null, code knagen, cms in de polder, stijlbladen, gelaagd bouwen, MySQL, php, Emmeloord, webservers, toegankelijk, document object model, zzp, organisch, puntkomma kwijt, webstandaards, uhhh zoekmachine spam? Beta. Nullbeta.

Null ...

Nul? Nee null! Uhh, wat is null?

... Beta

Adj. 1. important, of importance - of great significance or value; "important people"; "the important questions of the day"


 

Server side common point filtering

8 juni 2008

Onlangs besteedde ik aandacht aan de mogelijkheid om in Google Maps een cirkel te tekenen en vervolgens te bepalen of ander coordinaat binnen het oppervlak van de getekende cirkel valt. Dat resulteerde in dit demootje van een client side common point filter.

In die post had ik het over een mogelijke praktische toepassing van een common point filter: het tonen van gerelateerde info / in de buurt informatie voor mijn website met gezinsuitjes.

Het saaie deel van deze klus, het verzamelen van hotelinformatie, kon ik gelukkig uitbesteden aan een ** kuch ** creatief scriptje. Ik wist de hand te leggen op een xml bestand met hotels in Nederland, inclusief geo-informatie. Met de hoteldata voorhanden werd het duidelijk dat een client side oplossing eigenlijk geen optie is. Het is niet echt handig om in één keer anderhalve MB aan xml-data in te laden. Is er een alternatief?

Zeker. De oplossing is eenvoudig. Met php is een server side common point filter¹ snel te realiseren. Bij het laden van de details van een uitje wordt een php-functie aangeroepen die de records in de tabel met hotelgegevens doorloopt en de afstand tussen de locatie van het uitje en het hotels in kwestie berekent². Is deze afstand in kilometers minder dan een vooraf vastgestelde afstand (in mijn geval 10 kilometer)? Dan wordt de hotelinformatie getoond bij het uitje in kwestie.


function afstandTotPunt($lat1,$lng1,$lat2,$lng2) {

$a1 = deg2rad($lat1); //lat 1 in radialen
$a2 = deg2rad($lat2); //lat 2 (het xcoordinaat van het uitje) in radialen
$b1 = deg2rad($lng1); //lng 1 in radialen
$b2 = deg2rad($lng2); //lng 2 (het ycoordinaat van het uitje) in radialen

$r = 6378.8; //de radius / straal van de aarde in kilometers

return round(acos(cos($a1)*cos($b1)*cos($a2)*cos($b2) + cos($a1)*sin($b1)*cos($a2)*sin($b2) + sin($a1)*sin($a2)) * $r);

}

Achtergrondinformatie over het berekenen van de afstand tussen twee punten vind je trouwens hier: What is the best way to calculate the great circle distance en op de Haversine formula pagina van Wikipedia.

¹ Code: Beginning Google Maps Applications with PHP and Ajax van Michael Purvis, Jeffrey Sambells en Cameron Turner
² De serverload voor het doorlopen van de records in de tabel met hotelgegevens is niet al te zwaar. Dus neem ik niet de moeite om er andere filters op te zetten.

Geschreven door HansR
Er is nog niet gereageerd op deze tekst.
Geplaatst in Google Maps
Getagged als , , ,

Reageren:




De volgende tags kun je in je reactie gebruiken:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


RSS feed voor reacties op deze blogpost. TrackBack URL