Gestione delle funzionalità sovrapposte in OpenLayers


14

Se gli utenti creano una funzione poligonale che si sovrappone completamente a un'altra, come questa ...

... quindi non è possibile selezionare la funzione interna, ovvero quella sovrapposta dall'altra. Attualmente sto usando un semplice SelectFeaturecome questo:

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

Ma ovviamente, posso solo ottenerlo per selezionare la funzione esterna. Qual è il modo tipico di affrontarlo? Come posso consentire all'utente di selezionare anche la funzione interna?

La soluzione più semplice sarebbe probabilmente quella di rendere la funzione esterna selezionabile solo all'interno dell'area rimasta quando si sottrae la funzione interna - ma non ho idea di come procedere.


1
Devi creare un indice z (ordinamento) - vedi openlayers.org/dev/examples/ordering.html
Mapperz

Accidenti, questo significa che dovrei controllare manualmente ogni possibile combinazione di funzioni per sovrapposizioni e assegnare un ordine z personalizzato prima di caricarle? Come ... avere una funzione che determina se una caratteristica è completamente contenuta in un'altra?
slhck,

L'ordinamento z-index non funziona
neogeomat

Risposte:


10

Poche opzioni. Alcuni più pazzi :-) rispetto ad altri. Le strategie di base sono

  • Funzionalità del cluster
  • Nascondi / sposta la funzione principale
  • Invia il clic tramite la funzione principale

==>

  1. Attiva la strategia di raggruppamento delle funzionalità

  2. Implementa il tuo algoritmo di clustering, quindi quando viene aggiunto o modificato un nuovo elemento, l'algoritmo viene eseguito nuovamente ed esegue un controllo nidificato per il ciclo continuo e n * n (-1) verifica per vedere cosa si sovrappone a cosa, quindi modifica la proprietà della funzione per impostare un elenco di funzioni sovrapposte e quando l'utente fa clic sulla funzione, visualizza un elenco di funzioni che si sovrappongono e consente all'utente di selezionare ciò su cui realmente desidera fare clic. Ha senso?

  3. Invece di implementare la funzione al clic, implementa solo un gestore di clic dell'intera mappa. E quando l'utente fa clic, controlla attraverso il tuo livello tutte le caratteristiche che si intersecano - e se ce n'è una - mostra il pop-up di quel ragazzo e, se ce ne sono più, visualizza un elenco di prompt come nel n. 2 sopra. Se nessuno si interseca, basta ignorarlo.

  4. Implementare un'opzione del tasto destro del mouse per "nascondere" temporaneamente una funzione per consentire l'accesso alla funzione nascosta. Non appena si fa clic su quello successivo, visualizzare nuovamente tutte le funzioni nascoste

  5. Simile al n. 4, all'interno del pop-up della funzione principale, aggiungi un elemento di menu / collegamento per "nascondere" la funzione. E procedere come nel n. 4.

  6. Simile a # 4/5 implementa una "mossa temporanea" con il tasto destro del mouse e fai clic e trascina via la funzione [ricorda che è vecchia]. Quindi l'utente fa clic sulla funzione inferiore e quella superiore torna alla sua posizione originale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.