【发布时间】:2017-02-16 13:23:52
【问题描述】:
我从第 3 方 API 中提取数据,该 API 为我提供了纬度/经度坐标以及该点的状态。我目前能够成功地绘制点并在第一次迭代中为它们的状态提供正确的样式。但是,如果状态发生变化,我需要每 3 秒更新一次他们的样式。我曾尝试使用mySource.changed(),但它不起作用。我环顾四周,找不到解决方案,即使这似乎不应该是一件很难完成的事情?
我还尝试每 3 秒 clear() 我的源,但随后矢量图层“闪烁”,我需要它无缝更新。我还尝试删除/重新添加整个矢量图层。我需要使用样式功能吗?还是功能叠加?为什么我不能像在谷歌地图或传单中那样覆盖样式?
我的风格
var takenStyle = new ol.style.Style({
image: new ol.style.Icon({
src: '../_images/redMark.png',
scale: .2
})
});
var openStyle = new ol.style.Style({
image: new ol.style.Icon({
src: '../_images/greenMark.png',
scale: .2
})
});
var unsureStyle = new ol.style.Style({
image: new ol.style.Icon({
src: '../_images/yellowMark.png',
scale: .2
})
});
我如何分配样式/功能
if ((data.scopes[i].parking_spot.status === true)) {
var feature = new ol.Feature({
geometry: new ol.geom.Point(ol.proj.transform(pointCoords, 'EPSG:4326', 'EPSG:3857'))
});
feature.setStyle(takenStyle);
feature.setId(i);
pointSource.addFeature(feature);
更新:使用 Navageer Gowda 的建议,我终于能够弄清楚这一点。我创建了第二个函数,并让它遍历功能以更新样式。
if ((data.scopes[i].parking_spot.occupied === true && data.scopes[i].parking_spot.occupied === lastCheck[i].occupied)) {
theFeatures[i].setStyle(takenStyle);
}
【问题讨论】:
-
你试过
feature.changed()的方法吗? see it -
是的,我试过了。似乎什么也没发生。我也尝试在 pointSource 上使用它。但没有运气。我会在我设置样式的 if 语句中调用我的 feature.changed() 吗?
-
是的,我想是的。你能为我们展示你所有的代码吗?我将创建一个 jsfiddle 并尝试对其进行调试以更好地帮助您。
-
是的,我将添加我拥有的所有内容。这是相当多的。还值得注意的是,如果我添加 pointSource.clear(),样式将正确更改。但我需要更新才能无缝。