Tratar las características superpuestas en OpenLayers


14

Si los usuarios crean una función de polígono que se superpone completamente con otra, como esta ...

... entonces no hay forma de que pueda seleccionar la función interna, es decir, la que se superpone con la otra. Actualmente estoy usando un simple SelectFeaturecomo este:

var select = new OpenLayers.Control.SelectFeature(
  [this.annotationLayer, this.controlPointsLayer], { 
    hover: true,
    renderIntent: "temporary"
    }
);
this.map.addControl(select);
select.activate();

Pero obviamente, solo puedo hacer que seleccione la función externa. ¿Cuál es la forma típica de lidiar con esto? ¿Cómo puedo hacer posible que el usuario seleccione también la función interna?

La solución más simple probablemente sería hacer que la función externa solo sea seleccionable dentro del área que queda al restar la función interna, pero no tengo idea de cómo hacerlo.



Uf, ¿eso significa que tendría que verificar manualmente todas las combinaciones posibles de características para las superposiciones y asignar un orden z personalizado antes de cargarlas? ¿Como ... tener una función que determina si una característica está completamente contenida dentro de otra?
slhck

el ordenamiento del índice z no funciona
neogeomat

Respuestas:


10

Pocas opciones Algunos locos :-) que otros. Las estrategias básicas son

  • Características del clúster
  • Ocultar / mover la característica superior
  • Enviar el clic a través de la función superior

==>

  1. Active la estrategia de agrupación de características

  2. Implemente su propio algoritmo de agrupación, de modo que cuando se agrega o modifica un nuevo elemento, su algoritmo se vuelve a ejecutar y realiza una verificación de bucle for anidado y n * n (-1) verifica qué se superpone con qué, luego modifique la propiedad de la característica para configurar una lista de características superpuestas, y cuando el usuario hace clic en la función, muestre una lista de características que se superponen y haga que el usuario seleccione en qué desea realmente hacer clic. ¿Tiene sentido?

  3. En lugar de implementar la función al hacer clic, simplemente implemente un controlador de clic de mapa completo. Y cuando el usuario hace clic, revise a través de su capa las características que se cruzan, y si hay una, muestre la ventana emergente de ese tipo, y si hay varias, muestre una lista de avisos como en el n. ° 2 anterior. Si ninguno se cruza, simplemente ignore.

  4. Implemente una opción de clic con el botón derecho para "ocultar" temporalmente una función que le permita acceder a la función oculta. Tan pronto como haga clic en el siguiente, vuelva a mostrar todas las funciones ocultas

  5. Similar al # 4, dentro de la ventana emergente de la función superior, agregue un elemento de menú / enlace para "ocultar" la función. Y proceda como en el n. ° 4.

  6. Similar al # 4/5 implemente un "movimiento temporal" con el botón derecho y haga clic para arrastrar la función fuera del camino [recuerde que es un lugar antiguo]. Luego, el usuario hace clic en la función inferior y la superior vuelve a su posición original.

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.