Domanda

Mi sembra di aver colpito un bug o ho trascurato qualcosa.

Ho scritto del codice che elenca tutte le funzionalità vettoriali su un livello OpenLayers Vector - per verificare se il mouse si trova all'interno di una funzionalità vettoriale - in tal caso visualizza alcune informazioni in base alla funzionalità.

Ho dovuto scrivere i miei metodi per farlo perché i controlli OpenLayers esistenti (seleziona ecc.) si fermano dopo aver trovato una funzione sotto il mouse, e ho la possibilità che diverse funzioni siano sovrapposte l'una sull'altra.

Il mio problema è che il metodo .containsPoint sembra usare coords da prima di una 'panoramica'. Dopo lo zoom in avanti o indietro, la geometria sembra essere nel posto giusto e .containsPoint funziona correttamente quando faccio scorrere il mouse sulla mappa.

Devo fare qualcosa dopo che la mappa è stata spostata per aggiornare qualcosa (geometria della funzione)

È stato utile?

Soluzione

Mi rendo conto che questa domanda ha quasi avuto il suo primo compleanno e potrebbe non essere più valida, ma mi darò comunque una possibilità di rispondere.

OpenLayers.Control.DragPan effettua una chiamata alla mappa al termine della panoramica. Se controlli la funzione di panoramica di OpenLayers.Map, vedrai questo commento all'interno:

// only call setCenter if not dragging or there has been a change

La seguente logica nella funzione riflette questo commento.

Quindi sì, ogni volta che hai finito il panning devi fare qualcosa del tipo:

dragpan.handler.up = function(evt)
{
    dx = dragpan.handler.last.x - evt.x;
    dy = dragpan.handler.last.y - evt.y;
    var centerPx = map.getViewPortPxFromLonLat(map.getCenter());
    var newCenterPx = centerPx.add(dx, dy);
    var newCenterLonLat = map.getLonLatFromViewPortPx(newCenterPx);
    map.setCenter(map.getCenter() + dragpan.handler.xy);
}

... e le cose dovrebbero magicamente funzionare per te.

Altri suggerimenti

Senza uno snippet di codice di esempio è molto difficile rispondere a questa domanda. OpenLayers è in grado di selezionare più oggetti con un clic del mouse. Hai già provato OpenLayers 2.8?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top