2010-11-05 28 views
12

Sto usando OpenLayers con una normale mappa mercator e sto provando a campionare un riquadro di delimitazione trovando una griglia di punti in latlong. Il bbox è espresso in latlon, ad es.Come trasformare una distanza da gradi a metri?

48.1388,-15.3616,55.2057,-3.9359 

posso definire una distanza in gradi (per esempio x: 2,5, y: 2.4) ed elaborare i punti da lì. Ma mi piacerebbe esprimere questa distanza in metri (ad es. 50000) per metterlo in relazione con la mentalità dell'utente (le persone comprendono i metri, non i gradi). Come posso convertire questa distanza? So come riproiettare un punto, ma non una distanza.

Grazie per eventuali suggerimenti! Mulone

risposta

13

Utilizzare lo haversine formula per ottenere la distanza tra due punti di lat/long. Ciò presuppone che la terra sia una sfera (che è, per la maggior parte dei casi, "abbastanza buona").

implementazione Un Javascript di esso (spudoratamente rubato da here) si presenta così:

var R = 6371; // km 
var dLat = (lat2-lat1).toRad(); 
var dLon = (lon2-lon1).toRad(); 
var a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
     Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) * 
     Math.sin(dLon/2) * Math.sin(dLon/2); 
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
var d = R * c; 
+1

Haversine lavora per diverse latitudini ma è l'opposto di ciò che l'OP sta richiedendo. L'OP vuole mappare la distanza lineare (misurata) in gradi di latitudine e longitudine. – winwaed

5

Un minuto di latitudine nord a sud = 1 miglio nautico = 6075 piedi così si laurea = 60 minuti = 60 * 6075 piedi Non ci sono 3,28 piedi in un metro così Un grado = 60 * 6075/3.28 metri = 111,128 metri

in alternativa, un minuto di Latitudine = 1.852 metri così si laurea = 60 * 1852 metri = 111,120 metri

io non sono sicuro che è più preciso ...

Fo r Un grado di longitudine, fare la stessa cosa, ma moltiplicare per il coseno (latitudine) poiché le linee di longitudine si avvicinano mentre ci si sposta verso nord.

0

La trasformazione tra gradi e metri varia attraverso la superficie terrestre.

Assumendo una Terra sferica, gradi di latitudine = distanza * 360/(2 * PI * 6400000)

noti che longitudine varierà a seconda della latitudine:

gradi di longitudine = distanza * 360 */(2 * PI * cos (latitudine))

Quanto sopra è per la superficie terrestre e non utilizza la proiezione di Mercatore. Se si desidera lavorare con distanza lineare proiettata, sarà necessario utilizzare la proiezione di Mercator.

+0

E per il caso più generale quando si lavora con diverse proiezioni cartografiche in javascript, utilizzare la sorgente libreria Proj4js aperta. - che viene utilizzato anche da OpenLayers. – winwaed