Czy istnieje proste obliczenie, które mogę wykonać, które zamieni km na wartość, którą mogę dodać do wartości zmiennoprzecinkowej szerokości lub długości, aby obliczyć obwiednię wyszukiwania? Nie musi być całkowicie dokładne.
Na przykład: gdybym dostał szerokość / długość dla Londynu w Anglii (51.5001524, -0.1262362) i chciałbym obliczyć, jaka byłaby szerokość 25 km na wschód / zachód od tego punktu, a jaka byłaby długość 25 km na północ / południe od tego punktu punkt, co musiałbym zrobić, aby zamienić 25 km na ułamek dziesiętny, aby dodać do powyższych wartości?
Szukam ogólnej praktycznej zasady, czyli: 1km == +/- 0.XXX
Edytować:
Moje pierwotne wyszukiwanie hasła „lat lon” nie zwróciło tego wyniku:
Jak obliczyć prostokąt ograniczający dla podanej lokalizacji szerokości / lng?
Przyjęta odpowiedź wydaje się adekwatna do moich wymagań.
źródło
Odpowiedzi:
Przybliżone konwersje to:
Nie jest to w pełni poprawne dla spłaszczenia biegunowego Ziemi - do tego prawdopodobnie potrzebowałbyś bardziej skomplikowanego wzoru wykorzystującego elipsoidę odniesienia WGS84 (model używany dla GPS). Ale błąd jest prawdopodobnie nieistotny dla twoich celów.
Źródło: http://en.wikipedia.org/wiki/Latitude
Uwaga : należy pamiętać, że współrzędne długości geograficznej prostopadłej są wyrażane w stopniach, podczas gdy
cos
funkcja w większości (wszystkich?) Języków zazwyczaj akceptuje radiany, dlatego potrzebny jest stopień konwersji na radiany .źródło
cos(0°) = 1
=> Dlatego nie stosuje się współczynnika korygującego do obliczeń na równiku. Najszersze są tam długości geograficzne.cos(90°) = 0
=> Na biegunach długości spotykają się w jednym punkcie. Nie ma odległości do obliczenia.Jeśli używasz języka Java, JavaScript lub PHP, istnieje biblioteka, która wykona te obliczenia dokładnie, używając zabawnie skomplikowanej (ale wciąż szybkiej) trygonometrii:
http://www.jstott.me.uk/jcoord/
źródło
http://www.jstott.me.uk/jcoord/ - użyj tej biblioteki
źródło
Ciekawe, że nie widziałem wzmianki o współrzędnych UTM.
https://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system .
Przynajmniej jeśli chcesz dodać km do tej samej strefy, powinno to być proste (w Pythonie: https://pypi.org/project/utm/ )
utm.from_latlon i utm.to_latlon.
źródło
Dziękuję Jimowi Lewisowi za świetną odpowiedź i chciałbym zilustrować to rozwiązanie moją funkcją w Swift:
W tej funkcji do przeliczania odległości używam następujących wzorów:
źródło
Dlaczego nie używać poprawnie sformułowanych zapytań geoprzestrzennych ???
Oto strona odniesienia serwera SQL w funkcji geoprzestrzennej STContains:
https://docs.microsoft.com/en-us/sql/t-sql/spatial-geography/stcontains-geography-data-type?view=sql-server-ver15
lub jeśli nie chcesz używać konwersji w postaci pól i radianów, możesz zawsze użyć funkcji odległości, aby znaleźć potrzebne punkty:
Powinna istnieć podobna funkcjonalność dla prawie każdej bazy danych.
Jeśli poprawnie zaimplementowałeś indeksowanie geoprzestrzenne, Twoje wyszukiwania będą znacznie szybsze niż metoda, której używasz
źródło