2 votos

Problema de proyección de polígonos en OpenLayers 3 / Cesio

Estoy utilizando OpenLayers 3 y Cesium (a través de ol3-cesium).

He creado unos cuantos rectángulos (usando un MultiPolígono) apilados unos sobre otros. Mientras que en OpenLayers el renderizado (izquierda) es el esperado, la salida en Cesio (derecha) no lo es.

enter image description here

Entiendo que un rectángulo en una proyección no será un rectángulo en la otra. Sin embargo, espero que el software proyecte adecuadamente el rectángulo.

En este caso, lo que esperaba es que la salida de Cesio no tuviera espacios entre rectángulos. Por otro lado, los vértices parecen estar en las coordenadas correctas, por lo que estos polígonos sólo siguen las líneas más cortas entre vértices.

¿Qué define la proyección en la que se basa un polígono y, por tanto, qué proyección debe aplicarse a él? Para estos vértices, ¿los polígonos de la derecha son los de la izquierda o los de la derecha?

Y además, ¿cómo consigo que Cesio / ol3-cesio renderice los polígonos que cubren la misma área que los polígonos equivalentes en el mapa 2D?

JSFiddle: https://jsfiddle.net/adlerhn/o1j1fv9x/4/

3voto

Shog9 Puntos 340

Lo que define en qué proyección se basa un polígono, y por tanto ¿qué proyección debe aplicarse a él? Para estos vértices, ¿son los los polígonos de la izquierda o los de la derecha?

Eso depende de la finalidad de los polígonos.

Si sus áreas son importantes, entonces deberías construirlas en una proyección de área igual como Albers. Si los ángulos de 90 grados son importantes, entonces una proyección conforme como la cónica conforme de Lambert o la transversal de Mercator funcionaría.

En cualquier caso, si va a proyectar rasgos lineales o poligonales entre diferentes sistemas de referencia de coordenadas proyectados y geográficos (CRS), densifique las líneas.

Muchos paquetes de software no densifican las líneas sobre la marcha como parte de una reproyección por razones de rendimiento o por el deseo de no cambiar demasiado la característica original.

En su caso, los polígonos de la izquierda se construyeron a partir de coordenadas de latitud-longitud o posiblemente en una proyección cilíndrica en la que las líneas de latitud son líneas rectas. Para obtener características de aspecto similar en Cesio, tendrá que densificar las características primero.

0voto

Jose Gómez Puntos 227

Además de Respuesta de mkennedy para conseguir este efecto en el Cesio (de https://groups.google.com/d/msg/cesium-dev/BT5z9ztSnvk/4Fpjaxh5BQAJ ):

Los puntos de un polígono se conectan encontrando la distancia más corta entre esos dos puntos. La mayoría de las veces, la distancia más corta no sigue las líneas de longitud y latitud. Sin embargo, para dibujar rectángulos que sí siguen las líneas de longitud y latitud, tenemos un tipo primitivo. El uso de un rectángulo en lugar de un polígono debería funcionar para usted. Aquí hay un ejemplo: http://cesiumjs.org/Cesium/Apps/Sandcastle/index.html?src=Rectangle.html&label=Geometries

Renderizado plano:

viewer.entities.add({
    polygon : {
        hierarchy : Cesium.Cartesian3.fromDegreesArray([-30, 70,  0, 70,  0, 69, -30, 69, -30, 70]),
        material : Cesium.Color.RED
    }
});

Renderización proyectada:

viewer.entities.add({
    rectangle : {
        coordinates : Cesium.Rectangle.fromDegrees(-30, 69,  0, 70),
        material : Cesium.Color.RED
    }
});

Muestra en vivo: http://cesiumjs.org/Cesium/Apps/Sandcastle/?src=Hello%20World.html&label=Showcases&gist=9a7dcab4afa92575d9d99b6887bb78b1

enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X