2013-03-24 24 views
5

Una rapida domanda su un calcolo Lat/Long.Calcolo della distanza di latitudine/longitudine

Voglio prendere un valore impostato ad es. Lat: 55.123456 Long -6.123456 e calcola i quattro punti che sono a una distanza arbitraria.

enter image description here

Come il quadrato dato, voglio lavorare fuori il valore per Latitude sul lato destro e sinistro. Quindi le linee rosse sono a 1,5 km dal punto di partenza. Allo stesso modo per la longitudine, le linee blu saranno a 1,5 km dal punto di partenza. L'output sarà di 4 punti, tutte le distanze in chilometri.

In breve: Latitudine + Y = Latitudine Valore X chilometri di distanza

Lavorare con iPhone in questo momento e la sua per un calcolo di database molto approssimativa.

MODIFICA: Giusto per chiarire, la distanza è così breve che la curvatura (e quindi la precisione) non è un problema.

+1

Sai che la Terra è (più di) una sfera che un piano, giusto? –

+0

E per seguire il commento di Matt, penso che la [Great Circle Distance] (http://en.wikipedia.org/wiki/Great-circle_distance) sia ciò che stai cercando. – rickerbh

+0

@Matt, ben consapevole della sfera: D La distanza è così breve (Sub 3km) Non dovrebbe avere importanza. Voglio semplicemente aggiungere un valore float al punto esistente per darmi una latitudine o un punto lungo che è una distanza impostata. – Colin

risposta

3

Bene, per il calcolo approssimativo con distanze relativamente piccole (meno di 100 km) si può supporre che ci sia 40_000_000/360 = 111 111 metri per grado di latitudine e 111 111 * cos (latitudine) metri per grado di longitudine. Questo perché un metro è stato definito come 1/40_000_000 parte del meridiano di Parigi;).

In caso contrario è necessario utilizzare distanze di cerchio grandi, come indicato nei commenti. Per un'alta precisione devi anche considerare che la Terra è leggermente sferoidale oblata piuttosto che una sfera.

+0

Grazie begemotv2718. Ma come si collegherebbe ad un valore fluttuante? Preferirei non convertire in gradi, minuti e secondi, solo per riconvertire in float. – Colin

+0

Mi spiace, non riesco a capire cosa intendi. La latitudine per il punto 3 km a nord sarà LatitudeInitial + (3 km/111.111 km) come punto mobile. Longitudine per il punto 3 km a est dell'iniziale sarà LongitudeInitial + (3 km/(111,111 km * cos (LatitudeInitial))). Per il punto iniziale 55.123456 Long -6.123456 questo sarà 55.123456 + 3/111.111 = 55.150456, e per longitudine -6.123456 + 3/(111.111 * cos (55.123456)) = - 6.123456 + 0.0472185 = -6.0762375 – begemotv2718

6

In OBJ-C questo dovrebbe essere una soluzione decente:

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

la formula è errata, dx e dy dovrebbe essere 1500 – AlexWien

+0

corretto ma è più come un esempio quindi la distanza è arbitraria. – 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); 

Ora è sufficiente aggiungere +/- latOffsetMeters e +/- lonOffsetMeters al vostro centerLatitude/centerLongitude.

La formula è utile fino a cento chilometri.

Problemi correlati