Come modellare le funzionalità create dal controllo DrawFeature?


9

Ho seguito questo tutorial: http://workshop.pgrouting.org/chapters/geoext_client.html#select-the-start-and-final-destination

Contiene un controllo Openlayers.Control.DrawFeatures definito nel seguente esempio di codice. Puoi anche vedere le righe in cui l'autore commenta "se vogliamo applicare uno stile speciale al punto di partenza, dovremmo farlo qui" . Il problema è: non so come applicare uno stile in questa impostazione e non riesco a trovare alcun esempio usando il controllo DrawFeatures in questo modo.

Come posso fare in modo che il punto iniziale usi uno stile diverso rispetto al punto finale usando questo controllo DrawFeatures?

DrawPoints = OpenLayers.Class(OpenLayers.Control.DrawFeature, {

// this control is active by default
autoActivate: true,

initialize: function(layer, options) {
    // only points can be drawn
    var handler = OpenLayers.Handler.Point;
    OpenLayers.Control.DrawFeature.prototype.initialize.apply(
            this, [layer, handler, options]
        );
},

drawFeature: function(geometry) {
    OpenLayers.Control.DrawFeature.prototype.drawFeature.apply(
            this, arguments 
        );
    if (this.layer.features.length == 1) {
        // we just draw the startpoint
        // note: if we want to apply a special style to the 
        //       start point we should do this here
    } else if (this.layer.features.length == 2) {
        // we just draw the finalpoint
        // note: if we want to apply a special style to the 
        //       final point we should do this here

        // we have all what we need; we can deactivate ourself.
        this.deactivate();            
    }
}
});

Risposte:


7

aggiungi queste linee e modificale in base al tuo stile:

...
    if (this.layer.features.length == 1) {
        // we just draw the startpoint
        // note: if we want to apply a special style to the 
        //       start point we should do this here

        var myFirstPointStyle = OpenLayers.Util.applyDefaults(myFirstPointStyle, OpenLayers.Feature.Vector.style['default']);
        myFirstPointStyle.fillOpacity = 0.8;
        myFirstPointStyle.strokeWidth = 2;
        myFirstPointStyle.fillColor = "#ffffff";
        this.layer.features[this.layer.features.length - 1].style = myFirstPointStyle;

        this.layer.redraw();

    } else if (this.layer.features.length == 2) {
        // we just draw the finalpoint
        // note: if we want to apply a special style to the 
        //       final point we should do this here
        var mySecondPointStyle = OpenLayers.Util.applyDefaults(mySecondPointStyle, OpenLayers.Feature.Vector.style['default']);
        mySecondPointStyle.fillOpacity = 0.8;
        mySecondPointStyle.strokeWidth = 7;
        mySecondPointStyle.pointRadius = 12;
        mySecondPointStyle.fillColor = "#000000";
        this.layer.features[this.layer.features.length - 1].style = mySecondPointStyle;

        this.layer.redraw();


        // we have all what we need; we can deactivate ourself.
        this.deactivate();
    }
...

Questo copierà lo stile predefinito e puoi modificarlo da lì. Dovresti ottenere qualcosa del genere:

inserisci qui la descrizione dell'immagine


Grazie mille! Sembra come chiamare redraw () è la chiave qui. Non l'ho mai provato :)
underdark


Grazie mille per aver risolto anche il mio problema relativo all'applicazione degli stili
GSTomar
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.