更新openlayers 3中特征的坐标
Update coordinate of feature in openlayers 3
我在 javascript 中有一个模型,它具有纬度和经度值。我必须通过元素的 ID 在地图上找到一个特征并更新它的位置和其他几个属性。我的代码如下所示:
function updateCoordinate(item) {
var features = source.getFeatures();
var featureToUpdate;
// find feature by custom property
for(var i=0; i< features.length; i++) {
if (features[i].get('ID') == item.ID) {
featureToUpdate = features[i];
break;
}
}
// get lon, lat from input item
var lon = item.Coordinate.Longitude;
var lat = item.Coordinate.Latitude;
// update geometry (not working)
featureToUpdate.set('Geometry', new ol.geom.Point(getPointFromLongLat(lon, lat)));
// update custom properties (working)
featureToUpdate.set('MapMarkerTitle', item.Title);
// ...
}
function getPointFromLongLat (long, lat) {
return ol.proj.transform([long, lat], 'EPSG:4326', 'EPSG:3857')
}
我是不是做错了什么?有更好的方法吗?有没有更好的方法通过自定义查找特征属性?
自定义属性是指该功能是这样启动的:
var fea = new ol.Feature({
geometry: new ol.geom.Point(getPointFromLongLat(lon, lat)),
MapMarkerTitle : 'AAA',
// ...
})
source.addFeatures([fea]);
自定义属性正在更新,但坐标似乎没有更新。更新位置后是否会重新绘制特征?然而,标签被重新绘制,所以我认为是的。
更新
调试后我发现,我把 'geometry' 属性 拼错了大写。
实际上:
featureToUpdate.set('geometry', new ol.geom.Point(getPointFromLongLat(lon, lat)));
设置新位置并立即更新位置。我仍然想知道我正在做的是好方法还是更好。谢谢!
您可以将其简化为:
function updateCoordinate(item) {
var featureToUpdate = source.getFeatureById(item.ID);
var coord = getPointFromLongLat(item.Coordinate.Longitude, item.Coordinate.Latitude);
featureToUpdate.getGeometry().setCoordinates(coord);
featureToUpdate.set('MapMarkerTitle', item.Title);
}
我在 javascript 中有一个模型,它具有纬度和经度值。我必须通过元素的 ID 在地图上找到一个特征并更新它的位置和其他几个属性。我的代码如下所示:
function updateCoordinate(item) {
var features = source.getFeatures();
var featureToUpdate;
// find feature by custom property
for(var i=0; i< features.length; i++) {
if (features[i].get('ID') == item.ID) {
featureToUpdate = features[i];
break;
}
}
// get lon, lat from input item
var lon = item.Coordinate.Longitude;
var lat = item.Coordinate.Latitude;
// update geometry (not working)
featureToUpdate.set('Geometry', new ol.geom.Point(getPointFromLongLat(lon, lat)));
// update custom properties (working)
featureToUpdate.set('MapMarkerTitle', item.Title);
// ...
}
function getPointFromLongLat (long, lat) {
return ol.proj.transform([long, lat], 'EPSG:4326', 'EPSG:3857')
}
我是不是做错了什么?有更好的方法吗?有没有更好的方法通过自定义查找特征属性?
自定义属性是指该功能是这样启动的:
var fea = new ol.Feature({
geometry: new ol.geom.Point(getPointFromLongLat(lon, lat)),
MapMarkerTitle : 'AAA',
// ...
})
source.addFeatures([fea]);
自定义属性正在更新,但坐标似乎没有更新。更新位置后是否会重新绘制特征?然而,标签被重新绘制,所以我认为是的。
更新
调试后我发现,我把 'geometry' 属性 拼错了大写。 实际上:
featureToUpdate.set('geometry', new ol.geom.Point(getPointFromLongLat(lon, lat)));
设置新位置并立即更新位置。我仍然想知道我正在做的是好方法还是更好。谢谢!
您可以将其简化为:
function updateCoordinate(item) {
var featureToUpdate = source.getFeatureById(item.ID);
var coord = getPointFromLongLat(item.Coordinate.Longitude, item.Coordinate.Latitude);
featureToUpdate.getGeometry().setCoordinates(coord);
featureToUpdate.set('MapMarkerTitle', item.Title);
}