gpt4 book ai didi

javascript - 修改 OpenLayers 3 中现有图层的值

转载 作者:行者123 更新时间:2023-12-03 09:22:15 24 4
gpt4 key购买 nike

我通过调用以下函数使用 ol3 在 map 上添加标记

function addmarker(lat, long, flag) {

iconFeature = new ol.Feature({
geometry: new ol.geom.Point(ol.proj.transform([+long, +lat], 'EPSG:4326', 'EPSG:3857')),
name: 'NULL'
});

iconStyle = new ol.style.Style({

fill: new ol.style.Fill({
color: '#008000'
}),
stroke: new ol.style.Stroke({
color: '#008000',
width: 3
}),
image: new ol.style.Circle({
radius: 6,
fill: new ol.style.Fill({
color: '#008000'
})
})

});

iconFeature.setStyle(iconStyle);

vectorSource[flag] = new ol.source.Vector({
features: [iconFeature]
});

vectorLayer[flag] = new ol.layer.Vector({
source: vectorSource[flag]
});

map.addLayer(vectorLayer[flag]);

}

为了更改标记位置,我将删除该图层并再次添加新图层

 function changemarker(lat, long, flag) {

vectorSource[flag].clear();

map.removeLayer(vectorLayer[flag]);

addmarker(lat, long, flag);

}

我面临着性能问题,因为我正在更改每 500 毫秒调用changemarker 方法的标记。是否可以修改图层而不删除它,或者是否有更好的方法可以遵循。

请帮忙。

最佳答案

如果您在功能上设置 ID ol.Feature.setId(<your id>)您可以直接更改它,如下所示:-

//Setting up your feature 
iconFeature = new ol.Feature({
geometry: new ol.geom.Point(ol.proj.transform([+long, +lat], 'EPSG:4326', 'EPSG:3857')),
name: 'NULL'
});

iconFeature.setId('feature1');

然后

var myFeature = vectorSource.getFeatureById('feature1');

myFeature.getGeometry().setCoordinates(ol.proj.transform([lon, lat], 'EPSG:4326', 'EPSG:3857'));

这应该立即更新功能,而无需任何重绘调用 - OL 在功能更新时重绘图层。使用这种方法,我在屏幕上显示了数百个具有复杂几何形状的特征,而没有重大的速度损失。

关于javascript - 修改 OpenLayers 3 中现有图层的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31808405/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com