¿Usando mediciones geodésicas para radios circulares?


15

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.

texto alternativo

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


1
Algo debe estar mal aquí. la diferencia no puede ser del 20% en una distancia tan corta entre la línea recta y la línea que sigue al esferoide. alguien más debe estar involucrado.
Nicklas Avén el

44
Es muy probable que la proyección sea Mercator, que solo tiene una escala real en el ecuador (en general, en realidad es posible tener proyecciones de Mercator con escala verdadera en otro lugar (en una latitud única), pero la mayoría de las parametrizaciones globales usan el ecuador). Y los errores de escala para Mercator son muy altos (infinitos, de hecho, en los polos) aumentando a medida que se dirige hacia el norte / sur desde la verdadera latitud de escala.
Paul Ramsey

Las mediciones se tomaron a 52 grados norte, y de hecho están en la proyección de Mercator. Entonces, ¿esto significa que las características del lado del cliente dibujadas en Mercator devolverán áreas y longitudes muy inexactas a menos que estén cerca del ecuador?
geographika

1
Sí, ese es el caso, proyecte los datos en una cuadrícula local en metros o pies y todo estará bien.
Ian Turton

2
@Paul Buena llamada. Pero estos datos solo indican que la proyección es cilíndrica, de los cuales el Mercator es uno. En verdaderas proyecciones cilíndricas, la distorsión horizontal es igual a segundos (latitud). Mediante esta fórmula, la distorsión de 20 / 12.13 resulta en una latitud de 52.66 grados; esa es exactamente la latitud de Limerick.
whuber

Respuestas:


8

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:

  • Decide qué tan grueso (número de vértices, llámalo n) estás dispuesto a que el resultado final sea.
  • Divide 360 ​​grados en n piezas.
  • Construya un polígono por (para i en el rango (n): polygon.add (vincenty_direct (start_point, i * 360 / n, distance)))
  • Después del hecho, posiblemente arregle algunas irritaciones de proyección y planarización:
    • Si está utilizando la proyección típica de un mapa web, que es casi seguro, el polígono resultante se estirará enormemente verticalmente si se acerca a un poste.
    • Del mismo modo, si el polígono de resultados cruza la línea de fecha internacional, realmente se descifrará.

¡Salud!


1
El método Vincenty ya se ha agregado a OpenLayers en el espacio de nombres de utilidades : dev.openlayers.org/apidocs/files/OpenLayers/… con esto y su explicación, particularmente el parámetro de demora, aclare esto. ¡Gracias!
geographika

:) Déjame saber lo irritantes que son las 'irritaciones'. Idealmente, la reparación ya sería parte de OpenLayers y simplemente funcionaría, pero no estoy seguro.
Dan S.

3

OpenLayers solo permite dibujar círculos usando distancias planas

Para obtener un círculo geodésico, puede usar la operación de búfer en el servicio de geometría de ESRI.

... si la unidad es lineal, como pies o metros, se realiza el almacenamiento en búfer geodésico

Una de libre acceso está disponible aquí .


Gracias por el útil enlace. Veré si puedo llamar al servicio y actualizar la función en JavaScript. Mi única preocupación sería confiar en un servicio web que pudiera desactivarse en cualquier momento. ¿Supongo que el punto amortiguado geodésico sería el círculo de 10 km exacto / real?
geographika

El círculo debe ser preciso, sin embargo, lo verificaría con su herramienta de medición. Creo que el servicio de geometría es parte de una instalación estándar del servidor arcgis, por lo que si se retira, debería haber muchos más en la web para elegir. google.com/…
Kirk Kuykendall el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.