在OpenLayers 3中将功能从一个位置移动到另一个位置

时间:2014-10-31 18:10:59

标签: javascript 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的先前答案提出了这些解决方案,但它们似乎并不适用于我。

2 个答案:

答案 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,那是相对移动的。如果要将点移动到绝对位置,则必须计算原始位置和所需位置之间的距离。