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;
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?
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..