Alternatief voor getBoundingBox voor berekenen afstanden met geo-coordinaten

Met de PHP-functie getBoundingBox kun je een gebied (box) berekenen om een punt op de aarde met behulp van geo-coordinaten. Bij het toepassen van deze functie blijkt dat dit voor Nederland niet goed werkt. De box is in de hoogte opgerekt en in de breedte versmalt. Mijn vermoeden is dat de functie goed werkt voor de US maar niet voor Europa.

Voor de websites modevakschool.net en doggo.nl heb ik deze functie wel nodig voor zoekopdrachten naar adressen binnen een (postcode-)gebied. Dus: de hulp ingeroepen van de expert, geofysicus Marc de Jonge. Hij zette in 5 minuten de functie getPlatteBox in elkaar, die voor een relatief plat gebied altijd werkt. Dit is voor modevakschool.net en doggo.nl geen probleem, omdat deze alleen adressen bevatten in Nederland, België en Duitsland en bovendien in een klein gebied zoeken (< 25 km). getPlatteBox houdt geen rekening met de kromming van de aarde. De in- en output-variabelen zijn hetzelfde als die van getBoundingBox, afstand is in kilometers.

De invoer: de latitude, longitude van een punt en de grootte van de box waarin dichtstbijzijnde punten moeten vallen.
De uitvoer: de latitudes en longitudes waar binnen de dichtstbijzijnde punten moeten vallen.

function getPlatteBox($lat_degrees,$lon_degrees,$distance_in_km) {

 $radius = 6371.0;

 $rlat=$radius*sin(deg2rad(90-$lat_degrees));

 $dphi_lon=asin($distance_in_km/$rlat);
 $dphi_lat=asin($distance_in_km/$radius);

 $lat1=$lat_degrees-rad2deg($dphi_lat);
 $lat2=$lat_degrees+rad2deg($dphi_lat);
 $lon1=$lon_degrees-rad2deg($dphi_lon);
 $lon2=$lon_degrees+rad2deg($dphi_lon);

 return array($lat1,$lat2,$lon1,$lon2);
}

Bronnen

Nog uitzoeken

Spatial proximity searching using lat/longs , link gekregen via twitter.com/ArturoRonchi

Advertisements

Author: Rian Rietveld

WordPress Engineer focussing on accessibility

3 thoughts on “Alternatief voor getBoundingBox voor berekenen afstanden met geo-coordinaten”

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s