Hallo, ik heb een lijst met alle steden van nederland, hierbij heb ik ook de geocodes dus de lengte en breedte graden van een stad.

Nu heb ik een vraagje. Is er iemand die mij kan uitleggen hoe ik een functie kan schrijven zodat als ik hengelo selecteer en een straal van 10 kilometer
Dat ik dan alle steden die binnen een straal van 10 kilometer liggen weergegeven worden??

Misschien dat iemand hier een voorbeeld bij kan geven. Het mag eventueel ook een vierkant zijn rond de stad. weet niet wat makkelijker is.

breedte graat van hengelo = 6.8
lengtegraad = 52,2667
voor de mensen die dat altijd al hebben willen weten ;)

groetjes Gijs
Ben ik weer! Een functie die de afstand tussen twee punten berekent zou er zo uit kunnen zien:

<?php

<?php
function afstand ($x1, $y1, $x2, $y2) {
$a = abs ($x1 - $x2);
$b = abs ($y1 - $y2);

$c = pow ($a, 2) + pow ($b, 2);
$c = number_format (sqrt ($c), 1);

return $c;
}
?>

Je loopt dan gewoon de hele array met plaatsnamen af en laat die functie er op los.

Om het proces te versnellen, zou je nog een extra check kunnen doen.

Stel dat abs ($x1 - $x2) of abs ($y1 - $y2) al groter is dan 10 km. Dan kun je meteen verder met de volgende in de lijst. Dat zou je dus in je code in kunnen bouwen.
/me gaat even een bassis cursus navigatie gegeven.

Je hebt 2 verschillende soorten cirkels
1. Een groot cirkel. Een lijn die de aarde in 2 helften deelt
2. Een klein cirkel Die de aarde in 2 ongeleike delen deelt.

De definitie van een de mijl (Nautische mijlen) is 1 minuut op een groot cirkel

Dit geld eigelijk ook op de klein cirkel


Op de aarde komt 1 mijl gemiddeld over een met 1,852 km (Bij de polen veel kleiner bij de evennaar groter)

Ohja bolgenomica is leuk ;)

Kasper schreef op 29.10.2005 22:55
[quote=Eris schreef op 29.10.2005 22:21]Kasper daar vergis je aardig in

1 graad op de evennaar is 200 % groter dan in Nederland

LOL, dan is Nederland een stuk kleiner dan ik dacht! Of die graden liggen verder uit elkaar dan ik dacht...maar hoe zit het dan met minuten en secondes, of heeft dat hier niks mee te maken?

Edit:
Dus Nederland is maar 30 mijl breed lang (volgens het plaatje)?! Zijn dat zeemijlen of luchtmijlen of...??
Maar aan onderstaand plaatje te zien maakt het wel degelijk uit waar je je op het bolletje bevindt:
[limg]http://www.urania.be/sterrenkunde/images/coordinaten-aarde.png[/limg][/quote]

Hellaas gaat dat ook niet op ;)
stukje gequote

Op de aarde komt 1 mijl gemiddeld over een met 1,852 km (Bij de polen veel kleiner bij de evennaar groter)

Dus dan had ik tóch een béétje gelijk met die afwijking :) Overigens, waarom bestaan er verschillende mijlen? In Word gaf het conversieprogramma aan dat 1 mijl gelijk staat aan 1,61km, en de luchtmijl is - dacht ik - ongeveer 0,8 keer zo ver als de km. Dan heb je nog de gewone mijl, maar die zal gelijk zijn aan 1,852km :)
Zou de luchtmijl (niet) langer (moeten) zijn omdat de inhoud van de bol groter is, waardoor de lijnen verder uit elkaar gerekt worden bedenk ik me net? Of heeft dat er niks mee te maken?

nog een stukje quote

Ohja bolgenomica is leuk ;)

/me gaat zich er wat in verdiepen. /me vindt dat wel interessant :)

laatste quoteje

Hellaas gaat dat ook niet op ;)

Verklaart u nader!
Want 30 * 1,852 = 55,56 km lijkt me wat weinig voor de 'breedte' van Nederland? En op dat plaatje zie ik toch echt dat een graad daar korter moet zijn dan op de evenaar? Maar dan klopt:

De definitie van een de mijl (Nautische mijlen) is 1 minuut op een groot cirkel

Dit geld eigelijk ook op de klein cirkel

dat weer niet? Waarom (niet)? :S
Het was wel een uitdaging en ik weet nie 100% of die klopt maar volgens mij wel! (Al die waardes heb ik uit de hierbovenstaande Url's gehaald)

<?
function afstand($breedte_graad1, $lengte_graad1, $breedte_graad2, $lengte_graad2)
{
$afstand_x = (cos(deg2rad($breedte_graad1)) * 40074) - (cos(deg2rad($breedte_graad2)) * 40074);
$afstand_x = abs($afstand_x) / 2;

$afstand_y = (($lengte_graad1 - $lengte_graad2) * (40074 / (360 * 60)) * 60);
$afstand_y = abs($afstand_y);

$afstand_totaal = pow($afstand_x, 2) + pow($afstand_y, 2);
$afstand_totaal = number_format(sqrt($afstand_totaal), 2, ',', '.');
return $afstand_totaal. " Km";
}

echo afstand("5", "54,276799", "7", "51,276799");
?>

Edit:
Voorbeeld http://php.ferket.net/afstand.php

Volgens mij werkt die aardig goed :D
Ja hij klopt! Als ik coordienaten van de noord en zuidpool opgeef kom ik op 20.037,00 Km wat de helft van de aarde is. Duz hij klopt :P
Thanks voor de hulp. ben blij dat sommige mensen het leuk vonden om naar dit probleem te kijken. ik ben goed geholpen. bedankt hier voor
Ik weet dat dit een oud script is, maar als ik meer afstanden wil weten:

<?
function afstand($breedte_graad1, $lengte_graad1, $breedte_graad2, $lengte_graad2)
{
$afstand_x = (cos(deg2rad($breedte_graad1)) * 40074) - (cos(deg2rad($breedte_graad2)) * 40074);
$afstand_x = abs($afstand_x) / 2;

$afstand_y = (($lengte_graad1 - $lengte_graad2) * (40074 / (360 * 60)) * 60);
$afstand_y = abs($afstand_y);

$afstand_totaal = pow($afstand_x, 2) + pow($afstand_y, 2);
$afstand_totaal = number_format(sqrt($afstand_totaal), 2, ',', '.');
return $afstand_totaal. " Km";
}

echo afstand("5.85562", "50.88590", "5.83014", "50.86261");
echo afstand("5.85562", "50.88590", "5.68726", "50.84985");
?>

Hoe kan ik deze dan sorteren op afstand, beginnen bij laag en dan oploppend, en dan bijvoorbeeld een limiet bij maximaal 10 weergaves.

Reageren