使用ol3 (Openlayers 3)改变图标的样式
Changing Style of the icon using ol3 (Openlayers 3)
我正在添加标记并使用getFeatureById()
更改其位置。是否有类似的方法来更新样式和图标来设置功能,而无需再次使用openlayers-3创建它?
目前我是这样做的:
function addArrowMarker(lat, long, angle, pointerimgsrc, arrowFlag) {
iconFeature = new ol.Feature({
geometry: new ol.geom.Point(ol.proj.transform([+long, +lat], 'EPSG:4326', 'EPSG:3857')),
name: 'NULL'
});
iconFeature.setId('arrowMarkerFeature');
iconStyle = new ol.style.Style({
image: new ol.style.Icon({
src: pointerimgsrc,
rotateWithView: true,
rotation: angle * Math.PI / 180,
anchor: [.5, .5],
anchorXUnits: 'fraction', anchorYUnits: 'fraction',
opacity: 1
})
});
iconFeature.setStyle(iconStyle);
vectorArrowSource[arrowFlag] = new ol.source.Vector({
features: [iconFeature]
});
vectorArrowLayer[arrowFlag] = new ol.layer.Vector({
source: vectorArrowSource[arrowFlag]
});
map.addLayer(vectorArrowLayer[arrowFlag]);
}
现在,如果角度有任何变化,那么我调用这个函数并再次设置一个新的样式,如下所示。
function changeArrowMarker(lat, long, angle, pointerimgsrc,arrowFlag) {
var myFeature = vectorArrowSource[arrowFlag].getFeatureById('arrowMarkerFeature');
myFeature.getGeometry().setCoordinates(ol.proj.transform([+long, +lat], 'EPSG:4326', 'EPSG:3857'));
iconStyle = new ol.style.Style({
image: new ol.style.Icon({
src: pointerimgsrc,
rotateWithView: true,
rotation: angle * Math.PI / 180,
anchor: [.5, .5],
anchorXUnits: 'fraction', anchorYUnits: 'fraction',
opacity: 1
})
});
myFeature.setStyle(iconStyle);
}
如果有更好的方法。请帮助! !
样式是不可变的,所以"改变"它们的正确方法是替换它们。
但是,根据您的需要,您应该考虑使用样式函数
function addArrowMarker(lat, long, angle, pointerimgsrc, arrowFlag) {
iconFeature = new ol.Feature({
geometry: new ol.geom.Point(ol.proj.transform([+long, +lat], 'EPSG:4326', 'EPSG:3857')),
name: 'NULL',
angle: angle
});
iconFeature.setId('arrowMarkerFeature');
iconStyleFunction = function(resolution){
return [new ol.style.Style({
image: new ol.style.Icon({
src: pointerimgsrc,
rotateWithView: true,
rotation: this.get('angle') * Math.PI / 180,
anchor: [.5, .5],
anchorXUnits: 'fraction', anchorYUnits: 'fraction',
opacity: 1
})
})];
};
iconFeature.setStyle(iconStyleFunction);
vectorArrowSource[arrowFlag] = new ol.source.Vector({
features: [iconFeature]
});
vectorArrowLayer[arrowFlag] = new ol.layer.Vector({
source: vectorArrowSource[arrowFlag]
});
map.addLayer(vectorArrowLayer[arrowFlag]);
}
这样,样式总是基于特征的"angle"属性计算。为了移动或旋转几何图形/图标,使用如下命令:
function changeArrowMarker(lat, long, angle, arrowFlag) {
var myFeature = vectorArrowSource[arrowFlag].getFeatureById('arrowMarkerFeature');
myFeature.getGeometry().setCoordinates(ol.proj.transform([+long, +lat], 'EPSG:4326', 'EPSG:3857'));
myFeature.set('angle', angle);
}
相关文章:
- 为什么我的引导手风琴图标在展开/折叠时没有改变
- 改变谷歌地图标记图标与不同的地方
- Bootstrap 3崩溃-随着职业的改变而改变图标
- 直接改变谷歌地图标记图标
- 如何改变一个contentscript变量点击Chrome扩展的图标
- 当按钮附加到标题时图标不改变
- 离子改变侧面菜单图标悬停和激活
- 我可以改变引导崩溃,只显示/展开时,单击一个图标
- 如何改变图标或图标的颜色在剑道ui网格过滤器
- 如何在jquery中改变引导图标的颜色
- JsTree:改变"打开"使用“类型”的文件夹图标插件
- 使字体awesome图标改变颜色时,选择菜单的变化
- 改变图标多次使用onclick使用javascript类似于gmail的星星图标
- 图标不改变悬停
- 改变谷歌地理图表标记为自定义png图标
- 使用ol3 (Openlayers 3)改变图标的样式
- 移动浏览器中图标颜色不改变
- 改变图标悬停
- 宣传单:根据缩放级别改变图标
- 手风琴切换不改变图标在引导3