如何将矢量要素从地图上的一个位置移动到另一个位置?
我有以下内容在(0.0,0.0)处生成一个图标:
var iconFeature = new ol.Feature({
geometry: new ol.geom.Point([0.0,0.0])
});
var iconStyle = new ol.style.Style({
image: new ol.style.Icon(({
anchor: [0.5, 46],
anchorXUnits: 'fraction',
anchorYUnits: 'pixels',
opacity: 0.75,
src: 'marker-icon.png'
}))
});
iconFeature.setStyle(iconStyle);
这很好用,但我现在如何将它移到另一个位置?
我试过了:
iconFeature.move(x,y);
我也试过
iconFeature.geometry.move(x,y);
后者说iconFeature.geometry是未定义的,第一个说icon.move()不是函数。
关于SO的先前答案提出了这些解决方案,但它们似乎并不适用于我。
答案 0 :(得分:5)
实际上,您可以使用新的ol.coordinate.add
方法执行此操作,请参阅the docs.
我添加了一个jsFiddle来证明这一点,红点是原始点,而绿点是那些随机移动的点。
要获得积分,请在矢量源上使用forEachFeature
,使用getGeometry().getCoordinates()
获取实际坐标,然后使用setGeometry
,例如
vectorSource.forEachFeature(function(feature){
var coordinate = feature.getGeometry().getCoordinates();
//move coordinates some distance
ol.coordinate.add(coordinate, 10, 10);
//use setGeometry to move it
feature.setGeometry(new ol.coordinate);
}
);
在这个小提琴中,我创建了一个新的几何体,而不是移动现有的几何体。显然,对于除点之外的其他东西,您必须遍历坐标数组。要仅移动特定几何体,可以使用getFeatureById
method of ol.Feature来获取特定要素,然后可以移动和更新其几何体,如上所述。
答案 1 :(得分:2)
用于移动几何的Future
方法:
translate
NB,那是相对移动的。如果要将点移动到绝对位置,则必须计算原始位置和所需位置之间的距离。