[ASP] afstand tussen coordinaten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • IceOnFire
  • Registratie: Oktober 2000
  • Niet online
Ik zou graag de afstand willen kunnen berekenen tussen twee GPS-coordinaten. Nu heb ik daar twee handige zaken voor op het web gevonden. Op https://secure.codeproject.com/KB/cpp/distance.aspx staat een mooie formule die geen rekening houd met de kromming van de aarde en op http://www.codeproject.co...ancebetweenlocations.aspx staat de wat uitgebreidere "Haversine formule" die daar wel netjes rekening mee houdt.

Ik probeer het eea in ASP te gebruiken en heb dus een poging gewaagd het eea in VBScript om te proggen, dat ziet er zo uit;

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 Function afstand(Lat1,Lon1,Lat2,Lon2)
   dlat = lat2 - lat1
   dlon = lon2 - lon1
   A = ((Sin(dlat / 2)) * (Sin(dlat / 2))) + Cos(lat1) * Cos(lat2) * ((Sin(dlon / 2)) * (Sin(dlon / 2)))
   C = 2 * Atan2(sqr(A),sqr(1-A))
   d = 6372797 * C
   afstand = d
 End Function

 Function afstand2(Lat1,Lon1,Lat2,Lon2)
   a = sin(lat1) * sin(lat2)
   b = cos(lat1) * cos(lat2) * cos(lon2 - lon1)
   c = acos(a + b)
   d = 6372797 * c
   afstand2 = d
 End Function


De Atan2 en Acos functies zijn niet beschikbaar in VBScript, maar daar heb ik losse functies voor die wiskundig kloppen (kan ik evt op verzoek posten)

De gein is nu dat de uitkomsten totaal niet lijken te kloppen; van (52.070505, 4.294703) tot
(52.070508, 4.294157) wat 37 meter moet zijn komt hij op 808. Dit uiteraard bij alle coordinaten, deze puur even als voorbeeld. Werkelijke afstand valt te berekenen via http://boulter.com/gps/distance/ en kan ik ook op een andere manier nog verifieren.

Beide functies geven wel onafhankelijk van elkaar vrijwel dezelfde uitkomst; 807.800829782821 vs
807.800830910049 dus de een lijkt idd wel ergens iets te compenseren en het klopt an sich wel dat die afwijking op dit soort afstanden erg klein is. Ik doe dus iets consequent verkeerd maar dat dat is.... ik zie het niet.. :'( Iemand ideeen waar ik het kan zoeken?

Acties:
  • 0 Henk 'm!

  • IceOnFire
  • Registratie: Oktober 2000
  • Niet online
En jawel, direct na het posten vind je natuurlijk zelf de oplossing; de coordinaten moeten als radialen opgegeven worden, dus
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Function afstand(Lat1,Lon1,Lat2,Lon2)

   lat1 = lat1 * (3.14159265358979323846/180.0)
   lat2 = lat2 * (3.14159265358979323846/180.0)
   lon1 = lon1 * (3.14159265358979323846/180.0)
   lon2 = lon2 * (3.14159265358979323846/180.0)
   dlat = lat2 - lat1
   dlon = lon2 - lon1
   A = ((Sin(dlat / 2)) * (Sin(dlat / 2))) + Cos(lat1) * Cos(lat2) * ((Sin(dlon / 2)) * (Sin(dlon / 2)))
   C = 2 * Atan2(sqr(A),sqr(1-A))
   d = 6372797 * C
   afstand = d
 End Function

werkt perfect...

Mocht iemand nog eens zoiets zoeken; zo kan dat dus :)

Acties:
  • 0 Henk 'm!

Verwijderd

*het is hier geen code afhaalbalie* Lees aub het beleidstopic eens door

[ Voor 73% gewijzigd door Creepy op 14-03-2008 21:19 ]


Acties:
  • 0 Henk 'm!

  • IceOnFire
  • Registratie: Oktober 2000
  • Niet online
Even voor de volledigheid; ik denk dat je het eea misschien niet helemaal doorgelezen hebt. Ik denk dat je in de startpost toch heel duidelijk kan zien dat ik grondig onderzoek heb gedaan en zelf al aardig goed op weg was (sterker nog, het zelf heb opgelost uiteindelijk magoed)

edit: oh, dat is tegen fhoogendoorn waarschijnlijk en niet fhoogendoorn tegen mij, niks gezegd getikt :)

[ Voor 17% gewijzigd door IceOnFire op 15-03-2008 01:25 ]