2014-10-31 175 views
4

如何将矢量要素从地图上的一个位置移动到另一个位置?在OpenLayers中将功能从一个位置移动到另一个位置3

我有一个在(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

解决方案发布,它可以完成,只是没有很多文件。 – 2014-11-01 10:48:40

回答

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来获取特定的特征,然后可以移动和更新其几何图形,如上所述。

+0

谢谢你,一个很好的解决方案和很好的例子来证明它。对于单个兴趣点而言,OL3叠加层也是使用setPosition()来移动它们的解决方案,这是我的临时解决方案。 – 2014-11-01 10:59:11

+1

不客气。我开始享受OL3,作为一个很长时间的OL2开发,在整个重写的最初震动因素已经磨损后:D – 2014-11-01 22:28:11

+0

jsfiddle无效,它指向ol.js不存在的位置 – Icarus 2017-08-23 09:20:14

2

translate方法用于移动几何:

iconFeature.getGeometry().translate(deltaX, deltaY); 

NB,这对相对运动。如果您想将点移动到绝对位置,则必须计算原始位置和所需位置之间的距离。

相关问题