2013-03-24 16 views
5

Szybkie pytanie dotyczące obliczenia długości/długości.Obliczanie szerokości i długości geograficznej

Chcę wziąć zestaw wartości, np. Lat: 55.123456 Długi -6.123456 i wypracuj cztery punkty, które znajdują się w pewnej odległości.

enter image description here

Jako danego kwadratu, chcę poćwiczyć wartość dla Latitude po lewej i prawej stronie. Tak więc czerwone linie znajdują się 1,5 km od punktu początkowego. Podobnie dla długości geograficznej niebieskie linie będą 1,5 km od punktu początkowego. Wynik będzie wynosił 4 punkty, wszystkie odległości w kilometrach.

w skrócie: + Y = Latitude Latitude Wartość X kilometrów

Działa z iPhone w tej chwili i jej za bardzo przybliżonych obliczeń bazy danych.

EDYCJA: Aby wyjaśnić, odległość jest tak krótka, że ​​krzywizna (A zatem dokładność) nie stanowi problemu.

+1

Wiesz, że Ziemia jest (bardziej) kulą niż samolotem, prawda? –

+0

I do kontynuacji komentarza Matta, myślę, że [odległość Wielkiego Koła] (http://en.wikipedia.org/wiki/Great-circle_distance) jest tym, o co prosisz. – rickerbh

+0

@Matt, dobrze znający kulę: D Odległość jest tak krótka (Sub 3km) Nie powinno to mieć znaczenia. Chcę tylko dodać wartość zmiennoprzecinkową do istniejącego punktu, aby dać mi szerokość lub długi punkt, który jest ustaloną odległością. – Colin

Odpowiedz

3

Cóż, dla przybliżonych obliczeń przy stosunkowo niewielkich odległościach (mniej niż 100 km) można założyć, że istnieje 40 000 000/360 = 111 111 metrów na stopień szerokości i 111 111 * cos (szerokość geograficzna) metrów na stopień długości. Dzieje się tak dlatego, że licznik został zdefiniowany jako 1/40_000_000 część meridianu paryskiego;).

W przeciwnym razie powinieneś używać wielkich odległości, jak zaznaczono w komentarzach. Aby uzyskać wysoką precyzję, należy również wziąć pod uwagę, że Ziemia jest raczej spłaszczonym sferoidem niż kulą.

+0

Dzięki Begemotv2718. Ale jak by to miało związek z wartością float? Wolałabym nie konwertować na stopnie, minuty i sekundy, tylko po to, by zamienić z powrotem na zmienną. – Colin

+0

Przepraszam, nie rozumiem, o co ci chodzi. Szerokość geograficzna dla punktu 3 km na północ będzie LatitudeInitial + (3 km/111,11 km) jako zmiennoprzecinkowa. Długość geograficzna dla punktu 3 km na wschód od początkowej będzie LongitudeInitial + (3 km/(111,11 km * cos (LatitudeInitial))). Dla punktu początkowego 55.123456 Long -6.123456 będzie to 55.123456 + 3/111.111 = 55.150456, a dla długości -6.123456 +3/(111.111 * cos (55.123456)) = - 6.123456 + 0.0472185 = -6.0762375 – begemotv2718

6

W obj-C powinny być przyzwoite rozwiązanie:

float r_earth = 6378 * 1000; //Work in meters for everything 
float dy = 3000; //A point 3km away 
float dx = 3000; //A point 3km away 
float new_latitude = latitude + (dy/r_earth) * (180/M_PI); 
float new_longitude = longitude + (dx/r_earth) * (180/M_PI)/cos(latitude * 180/M_PI); 
+0

wzór jest nieprawidłowy, dx i powinno być 1500 – AlexWien

+0

poprawione, ale jest to bardziej przykład, więc odległość jest dowolna. – Colin

1
// parameter: offset in meters 
float offsetM = 1500; // 1.5km 

// degrees/earth circumfence 
float degreesPerMeter = 360.0/40 000 000; 
float toRad = 180/M_PI; 

float latOffsetMeters = offsetM * degreesPerMeter; 
float lonOffsetMeters = offsetM * degreesPerMeter * cos (centerLatitude * toRad); 

Teraz wystarczy dodać +/- latOffsetMeters i +/- lonOffsetMeters do swojej centerLatitude/centerLongitude.

Formuła przydatna do kilkuset kilometrów.

Powiązane problemy