기능의 특성 값을 사용자 지정 전략으로 변경하지만 기능을 그릴 때 기능에 새 특성 값이 적용되지 않습니다. http://jsfiddle.net/ccrafael/aXyqW/1/openlayer 전략으로 특성 특성 변경
감사 & 관련, 라파엘 :
OpenLayers.Strategy.LabelChange = OpenLayers.Class(OpenLayers.Strategy, {
activate: function() {
var activated = OpenLayers.Strategy.prototype.activate.call(this);
if(activated) {
this.layer.events.on({
"moveend": this.filter,
scope: this
});
}
return activated;
},
deactivate: function() {
var deactivated = OpenLayers.Strategy.prototype.deactivate.call(this);
if(deactivated) {
this.layer.events.un({
"moveend": this.filter,
scope: this
});
}
return deactivated;
},
filter: function() {
console.log('labels updated');
for (var i = 0; i < this.layer.features.length; i++) {
var f = this.layer.features[i];
f.attributes.labelName = 'label updated';
}
}
});
var features = new Array(15);
// create random reatures
for (var i=0; i<features.length; i++) {
var x = (360 * Math.random()) - 180;
var y = (180 * Math.random()) - 90;
features[i] = new OpenLayers.Feature.Vector(
new OpenLayers.Geometry.Point(x , y),
{
labelName: 'label '+ i
}
);
}
var style = new OpenLayers.Style({
strokeWidth:0,
pointRadius: 2,
fillOpacity:0,
label: "${labelName}",
fontColor: "#333333",
fontFamily: "sans-serif",
fontWeight: "bold",
});
// Create a vector layer and give it your style map.
var labels = new OpenLayers.Layer.Vector("labels", {
styleMap: new OpenLayers.StyleMap(style),
strategies:[new OpenLayers.Strategy.LabelChange()]
});
labels.addFeatures(features);
var map = new OpenLayers.Map({
div: "map",
layers: [
new OpenLayers.Layer.WMS(
"OpenLayers WMS",
"http://vmap0.tiles.osgeo.org/wms/vmap0",
{layers: "basic"}
),
labels
],
center: new OpenLayers.LonLat(0, 0),
zoom: 1
});
가 jsfiddle을 들으
이
는 내가 뭘 테스트입니다.
당신에게 Pratik 감사하지만이 전략 필터 메서드 내 다시 그릴 필요했던 다음은 바이올린
. 하지만 그렇게하면 무한대 재귀가 발생합니다. – Rafael그게 내가 전에 시도한거야, 심지어 무한 재귀있어. redraw를 호출하면 (자), 필터 메소드가 불려가 재귀가 작성됩니다. 그래서 처음으로 레이블을 업데이트하려면 마지막에 다시 그리기 메서드를 호출해야합니다. –