Er der en måde (helst i Excel) til at beregne afstanden (baseret på lat, lon) mellem to punkter med punkter?
Mit endelige mål ville f.eks. være at have en liste over Starbucks og en liste over McDonalds og derefter vise den nærmeste nabo, hvis du vil.
Kommentarer
- I ' m på udkig efter mindsteafstand.
- Ved hvilken unet vil returnere afstanden?
- @Jeed Enhver enhed ville være fin, sandsynligvis miles i dette tilfælde.
Svar
Givet en liste over geografiske koordinatpar kan du implementere Haversine-formel direkte i Excel.
Den enkleste måde at bruge denne (eller en mere nøjagtig, men jeg tror ikke, det er ikke din sag) formel består i at trykke Alt+F11
for at åbne VBA Editor, skal du klikke på Insert --> Module
og derefter (kopiere og) indsætte f.eks. -koden bedes foreslået af blah238.
Public Function getDistance(latitude1, longitude1, latitude2, longitude2) earth_radius = 6371 Pi = 3.14159265 deg2rad = Pi / 180 dLat = deg2rad * (latitude2 - latitude1) dLon = deg2rad * (longitude2 - longitude1) a = Sin(dLat / 2) * Sin(dLat / 2) + Cos(deg2rad * latitude1) * Cos(deg2rad * latitude2) * Sin(dLon / 2) * Sin(dLon / 2) c = 2 * WorksheetFunction.Asin(Sqr(a)) d = earth_radius * c getDistance = d End Function
Der vil være en ny tilpasset getDistance
-funktion (enhed = kilometer) tilgængelig i dit regneark, som accepterer fire parametre, dvs. de to par koordinater, som følger:
getDistance(latitude1, longitude1, latitude2, longitude2)
hvor latitude1, longitude1, latitude2, longitude2
skal erstattes af deres relative cellehenvisninger.
Kommentarer
- Direkte link: codecodex.com/wiki/…
- @ blah238 Tak for dit forslag. Jeg ' har tilføjet en kort vejledning for at få det til at fungere.
- @afalciano Tak for turen gennem & kode. Mit spørgsmål er dog, hvad er de ultimative enheder fra denne ligning? er det målere?
- @Kerry Det ' s kilometer. Når formlen siger " Sqr ", skal den også være " Sqrt ".
- Måleenheden for afstande er kilometer, ligesom jordens radius.
Svar
En mere nøjagtig måde er at bruge formlen Vicenty “. Den er baseret på en ellipsoid i stedet for en sfære. Det forrige svar vil dog gøre jobbet, hvis du arbejder i en by (forskelle kan negligeres i dit tilfælde). Jeg har fundet en excel vb-kode her bare i tilfælde.
Bemærk, at hvis du arbejder i en by, kan det være vildledende at bruge “fugleflyvning”. Det ville være bedre at bruge netværksafstande. Et kompromis er at bruge “Manhattan afstand”