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 SelectFeature
como 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.
Respuestas:
Pocas opciones Algunos locos :-) que otros. Las estrategias básicas son
==>
Active la estrategia de agrupación de características
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?
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.
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
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.
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.
fuente