Jeśli mam odczyt szerokości lub długości geograficznej w standardowym formacie NMEA, czy istnieje łatwy sposób / wzór na konwersję tego odczytu na liczniki, które mogę następnie zaimplementować w Javie (J9)?
Edycja: Ok wydaje się, że to, co chcę zrobić, nie jest łatwe , jednak naprawdę chcę zrobić:
Powiedzmy, że mam szerokość i długość punktu nawigacyjnego oraz szerokość i długość użytkownika. Czy istnieje łatwy sposób na ich porównanie, aby zdecydować, kiedy powiedzieć użytkownikowi, że znajdują się w rozsądnej odległości od punktu nawigacyjnego? Zdaję sobie sprawę, że rozsądek jest tematem, ale czy jest to łatwe do wykonania, czy nadal jest przesadnie matematyczne?
math
geolocation
geo
Adam Taylor
źródło
źródło
Odpowiedzi:
Oto funkcja javascript:
Wyjaśnienie: https://en.wikipedia.org/wiki/Haversine_formula
źródło
Biorąc pod uwagę, że szukasz prostego wzoru, jest to prawdopodobnie najprostszy sposób, aby to zrobić, zakładając, że Ziemia jest kulą o obwodzie 40075 km.
Długość w metrach 1 ° szerokości geograficznej = zawsze 111,32 km
Długość w metrach 1 ° długości geograficznej = 40075 km * cos (szerokość geograficzna) / 360
źródło
Do przybliżania krótkich odległości między dwiema współrzędnymi użyłem wzorów z http://en.wikipedia.org/wiki/Lat-lon :
.
W poniższym kodzie zostawiłem surowe liczby, aby pokazać ich związek ze wzorem z Wikipedii.
Wpis wikipedii stwierdza, że obliczane odległości mieszczą się w granicach 0,6 m na 100 km podłużnie i 1 cm na 100 km szerokości, ale nie zweryfikowałem tego, ponieważ gdziekolwiek blisko tej dokładności jest w porządku dla mojego użytku.
źródło
Szerokość i długość geograficzna określają punkty, a nie odległości, więc twoje pytanie jest nieco bezsensowne. Jeśli pytasz o najkrótszą odległość między dwoma (szer., Dł.) Punktami, przeczytaj ten artykuł w Wikipedii o ortodromie.
źródło
Jest wiele narzędzi, które to ułatwią. Zobacz odpowiedź Monjardina, aby uzyskać więcej informacji o tym, co się z tym wiąże.
Jednak zrobienie tego niekoniecznie jest trudne. Wygląda na to, że używasz Javy, więc polecam zajrzeć do czegoś takiego jak GDAL . Zapewnia otoki java dla ich procedur i mają wszystkie narzędzia wymagane do konwersji z Lat / Lon (współrzędne geograficzne) na UTM (rzutowany układ współrzędnych) lub inne rozsądne odwzorowanie mapy.
UTM jest fajny, ponieważ to liczniki, więc łatwo się z nim pracuje. Będziesz jednak musiał uzyskać odpowiednią strefę UTM , aby wykonał dobrą robotę. Istnieje kilka prostych kodów dostępnych w wyszukiwarce Google, aby znaleźć odpowiednią strefę dla par długich / długich.
źródło
Ziemia jest irytująco nieregularną powierzchnią, więc nie ma na to prostego wzoru. Musisz żyć z przybliżonym modelem Ziemi i rzutować na niego swoje współrzędne. Model, który zazwyczaj używany do tego celu, to WGS 84 . Właśnie tego urządzenia GPS zwykle używają do rozwiązania tego samego problemu.
NOAA ma oprogramowanie, które możesz pobrać, aby pomóc w tym na swojej stronie internetowej .
źródło
Oto wersja R funkcji bh- , na wszelki wypadek:
źródło
Jedna mila morska (1852 metry) jest definiowana jako jedna minuta łuku długości geograficznej na równiku. Musisz jednak zdefiniować odwzorowanie mapy (zobacz także UTM ), w którym pracujesz, aby konwersja naprawdę miała sens.
źródło
Można to obliczyć na kilka sposobów. Wszystkie z nich używają aproksymacji sferycznej trygonometrii, gdzie promień jest promieniem Ziemi.
wypróbuj http://www.movable-type.co.uk/scripts/latlong.html, aby uzyskać trochę metod i kodu w różnych językach.
źródło
źródło
Aby przekształcić szerokość i długość geograficzną w reprezentację xiy, musisz zdecydować, jakiego typu odwzorowania mapy użyć. Jak dla mnie, Elliptical Mercator wygląda bardzo dobrze. Tutaj możesz znaleźć implementację (również w Javie).
źródło
Jeśli jest wystarczająco blisko, można uciec, traktując je jako współrzędne na płaskiej płaszczyźnie. Działa to, powiedzmy, na poziomie ulicy lub miasta, jeśli nie jest wymagana doskonała dokładność, a wszystko, czego potrzebujesz, to zgadne oszacowanie odległości, aby porównać z dowolnym limitem.
źródło
Na podstawie średniej odległości degresu na Ziemi.
1 ° = 111 km;
Konwertując to na radiany i dzieląc na metry, weź magiczną liczbę dla RAD w metrach: 0,000008998719243599958;
następnie:
źródło
Jeśli potrzebujesz prostego rozwiązania, użyj formuły Haversine, jak opisano w innych komentarzach. Jeśli masz aplikację wrażliwą na dokładność, pamiętaj, że wzór Haversine nie gwarantuje dokładności lepszej niż 0,5%, ponieważ zakłada się, że ziemia jest kulą. Aby uznać, że Ziemia jest spłaszczoną sferoidą, rozważ użycie wzorów Vincentego . Dodatkowo nie jestem pewien, jakiego promienia powinniśmy użyć ze wzorem Haversine: {Równik: 6 378,137 km, Biegunowy: 6 356,752 km, Objętościowy: 6 371,0088 km}.
źródło
it is assuming the earth is a circle
^^ Niektórzy dziwni ludzie robią to obecnie ... ale masz na myśli raczej raczejit is assuming the earth is a sphere
;)Musisz przekonwertować współrzędne na radiany, aby wykonać geometrię sferyczną. Po przeliczeniu możesz obliczyć odległość między dwoma punktami. Odległość można następnie przeliczyć na dowolną miarę.
źródło