Finnes det en måte (helst i Excel) å beregne avstanden (basert på lat, lon) mellom to punktlister?
Mitt endelige mål er for eksempel å ha en liste over Starbucks og en liste over McDonalds, og deretter vise nærmeste nabo, hvis du vil.
Kommentarer
- Jeg ' m på jakt etter minimumsavstand.
- Ved hvilken unet, vil returnere distansen?
- @Jeed Enhver enhet vil være bra, sannsynligvis miles i dette tilfellet.
Svar
Gitt en liste over geografiske koordinatpar, kan du implementere Haversine-formel direkte i Excel.
Den enkleste måten å bruke denne (eller en mer nøyaktig, men jeg tror det ikke er ditt tilfelle) formel består i å trykke Alt+F11
for å åpne VBA Editor, klikk Insert --> Module
og deretter (kopier og) lim inn f.eks. -koden vennlig foreslått av 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
Det vil være en ny tilpasset getDistance
-funksjon (enhet = kilometer) tilgjengelig i regnearket som godtar fire parametrene, dvs. de to parene med koordinater, som følger:
getDistance(latitude1, longitude1, latitude2, longitude2)
der latitude1, longitude1, latitude2, longitude2
skal erstattes av deres relative cellehenvisninger.
Kommentarer
- Direkte lenke: codecodex.com/wiki/…
- @ blah238 Takk for ditt forslag. Jeg ' har lagt til en kort veiledning for å få den til å fungere.
- @afalciano Takk for turen gjennom & kode. Spørsmålet mitt er imidlertid hva som er de ultimate enhetene fra denne ligningen? er det målere?
- @Kerry Det ' s kilometer. Også der formelen sier " Sqr " skal den være " Sqrt ".
- Måleenheten for avstander er kilometer, akkurat som jordens radius.
Svar
En mer nøyaktig måte er å bruke formelen Vicenty. Den er basert på en ellipsoid i stedet for en sfære. Det forrige svaret vil imidlertid gjøre jobben hvis du jobber i en by (forskjeller kan neglisjeres i ditt tilfelle). Jeg har funnet en excel vb-kode her bare i tilfelle.
Vær oppmerksom på at hvis du jobber i en by, kan det være misvisende å bruke avstander med «fugleflukt». Det ville være bedre å bruke nettverksavstander. Et kompromiss er å bruke «Manhattan distance»