Hemelsbreed 4 coords..

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Vincent

Vincent

09/08/2007 13:27:00
Quote Anchor link
Yooo Mensen,

K had ff een vraagje voor jullie ;-)
Ik heb een dorp met een x en y coordinaat(waar hij ligt)
Dan wil ik voor marktplaats berekenen welk dorp met aanbod het dicht bij jou ligt en zo een lijst maken, dat dorp dan uiteraard ook een x en y coordinaat. Dus wil ik tussen die plek een hemelsbrede berekening maken. Ik heb alleen geen idee hoe je dat doet, ik heb van alles geprobeerd maar kom er maar niet uit.
Zouden jullie mij klein stukje kunnen helpen met beetje uitleg ofzo, ik vraag niet om heel script maar gewoon uitleg :-D script is ook goed ;-) maar ik weet dat het geen voorkauwhulp.nl is :P

Groeten, Vincent ;-)

Bvd
Gewijzigd op 01/01/1970 01:00:00 door Vincent
 
PHP hulp

PHP hulp

20/04/2024 09:43:23
 
Terence Hersbach

Terence Hersbach

09/08/2007 13:39:00
Quote Anchor link
ik denk dat je je moet verdiepen in de stelling van pietjesgras (AB2 = BC2 + AC2) (2 is kwadraat)

edit: Pythagoras heette die gast
Gewijzigd op 01/01/1970 01:00:00 door Terence Hersbach
 
Arjan Kapteijn

Arjan Kapteijn

09/08/2007 13:43:00
Quote Anchor link
a = x - afstandhemelsbreed
b = x + afstandhemelsbreed
c = y - afstandhemelsbreed
d = y + afstandshemelsbreed

SELECT * FROM tabel WHERE
x = between a and b
and
y = between c and d

(dat is overigens vierkant, maar wel de eenvoudigste oplossing)
Gewijzigd op 01/01/1970 01:00:00 door Arjan Kapteijn
 
Vincent

Vincent

09/08/2007 13:54:00
Quote Anchor link
Terence heb ik op school gehad, ik zal er wel naar kijken :)

Arjan a = x - afstandhemelsbreed. Die afstand wou ik net berekenen :P
 
Jelle -

Jelle -

09/08/2007 14:21:00
Quote Anchor link
wat nou als je eens berekend hoeveel x er verschil is en hoeveel y, dan deze bij mekaar opteld en dan kun je toch op een lijstje komen met welke het dichtst bij zit?
 
Dizzy

Dizzy

09/08/2007 14:22:00
Quote Anchor link
Hier hoort tekeningetje bij :) Afbeelding

dorp1 = Â (hoek A)-> bovenste hoek x1 ; y1
dorp2 = hoek B -> links onder = x2 ; y2

|ac|(vanboven naar onder) = b = y1 - y2

|bc|(links naar rechts) = a = x1 - x2

c = vierkantswortel(|bc|² + |ac|²)
c = vierkantswortel( (x1 - x2)² + (y1 - y2)²)

(c = afstand tussen de 2 dorpen)
Gewijzigd op 01/01/1970 01:00:00 door Dizzy
 
Vincent

Vincent

09/08/2007 17:12:00
Quote Anchor link
Dizzy schreef op 09.08.2007 14:22:
Hier hoort tekeningetje bij :) Afbeelding

dorp1 = Â (hoek A)-> bovenste hoek x1 ; y1
dorp2 = hoek B -> links onder = x2 ; y2

|ac|(vanboven naar onder) = b = y1 - y2

|bc|(links naar rechts) = a = x1 - x2

c = vierkantswortel(|bc|² + |ac|²)
c = vierkantswortel( (x1 - x2)² + (y1 - y2)²)

(c = afstand tussen de 2 dorpen)


Als ik eerlijk mag zijn begrijp ik er niks niet veel van..
Zou je dit tot een php script kunnen omzetten? Dan ga ik allemaal dingen mee proberen en misschien dat ik het dan begrijp?
Beetje rare vraag misschien.. maarja...
 
Hipska BE

Hipska BE

09/08/2007 18:16:00
Quote Anchor link
Vincent, ik heb al een idee,

Ik werk even wat uit voor je. als je even op IRC kanaal komt dan kan je meehelpen ;-)
 
Vincent

Vincent

09/08/2007 18:38:00
Quote Anchor link
Ok tnx! ik kom op chat tnx :)
 
Jelle -

Jelle -

09/08/2007 18:39:00
Quote Anchor link
offtopic:
heeft phphulp een irc kanaal dan?:P
 
Vincent

Vincent

09/08/2007 19:14:00
Quote Anchor link
Neej, je bent ook niet online ofzo.. xD
 
Jelle -

Jelle -

09/08/2007 19:29:00
Quote Anchor link
ja 2 min later gevonden, wat dacht je dan:P
 
PHP erik

PHP erik

09/08/2007 19:48:00
Quote Anchor link
Als je meerdere punten hebt en je wil weten welk het dichtsbij is, dan wil je dus afstand tussen deze twee punten weten. Dit is een lineaire lijn. Het is dus eigenlijk betrekkelijk simpel.

Je berekent het verschil tussen X1 en X2, en tussen Y1 en Y2, waarbij de coördinaten dus de syntax (X1, Y1) en (X2, Y2) hebben.

Als X2-X1 = 0, dan is het verschil gewoon Y2 - Y1 en hoef je geen pythagoras te gebruiken. Het is immers een rechte verticale lijn.
Als Y2-Y1 = 0, dan is het verschil gewoon X2 - X1 en hoef je ook geen pythagoras te gebruiken. Het is immers een rechte horizontale lijn.

Als beide verschillen wel groter of kleiner dan 0 zijn dan zou ik de verschillen allebei omvormen tot positieve getallen. Want negatieve getallen heb je niets aan; het verschil is even groot, of het ene nou links of rechts van het ander ligt.

A² + B² = C²
A = X2 - X1
B = Y2 - Y1

De rest is simpel.
 
Arend a

Arend a

09/08/2007 20:27:00
Quote Anchor link
Of je gebruikt postgresql, die doet het voor je. (even voor de nit-pickerigheid, het gaat om 2 coordinaten. Een coordinaat bestaat uit een x en een y (eventueel ook een z en meer onderdelen wanneer je de 3 dimensies verlaat)).

1: maak een tabel met punten.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE punten (
    naam character varying,
    coordinates point
);

COPY punten (naam, coordinates) FROM stdin;
Plaats A    (0,1)
Plaats A    (0,1)
Plaats B    (500,400)
Plaats C    (800,-900)
Plaats D    (200,-700)
\.


2: SELECT naam, (coordinates <-> point(400,100)) from punten;
Gewijzigd op 01/01/1970 01:00:00 door Arend a
 
Hipska BE

Hipska BE

09/08/2007 20:29:00
Quote Anchor link
Ziezo, klaar: (ik heb even PDO gebruikt om het wat simpel te houden)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php

// lengte tot gekozen dorp bepalen en sorteren welke het dichtst is
$dorpid = (int) $_GET['id'];
$dorp = $db->query('SELECT id,x,y FROM dorpen WHERE id = '.$dorpid,PDO::FETCH_ASSOC)->fetch();
$dorpen = $db->query('SELECT id,naam,SQRT( POW(('.$dorp['x'].'-x),2) + POW(('.$dorp['y'].'-y) ,2) ) as afstand FROM dorpen WHERE id <> '.$dorp['id'].' ORDER BY afstand',PDO::FETCH_ASSOC)->fetchAll();
print_r($dorpen);

?>

Voorbeeld

@Smurf Minions: IRC Kanaal
 
Vincent

Vincent

09/08/2007 20:34:00
Quote Anchor link
Tnx allemaal :D

Ik heb achter de schermen super veel hulp gehad ;-)
Bedankt!
 
Arend a

Arend a

09/08/2007 20:40:00
Quote Anchor link
Overigens, gps coordinaten zijn niet in het platte vlak (mocht je gps coordinaten gebruiken).

Zie ook:
http://www.postcode.nl/index.php?PageID=151


Aangezien de aarde rond dien je deze me te rekenen.


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?
DEFINE (R, 6367000); // Radius of the Earth in meters

//example coordinate of neighborhood 2011 in the Netherlands (Haarlem centrum)

$lat1 = 52.3826;
$lon1 = 4.637;

//example coordinate of neighborhood 6199 in the Netherlands (Maastricht-Airport)
$lat2 = 50.9235;
$lon2 = 5.7812;

//convert degrees to radians
$lat1 = ($lat1 * pi() ) / 180;
$lon1 = ($lon1 * pi() ) / 180;
$lat2 = ($lat2 * pi() ) / 180;
$lon2 = ($lon2 * pi() ) / 180;

//Haversine Formula (see here )
$dlon = $lon2 - $lon1;
$dlat = $lat2 - $lat1;
$a = pow(sin($dlat/2), 2) + cos($lat1) * cos($lat2) * pow(sin($dlon/2), 2);
$intermediate_result = 2 * asin(min(1,sqrt($a)));
$distance = R * $intermediate_result;

echo $distance;
?>
Gewijzigd op 01/01/1970 01:00:00 door Arend a
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.