DrawFeature 컨트롤로 만든 피처의 스타일을 지정하는 방법은 무엇입니까?


9

이 튜토리얼을 따르고 있습니다 : http://workshop.pgrouting.org/chapters/geoext_client.html#select-the-start-and-final-destination

다음 코드 샘플에 정의 된 Openlayers.Control.DrawFeatures 컨트롤이 포함되어 있습니다. 또한 저자가 "시작점에 특별한 스타일을 적용하려면 여기에서 수행해야합니다"라고 언급하는 행을 볼 수 있습니다 . 문제는 :이 설정에서 스타일을 적용하는 방법을 모르고 DrawFeatures 컨트롤을 사용하여 예제를 찾을 수 없습니다.

이 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();            
    }
}
});

답변:


7

다음 줄을 추가하고 스타일에 맞게 수정하십시오.

...
    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();
    }
...

기본 스타일이 복사되고 거기서 스타일을 수정할 수 있습니다. 다음과 같은 것을 얻어야합니다.

여기에 이미지 설명을 입력하십시오


감사합니다! redraw () 호출이 핵심입니다. 나는 그것을 시도하지 않았다 :)
어둡게

천만에요. :
CaptDragon

스타일 적용과 관련된 내 문제도 해결해 주셔서 감사합니다.
GSTomar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.