Actualmente estoy desarrollando un sitio de mapeo OpenLayers. Las mediciones se pueden hacer usando una herramienta de línea y una herramienta de área. Ambos están configurados actualmente para calcular mediciones geodésicas como se describe en la API de OpenLayers .
Utilizo mediciones geodésicas en lugar de medidas planas, ya que durante las pruebas de usuarios, las personas cuestionaron las mediciones de la herramienta para distancias que ya conocían (como conducir entre ciudades).
Una nueva característica del sitio es que un usuario pueda dibujar un círculo en el mapa de un radio establecido. OpenLayers solo permite dibujar círculos utilizando distancias planas, por lo que cuando un usuario mide el círculo con la herramienta de medición geodésica, los valores no coinciden. En la imagen debajo, el radio plano del círculo es de 10 km, pero la medida de la línea geodésica para el diámetro es de 12 km.
Claramente, esto dejará a un usuario (y a mí) preguntándose cuál es la correcta.
Al observar esta respuesta , parece que la mayoría de los sistemas SIG de escritorio "ignoran" este problema y devuelven mediciones y distancias planas. Entonces, ¿cuál es la mejor práctica en términos de interfaz de usuario y precisión para hacer frente a mediciones planas y geodésicas?
Actualizar
Encontré este ejemplo de Google que ilustra el problema de los radios y la proyección de Mercator:
http://maps.forum.nu/gm_sensitive_circle2.html
El código JavaScript para dibujar el círculo es el siguiente:
var lat1 = (PI/180)* center.lat(); // radians
var lng1 = (PI/180)* center.lng(); // radians
for (var a = 0 ; a < 361 ; a++ ) {
var tc = (PI/180)*a;
var y = asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc));
var dlng = atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(y));
var x = ((lng1-dlng+PI) % (2*PI)) - PI ; // MOD function
var point = new GLatLng(parseFloat(y*(180/PI)),parseFloat(x*(180/PI)));
circlePoints.push(point);
bounds.extend(point);
}
¿Este círculo tiene en cuenta la curvatura de la tierra?
Actualización final
Código de trabajo publicado en http://geographika.co.uk/creating-a-geodesic-circle-in-openlayers
fuente
Respuestas:
Si está preparando cerveza casera en el navegador, puede obtener un "círculo" (no será redondo en la pantalla debido a su proyección; más bien se aproxima por un polígono con tantos puntos como quiera dibujar), use a la forma directa de los cálculos geodésicos: dado un punto, una dirección (acimut) y una distancia, le da el punto resultante. Detalles sangrientos: http://en.wikipedia.org/wiki/Vincenty%27s_formulae#Direct_Method
Parece que alguien ya ha hecho una traducción a JavaScript: http://www.movable-type.co.uk/scripts/latlong-vincenty-direct.html . ¡Eres afortunado!
Para terminar las cosas:
¡Salud!
fuente
Para obtener un círculo geodésico, puede usar la operación de búfer en el servicio de geometría de ESRI.
Una de libre acceso está disponible aquí .
fuente