[alg]afstand tussen 2 coord. op aarde berekenen

Pagina: 1
Acties:
  • 1.671 views sinds 30-01-2008
  • Reageer

  • glrfndl
  • Registratie: Juni 1999
  • Niet online
Zit al een tijdje te zoeken hoe ik de afstand tussen 2 punten op aarde kan berekenen als de coordinaten daarvan bekend zijn. De coordinaten heb ik in de vorm van een latitude en longitude (noorderbreedte, oosterlengte), maar ik zou niet weten hoe ik aan de hand hier van de afstand kan berekenen. Het programmeren zelf is het probleem niet, maar het algoritme bedenken lukt niet, al helemaal niet als ik er rekening mee wil houden dat de aarde niet helemaal rond is. Dus als iemand enig idee heeft, graag :)
In eerste instantie zou het ook wel goed genoeg zijn om er van uit te gaan dat de aarde wel helemaal rond is (liever niet natuurlijk :))

Prepare for unforeseen consequences


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 04:55
In het geval van de bol: de absolute coordinaten ten opzichte van de oorsprong uitrekenen (waarbij je bijvoorbeeld uitgaat van een bol met straal 1.0, hoewel dat er eigenlijk niet toe doet). Beschouw deze punten als vectoren vanuit de oorsprong. Nu kun je de hoek tussen deze twee punten berekenen; daar is een standaardformule voor die wel met Google of GoT-search te vinden is.

De afstand over de bol (waarin je geinteresseert bent, neem ik aan) is nu de gevonden hoek in radialen vermenigvuldigt met de straal van de bol (de aarde).

(Al kladpapier erbij gehad?)

edit:
Even een rekenfoutje verbeterd.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09:09

Janoz

Moderator Devschuur®

!litemod

Op woensdag 03 april 2002 17:08 schreef Soultaker het volgende:
Nu kun je de hoek tussen deze twee punten berekenen; daar is een standaardformule voor die wel met Google of GoT-search te vinden is.
*kuch*inprodukt*kuch*

:+

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

edit:
lezen voor je post

Stop uploading passwords to Github!


  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Op woensdag 03 april 2002 17:40 schreef papa_eend het volgende:
erhmm...

ik wil niet de sfeer verpesten, maar de aarde is ovaal bol, niet precies bol :P
:D

  • j_du_pee
  • Registratie: Maart 2000
  • Laatst online: 23-09-2024

j_du_pee

du pain, du vin, du pee

De aarde is plat! anders zouden we er vanaf vallen :)

maar met zoeken op: distance coordinates earth formula op google, vond ik deze link:

http://www.fes.uwaterloo.ca/crs/geog165/gcoords.htm

waar een formule en een voorbeeld staan voor deze berekening ;)

kaart != map && bottel != fles
Wacht op antwoord


Verwijderd

Ik heb wel een spreadsheet voor je, wat min of meer dat doet.

groet.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21-12 21:53

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op woensdag 03 april 2002 17:40 schreef papa_eend het volgende:
erhmm...

ik wil niet de sfeer verpesten, maar de aarde is ovaal bol, niet precies bol :P
nou nee, eigenlijk is het meer een ei-vorm :P

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

En ik maar lopen en lopen totdat ik bij de horizon zou komen......

Verwijderd

De aarde is rond, net als een pannenkoek :P

Maar nog iets, wil je de afstand in een rechte lijn, of over het oppervlak?

  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 09:22

Knutselsmurf

LED's make things better

Op woensdag 03 april 2002 19:05 schreef OiSyN het volgende:

[..]

nou nee, eigenlijk is het meer een ei-vorm :P
En met pasen issie vrolijk geschilderd... :)

Maar nu ontopic. Het inproduct tussen twee genormaliseerde vectoren is gelijk aan de cosinus van de hoek tussen die vectoren. En hoek*straal=afstand.

- This line is intentionally left blank -


  • EXX
  • Registratie: Juni 2001
  • Laatst online: 21-12 16:08

EXX

EXtended eXchange

Er bestaat een universeel coordinaten-systeem voor de aarde. Het maakt gebruik van een elipsoide en het systeem heet WGS84 (World Geodetic System). Het wordt ook gebruikt in bv. de luchtvaart. Dit ondervangt het probleem van de niet ronde (patatoide ;) ) aarde enigzins.

Meer info op www.wgs84.com

For it is the doom of men that they forget...           Huidige en vroegere hardware specs         The Z80 is still alive!


Verwijderd

Op woensdag 03 april 2002 20:13 schreef Cheatah het volgende:
De aarde is rond, net als een pannenkoek :P
<off topic>
Dat heb je van Herman Finkers
</off topic>

  • xentric
  • Registratie: Maart 2002
  • Laatst online: 15-08-2012
Met een grootcirkel formuletje en een rekenmachine moet
je een eind komen:

cos d = (sin a)*(sin b) + (cos a)*(cos b)*(cos c)

d = de afstand
a = latitude van A
b = latitude van B
c = longitudinaal verschil tussen A en B

Als er een ding groter is dan het heelal, dan is het de menselijke verbeelding...


  • xentric
  • Registratie: Maart 2002
  • Laatst online: 15-08-2012
BTW, als je een proggy wilt maken heb je hier meer aan denk ik:

Q. What is the formula to compute the distance over the surface of the Earth between two points, from their lattitude and longitude?

A. This is known as a Great Circle distance. Dutton's Navigation and Piloting, 14th Edition, by Elbert S. Maloney (1985, United States Naval Institute, ISBN 0-87021-157-9), presents the formula to compute Great Circle distances. The values used in the formula are:

Lat1, Lon1: latitude and longitude of origin, in degrees
Lat2, Lon2: latitude and longitude of destination, in degrees.

The actual formula is:


D = 60 * arccos[ sin(Lat1)*sin(Lat2) + cos(Lat1)*cos(Lat2)*cos(abs(Lon1-Lon2))]
The resulting value of D is the Great Circle distance in nautical miles.

If the origin and destination are on different sides of the equator, insert Lat2 as a negative value in the calculation.

Als er een ding groter is dan het heelal, dan is het de menselijke verbeelding...


  • windancer
  • Registratie: Maart 2000
  • Laatst online: 09-12 13:08
Op woensdag 03 april 2002 21:19 schreef xentric het volgende:
[...]

D = 60 * arccos[ sin(Lat1)*sin(Lat2) + cos(Lat1)*cos(Lat2)*cos(abs(Lon1-Lon2))]
The resulting value of D is the Great Circle distance in nautical miles.

[..]
Okay, uit de hele arccos[] komt een getal tussen 0 en Pi. Dit zou betekenen dat twee punten nooit meer dan ongeveer 190 nautical miles van elkaar verwijderd is.

  • eborn
  • Registratie: April 2000
  • Laatst online: 20-12 21:49
Ik had laatst een mooi perl scriptje dat deze berekening maakt. Je gaf 'm gewoon die twee long/latitides en hoppa. Ik zal eens kijken of ik het kan vinden voor je.

/edit: damn het stond dus in mijn /tmp directory :( Kijk anders hier eens, volgens mij ben ik er via-via deze site gekomen: http://www.nima.mil/gns/html/cntry_files.html

  • glrfndl
  • Registratie: Juni 1999
  • Niet online
tnx iedereen, ik kom er zo wel uit.
Okay, uit de hele arccos[] komt een getal tussen 0 en Pi. Dit zou betekenen dat twee punten nooit meer dan ongeveer 190 nautical miles van elkaar verwijderd is.
nee, je moet de hoek eerst naar graden omzetten.

Verder is het nog problematisch dat ik geen gebruik kan maken van de java.lang.Math methodes sin, cos en acos. Deze zal ik zelf moeten definieren omdat de jvm die ik gebruik deze niet ondersteunt. Ben al bezig mbv Taylor reeksen die functies na te maken, alleen acos lukt nog niet ;(
Zie het verband tussen de getallen niet :(

Misschien dat iemand deze 2 reeksen kan aanvullen? :)

1, 3, 5, 35, ...
6, 40, 112, 1152. ...

gaat om deze formule:
code:
1
2
3
4
                    3   5   7    9
             %PI     X    3 X    5 X    35 X
             --- - X - -- - ---- - ---- - ----- + . . .
              2   6     40    112    1152

hoe verder je deze formule uitbreidt, hoe dichter je acos benadert. Ik moet nog even een paar lagen verder, want het is nog niet nauwkeurig genoeg voor mijn toepassing.

Prepare for unforeseen consequences


  • ajvdvegt
  • Registratie: Maart 2000
  • Laatst online: 04-12 20:27
Hier staat wat nuttig info. Waarschijnlijk probeer je de acos van iets dicht bij 1 te berekenen, dan convergeert die taylor reeks langzaam (x^9 is normaal genoeg voor hoge nauwkeurigheid).
Oplossing: bereken de acos van 1 min die hoek, en gebruik de formule sqrt(1-x^2) om de acos terug te rekenen.

Enneh... dit is prima te vinden met bv. google hoor.

I don't kill flies, but I like to mess with their minds. I hold them above globes. They freak out and yell "Whooa, I'm *way* too high." -- Bruce Baum


  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 18-12 23:33
Op donderdag 04 april 2002 21:30 schreef jnijboer het volgende:
Verder is het nog problematisch dat ik geen gebruik kan maken van de java.lang.Math methodes sin, cos en acos. Deze zal ik zelf moeten definieren omdat de jvm die ik gebruik deze niet ondersteunt. Ben al bezig mbv Taylor reeksen die functies na te maken, alleen acos lukt nog niet ;(
Zie het verband tussen de getallen niet :(
Is het voor een embedded systeem ofzo?

  • glrfndl
  • Registratie: Juni 1999
  • Niet online
bedankt voor die link, daar staat voor acos dat je iets met sqrt moet doen, helaas heb ik die ook niet tot mijn beschikking en die zal ook weer via een Taylor benadering berekend moeten worden. Dat komt de snelheid en nauwkeurigheid niet echt ten goede ben ik bang. Het gaat trouwens inderdaad in de buurt van acos(1) mis, moet denk ik die taylorbenadering nog wat uitbreiden, maar heb geen idee hoe die reeks verder gaat.

Het is idd voor een embedded Java systeempje.

Prepare for unforeseen consequences


  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 09:22

Knutselsmurf

LED's make things better

Op donderdag 04 april 2002 21:30 schreef jnijboer het volgende:
tnx iedereen, ik kom er zo wel uit.
[..]

nee, je moet de hoek eerst naar graden omzetten.

Verder is het nog problematisch dat ik geen gebruik kan maken van de java.lang.Math methodes sin, cos en acos. Deze zal ik zelf moeten definieren omdat de jvm die ik gebruik deze niet ondersteunt. Ben al bezig mbv Taylor reeksen die functies na te maken, alleen acos lukt nog niet ;(
Zie het verband tussen de getallen niet :(

Misschien dat iemand deze 2 reeksen kan aanvullen? :)

1, 3, 5, 35, ...
6, 40, 112, 1152. ...

gaat om deze formule:
code:
1
2
3
4
                    3   5   7    9
             %PI     X    3 X    5 X    35 X
             --- - X - -- - ---- - ---- - ----- + . . .
              2   6     40    112    1152

hoe verder je deze formule uitbreidt, hoe dichter je acos benadert. Ik moet nog even een paar lagen verder, want het is nog niet nauwkeurig genoeg voor mijn toepassing.
Volgens mij kan je met pythagoras en ATAN, die volgens mij standaard aanwezig is (In Pascal iig, waarschijnlijk in java ook wel) de ACOS uitrekenen.

Uit het polytechnisch zakboekje:

ASIN(x)+ACOS(x)=pi/2
ASIN(x)=ATAN(x/(sqrt(1-x^2)))

Daarmee kan je ACOS(x) wel uitrekenen......

Reeksen zijn in dit geval dus niet nodig.....
edit:

Lees net dat je SQRT ook niet hebt. Daarvoor zal je dan een benadering moeten gebruiken. Heb je wel de beschikking over de ATAN-functie?

- This line is intentionally left blank -


  • glrfndl
  • Registratie: Juni 1999
  • Niet online
Nee, tan en atan werken ook niet. Maar als ik die Taylor reeks wat kan uitbreiden moet het daar ook mee lukken.

Prepare for unforeseen consequences


  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 09:22

Knutselsmurf

LED's make things better

Op vrijdag 05 april 2002 13:07 schreef jnijboer het volgende:
Nee, tan en atan werken ook niet. Maar als ik die Taylor reeks wat kan uitbreiden moet het daar ook mee lukken.
Algemene vorm van taylorreeks van ACOS(x) = -(a*x^n)/b met n oneven en daar de som over van 0..zover als je wilt. En dan pi/2 er bij optellen.
ik kom op de volgende coefficienten a en b:
code:
1
2
3
4
5
6
7
8
9
10
n   a    b
1   1    1
3   1    6
5   3   40
7   5     112
9     35    1152  
11    63    2816
13   231   13312
15   143   10240
17  6435  557056

Volgens mij moet je daar een heel eind mee komen.
x tussen -1 en 1 levert een hoek tussen 0 en pi

- This line is intentionally left blank -


  • Anders
  • Registratie: December 2000
  • Laatst online: 15-12 21:01
Ik kom toevallig net het volgende tegen (PHP):

http://sourceforge.net/snippet/detail.php?type=snippet&id=100060

This function takes two Latitude and Longitude pairs and returns the distance in miles.
PHP:
1
<?function Lat_Lon_to_Miles($lat1, $lon1, $lat2, $lon2) {$dist = acos(sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($lon1 - $lon2)));$dist = rad2deg($dist);$miles = $dist * 69;$miles = sprintf("%0.1f",$miles);return $miles;}?>

Niet getest, overigens

Ik spoor veilig of ik spoor niet.


  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 09:22

Knutselsmurf

LED's make things better

Op vrijdag 05 april 2002 15:51 schreef Anders het volgende:
Ik kom toevallig net het volgende tegen (PHP):

http://sourceforge.net/snippet/detail.php?type=snippet&id=100060

This function takes two Latitude and Longitude pairs and returns the distance in miles.
PHP:
1
<?function Lat_Lon_to_Miles($lat1, $lon1, $lat2, $lon2) {$dist = acos(sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($lon1 - $lon2)));$dist = rad2deg($dist);$miles = $dist * 69;$miles = sprintf("%0.1f",$miles);return $miles;}?>

Niet getest, overigens
Helaas heeft de topicstarter geen beschikking over goniometrische functies

- This line is intentionally left blank -


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 21-09 16:54

Goodielover

Only The Best is Good Enough.

Het moet niet in PHP maar het is embedded code. de arc functies heeft hij niet tot z'n beschikking.

  • Anders
  • Registratie: December 2000
  • Laatst online: 15-12 21:01
Ja klees het ook net, excuses voor m'n onoplettendheid.

Ik spoor veilig of ik spoor niet.


  • glrfndl
  • Registratie: Juni 1999
  • Niet online
np, alle hulp is welkom, maar ik moet een heel eind kunnen komen met de reeks die knutselsmurf een paar posts eerder heeft gegeven.

tnx iedereen! :)

Prepare for unforeseen consequences


  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 09:22

Knutselsmurf

LED's make things better

Op vrijdag 05 april 2002 21:38 schreef jnijboer het volgende:
np, alle hulp is welkom, maar ik moet een heel eind kunnen komen met de reeks die knutselsmurf een paar posts eerder heeft gegeven.

tnx iedereen! :)
Als je een exactere reeks nodig hebt, moet je het ff melden. Kost een paar seconden tijd om extra termen te berekenen.......

- This line is intentionally left blank -

Pagina: 1