Uitrekenen of plaatsen met een co�rdinaat zich in een bepaalde cirkel bevinden

Status
Niet open voor verdere reacties.

blackeagle67

Gebruiker
Lid geworden
13 okt 2009
Berichten
158
Hallo,

Jullie kennen het vast wel.Je zoekt een vacature en het bedrijf mag zich niet verder dan een bepaalde straal bevinden.
Voorbeeld: http://www.nationalevacaturebank.nl/

Nu wil/moet ik een zelfde soort systeem maken. Maar ik heb geen idee hoe ik dit moet aanpakken.
Mijn collega zegt dat hij wel de scripts voor mij heeft om coordinaten van google maps af te halen en deze in de database te zetten waarin alle plaatsen van Nederland al reeds in staan.
Nu moet ik zeg maar de afstand gaan berekenen van het midden van de cirkel tot de rand.
Dit heb ik wel gevonden: Bereken afstand tussen 2 coordinaten.
Hiervoor moet ik wel weten waar die 2e coordinaat is en eigenlijk moet ik werken met een straal. Dus ik moet eerst de straal omzetten in een bepaalde co�rdinaat

Op de manier hierboven heb ik zeg maar 1 lijntje maar moet dus een hele cirkel hebben. Weten jullie misschien een manier hoe dit te doen is?
Een vierkant kan ik waarschijnlijk ook nog wel doen. Aangezien als je die afstand hebt en je dus noord, oost, zuid en west kunt pakken en dan kunt zeggen langtitude niet hoger dan (coordinaat("langtitude") + afstand("langtitude")) en lang niet lager dan (coprdinaat("langtitude") + afstand("langtitude")) en zelfde geld voor longtitude. maar dan krijg je dus een vierkant en geen cirkel.
 
Laatst bewerkt:
Is een klein stukje wiskunde :)

Een cirkel heeft overal dezelfde afstand tot het middelpunt; je zoekt dus alle punten met een afstand tussen A en B van X kilometer of minder. Om de afstand te bepalen op een coördinaat vlak kun je de stelling van Pythagoras gebruiken door een rechthoekige driehoek te tekenen op het stelsel; de schuine zijde is dan de hemelsbrede afstand tussen de punten.

Je kunt de lengte van de twee rechte zijden bepalen door de X en Y coördinaat van het ene punt af te trekken van de X en Y coördinaat van het andere punten; met die twee lengten kun je vervolgens de afstand bepalen via Pythagoras door C^2 = A^2 + B^2 te gebruiken.

Als het antwoord daarvan (je afstand) kleiner is dan de opgegeven afstand, ligt het dichtbij genoeg. Door dit uit te rekenen voor elke stad in je database kun je vervolgens bepalen welke er dicht bij genoeg liggen.
 
http://code.google.com/apis/maps/articles/phpsqlsearch.html

Een aardig uitgebreide SQL-query welke de afstand tussen punten rekent:
[sql]
SELECT
id,
( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance
FROM markers
HAVING distance < 25
ORDER BY distance
LIMIT 0 , 20
[/sql]
 
De beste manier is die van Tha Devil, namelijk omdat de aarde niet plat is mag je niet zomaar de stelling van pythagoras gebruiken. Je hebt daarvoor de haversine formule nodig.

Neem het volgende plaatje:

great-circle.png


Hoewel de onderste route korter lijkt is het in werkelijkheid de bovenste die het kortst is. En dat is de afstand die de formule van Tha Devil uitrekent.

(ik moet er wel bij zeggen dat het op korte afstanden natuurlijk niet zo drastisch veel uitmaakt)
 
Goed punt van de kromming van de aarde, ik ging uit van korte afstanden voor mijn berekening; sowieso niet meer dan een indicatie (100km hemelsbreed zegt heel weinig over hoe ver het is om er heen te gaan) van afstand.
 
Ehm sorry ik ben niet geheel duidelijk geweest over de radius van de postcodes.
Het zal alleen van toepassing zijn in Nederland.
Nu wil ik dus dat als iemand een postcode invoert en een straal heeft aangegeven ik kan bepalen welke bedrijven zich in de oppervlakte van die cirkel bevinden.
Stel nu zoals op het plaatje dat iemand aan heeft gegeven dat hij/zij met betreffende postcode in Arnhem woont en een schaal van ong. 20/30 km heeft aangegeven. Dan denk ik dus dat ik moet bepalen wat de uiterste coördinaten zijn en dan kijken in de database welke bedrijven met hun coördinaten binnen die cirkel vallen.

Maar hoe bepaal ik dus wat de uiterste coordinaten van de cirkel zijn?

nederlandgrootstesteden.gif
 
Laatst bewerkt:
Je pakt het verkeerd aan. Het gaat niet om de ring met coördinaten. Eigenschap van cirkels: alle punten op de cirkel bevinden zich op afstand X van het middelpunt. Het middelpunt is de zoeklocatie. Dus, bereken de afstand tot alle bedrijven (met pythagoras voor redelijk accuraatheid of met die andere functies voor betere accuraatheid) en pak alle bedrijven waar afstand < 20.

De coördinaten zijn helemaal niet relevant voor je probleem.
 
Hé bedankt Frats :thumb::thumb:

Ja dan denk je erover na en dan ben je net een paard met oogkleppen, je denkt maar in 1 richting.
Idd zo zou ik het kunnen doen. Moet ik nog ff kijken welke methode dan het beste is ivm kromming van aarde waarik ook nog niet zo heel erg over had nagedacht :o.

Thx. Ik laat de thread nog ff open aangezien ik nog op t moment ergens anders mee bezig ben en dat ff af wil krijgen.
En miss dat ik later nog vragen heb.

Maar alvast bedankt
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan