Pregunta

Estoy usando OpenLayers con Mercator ordinaria y estoy tratando de probar un cuadro delimitador mediante la búsqueda de una rejilla de puntos en LatLong. El Bbox se expresa en LatLon, por ejemplo.

48.1388,-15.3616,55.2057,-3.9359

I puede definir una distancia en grados (por ejemplo, x: 2,5, y: 2,4) y el trabajo a cabo los puntos de allí. Pero me gustaría expresar esta distancia en metros (por ejemplo, 50000) con el fin de relacionarlo con la mentalidad de usuario (la gente a entender metros, no en grados). ¿Cómo puedo convertir esta distancia? Yo sé cómo volver a proyectar un punto, pero no a distancia.

Gracias por todas las sugerencias! Mulone

¿Fue útil?

Solución

Utilice el fórmula haversine para obtener la distancia entre dos puntos de latitud / longitud. Esto supone que la tierra es una esfera (que es, para la mayoría de los casos, "lo suficientemente bueno").

Una aplicación Javascript de ella (robado descaradamente desde aquí ) es similar al siguiente:

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;

Otros consejos

sin permitir la forma ligeramente no esférica de la tierra,

pies

Un minuto de latitud norte a sur = 1 milla náutica = 6075 Así un grado = 60 minutos = 60 * 6075 pies Hay 3,28 pies en un medidor de modo Un grado = 60 * 6075 / 3,28 metros = 111,128 metros

Alternativamente, un minuto de latitud = 1.852 metros Así que un grado = 60 * 1852 = 111,120 metros metros

No estoy seguro de que es más preciso ...

Para obtener un grado de longitud, hacer lo mismo, pero Multiplicar por el coseno (latitud), ya que las líneas de longitud se acercan entre sí a medida que se mueve hacia el norte.

La transformación entre grados y metros varía a través de la superficie de la Tierra.

Suponiendo una Tierra esférica, grados de latitud = distancia * 360 / (2 * pi * 6.400.000)

Tenga en cuenta que la longitud variará en función de la latitud:

grados de longitud = distancia * 360 * / (2 PI * * cos (latitud))

Lo anterior es para la superficie de la Tierra, y no utiliza la proyección de Mercator. Si se desea trabajar con la distancia lineal proyectada, entonces usted tendrá que utilizar la proyección de Mercator.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top