Tratar con funciones superpuestas en OpenLayers

14

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

...entoncesnohayformadequepuedasseleccionarlacaracterísticainterna,esdecir,unaqueestásuperpuestaalaotra.ActualmenteestoyusandounSelectFeaturesimplecomoeste:

varselect=newOpenLayers.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 que el usuario también pueda seleccionar la función interna?

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

    
pregunta slhck 10.07.2012 - 16:30

1 respuesta

10

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

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

== >

  1. Activa la estrategia de agrupación de entidades

  2. Implemente su propio algoritmo de agrupación, de modo que cuando se agregue o modifique un nuevo elemento, su algoritmo se volverá a ejecutar y realizará una verificación anidada de bucle y n * n (-1) verificará qué se superpone con lo que - luego modifique la propiedad de la característica para configurar una lista de características superpuestas, y cuando el usuario haga clic en la característica, muestre una lista de características que se superponen y haga que el usuario seleccione lo que realmente quería 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 su capa para ver si hay características que se intersectan, y si hay una, muestre la ventana emergente de ese tipo, y si hay varias, muestre una lista de mensajes como en el # 2 anterior. Si ninguno se interseca, simplemente ignore.

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

  5. Similar a # 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 # 4.

  6. Similar-ish a # 4/5 implementa un clic derecho "mover temporalmente" y haz clic en arrastrar la función fuera del camino [recuerda que es un lugar antiguo]. Luego, el usuario hace clic en la función inferior y la superior vuelve a su posición original.

respondido por el Vadim 10.07.2012 - 19:04

Lea otras preguntas en las etiquetas