2015-11-25 10 views
5

Sto cercando una funzione che restituisca un punto (lat, long) tra due punti (dove specifichi anche il loro lat, long) e quel punto sia basato su una percentuale di distanza.Calcola il punto tra due coordinate in base a una percentuale

Quindi, specificare Lat1, Lon1, Lat2, Lon2 e una% sulla funzione e, restituisce un punto, ad esempio, 20% distante dal primo punto al secondo.

+1

Se stai lavorando con l'API di Google Maps, dai un'occhiata a [interpolare] (https://developers.google.com/maps/documentation/javascript/reference#spherical) che calcola un punto tra altri due punti ad una frazione (0-1) tra di loro. –

risposta

10

Assumendo che la coordinata sia un numero decimale. Puoi usare questa equazione.

function midpoint(lat1, long1, lat2, long2, per) { 
    return [lat1 + (lat2 - lat1) * per, long1 + (long2 - long1) * per]; 
} 

restituire una nuova coordinata desiderata di [lat, long], sulla base della percentuale (ad esempio a = 0,2 per il 20%).

+2

Il punto medio di lat long non è in genere il punto centrale calcolato da questa formula, perché sono coordinate su una sfera, non su una superficie piana. – spirographer

+2

Anche io l'ho pensato, ma non funziona così. Per P1 (37.740675, -25.661043) e P2 (37.738096, -25.669267), ad esempio, il 20% restituisce P3 (7.5478771, -5,133031). Questo mi mette in Africa invece delle isole Azzorre tra P1 e P2. –

+1

Hi Swift-R, vedo, penso ci sia un errore nella mia equazione, dovrebbe essere: [lat1 + (lat2-lat1) * per, long1 + (long2-long1) * per] Modificherò la mia risposta. Spero che funzioni per te. – lguiel

1

Ecco un riferimento che aiuterà molto (controllare il fondo)

http://www.movable-type.co.uk/scripts/latlong.html

punto intermedio

Un punto intermedio in qualsiasi frazione lungo il grande sentiero cerchio tra due punti può anche essere calcolato.

Formula:

a = sin((1−f)⋅δ)/sin δ 
b = sin(f⋅δ)/sin δ 
x = a ⋅ cos φ1 ⋅ cos λ1 + b ⋅ cos φ2 ⋅ cos λ2 
y = a ⋅ cos φ1 ⋅ sin λ1 + b ⋅ cos φ2 ⋅ sin λ2 
z = a ⋅ sin φ1 + b ⋅ sin φ2 
φi = atan2(z, √x² + y²) 
λi = atan2(y, x) 

dove f è frazione lungo rotta ortodromica (f = 0 è punto 1, f = 1 è punto 2), δ è la distanza angolare d/R tra i due punti.

+0

Non capisco dove la percentuale arriva. –

+0

* f * è la frazione dal punto 1 al punto 2. Una percentuale è una frazione in cui il denominatore è 100. Ad esempio, se la percentuale è 39%, quindi la frazione * f = 39/100 *. – spirographer

Problemi correlati