Jak obliczyć odległość między dwiema współrzędnymi GPS (używając szerokości i długości geograficznej)?
math
geolocation
geometry
latitude-longitude
geography
nicudotro
źródło
źródło
Odpowiedzi:
Oblicz odległość między dwiema współrzędnymi według szerokości i długości geograficznej , w tym implementacji Javascript.
Zachód i południowe są ujemne. Pamiętaj, że minuty i sekundy są poza 60, więc S31 30 'wynosi -31,50 stopnia.
Nie zapomnij przekonwertować stopni na radiany . Wiele języków ma tę funkcję. Lub jego kalkulacja prosta
radians = degrees * PI / 180
.Oto kilka przykładów użycia:
źródło
Number.prototype.toRad = function() { return this * (Math.PI / 180); };
. Lub, jak wskazano poniżej, możesz zastąpić(Math.PI/2)
0,0174532925199433 (... dowolną precyzję, którą uznasz za niezbędną) dla zwiększenia wydajności.R
zwykle oznacza matematyka, a następnie wyszukaj odpowiednie ilości związane z Ziemią, aby sprawdzić, czy liczby się zgadzają.earthRadiusKm
navar earthRadiusMiles = 3959;
fyi.Szukaj haversine w Google; oto moje rozwiązanie:
źródło
Wersja C # Haversine
Oto skrzypce .NET tego rozwiązania , dzięki czemu możesz go przetestować za pomocą własnych Lat / Longs.
źródło
Wersja Java algorytmu Haversine na podstawie odpowiedzi Romana Makarowa na ten wątek
źródło
0.07149
km, podczas gdy twoja formuła dała mi0.07156
dokładność około 99%Jest to bardzo łatwe do zrobienia z typem geograficznym w SQL Server 2008.
4326 jest SRID dla elipsoidalnego modelu Ziemi WGS84
źródło
Oto funkcja Haversine w Pythonie, której używam:
źródło
To zależy od tego, jak dokładna powinna być, jeśli potrzebujesz dokładnej dokładności, najlepiej spojrzeć na algorytm wykorzystujący elipsoidę, a nie kulę, taką jak algorytm Vincenta, który jest dokładny do mm. http://en.wikipedia.org/wiki/Vincenty%27s_alameterm
źródło
Tutaj jest w C # (lat i long w radianach):
Jeśli twoje łat i long są w stopniach, podziel przez 180 / PI, aby zamienić na radiany.
źródło
Musiałem obliczyć wiele odległości między punktami dla mojego projektu, więc poszedłem dalej i spróbowałem zoptymalizować kod, który znalazłem tutaj. Przeciętnie w różnych przeglądarkach moja nowa implementacja działa 2 razy szybciej niż najbardziej pozytywna odpowiedź.
Możesz grać z moim jsPerf i zobaczyć wyniki tutaj .
Ostatnio musiałem zrobić to samo w Pythonie, więc oto implementacja Pythona :
I dla kompletności: Haversine na wiki.
źródło
Wersja PHP:
(Usuń wszystkie,
deg2rad()
jeśli współrzędne są już w radianach.)źródło
Funkcja T-SQL, której używam do wybierania rekordów według odległości dla centrum
źródło
Jeśli potrzebujesz czegoś dokładniejszego, spójrz na to .
źródło
I. W odniesieniu do metody „bułki tartej”
Poniżej zobacz funkcję w C, która uwzględnia nr 1 i nr 2:
II. Jest prostszy sposób, który daje całkiem dobre wyniki.
Według średniej prędkości.
Trip_distance = Trip_average_speed * Trip_time
Ponieważ prędkość GPS jest wykrywana przez efekt Dopplera i nie jest bezpośrednio związana z [Lon, Lat], można ją przynajmniej uznać za wtórną (tworzenie kopii zapasowych lub korekcję), jeśli nie jako główną metodę obliczania odległości.
źródło
Jeśli używasz platformy .NET, nie należy ponownie zakładać koła. Zobacz System.Device.Location . Podziękowania dla fnx w komentarzach w innej odpowiedzi .
źródło
Ten kod Lua został zaadaptowany z materiałów znalezionych w Wikipedii oraz w narzędziu GPSbabel Roberta Lipe'a :
źródło
źródło
To jest wersja z „Henry Vilinskiy” dostosowana do MySQL i Kilometrów:
źródło
MySQL
powiedziałSomething is wrong in your syntax near '' on line 8
// declare distance float;
oto implementacja Swift od odpowiedzi
źródło
wybrałem najlepszą odpowiedź i użyłem jej w programie Scala
Curryję tę funkcję, aby móc łatwo tworzyć funkcje, które mają jedną z dwóch ustalonych lokalizacji i wymagają tylko pary lat / lon do wytworzenia odległości.
źródło
Chyba chcesz tego wzdłuż krzywizny ziemi. Twoje dwa punkty i środek ziemi znajdują się na płaszczyźnie. Środek ziemi jest środkiem koła na tej płaszczyźnie, a dwa punkty znajdują się (z grubsza) na obwodzie tego koła. Na tej podstawie możesz obliczyć odległość, sprawdzając, jaki jest kąt od jednego punktu do drugiego.
Jeśli punkty nie są tej samej wysokości lub jeśli musisz wziąć pod uwagę, że ziemia nie jest idealną kulą, staje się ona nieco trudniejsza.
źródło
Niedawno musiałem zrobić to samo. Okazało się, że ta strona internetowa jest bardzo pomocna w wyjaśnianiu sferycznych wyzwalaczy za pomocą przykładów, które były łatwe do naśladowania.
źródło
implementację tego (z dobrym wyjaśnieniem) znajdziesz w F # on fssnip
Oto ważne części:
źródło
Musiałem zaimplementować to w PowerShell, mam nadzieję, że może pomóc komuś innemu. Kilka uwag na temat tej metody
Używam Haversine, jak zauważyły inne posty, formuły Vincenta są znacznie bardziej dokładne
źródło
Wersja Scala
źródło
// Może błąd literowy?
Mamy nieużywaną zmienną dłoń w GetDirection,
Zakładam
Powinien być
źródło
Oto moja implementacja w Elixir
źródło
Wersja Dart
Algorytm Haversine.
źródło
Myślę, że wciąż brakuje wersji algorytmu w języku R :
źródło
Oto wariant Kotlina:
źródło