移动OpenLayers.Feature.Vector或OpenLayers.Geometry.Point失败

移动OpenLayers.Feature.Vector或OpenLayers.Geometry.Point失败,vector,openlayers,point,markers,Vector,Openlayers,Point,Markers,注意:这与以下情况不同: 我有一个简单的openlayers地图项目。我需要显示并移动一些向量 我创建了这样的向量,效果很好: var feature = new OpenLayers.Feature.Vector( new OpenLayers.Geometry.Point( unit.lon,unit.lat ).transform(epsg4326, projectTo), {description:'This is the valu

注意:这与以下情况不同:

我有一个简单的openlayers地图项目。我需要显示并移动一些向量

我创建了这样的向量,效果很好:

var feature = new OpenLayers.Feature.Vector(
new OpenLayers.Geometry.Point( unit.lon,unit.lat ).transform(epsg4326, projectTo),
                            {description:'This is the value of<br>the description attribute'} ,
                            {externalGraphic: '/assets/admin/layout/img/avatar/' + unit.id + '.png', graphicHeight: 74, graphicWidth: 60, graphicXOffset:-12, graphicYOffset:-25  }
                    );

feature.id = unit.id;
vectorLayer.addFeatures(feature);
另一个是:

var feature = vectorLayer.getFeatureById(unit.id);
feature.geometry.move(unit.lon, unit.lat);
vectorLayer.redraw();
据我所知,上次移动方法使用像素差异。但我不想使用差异。相反,直接使用精确的经度和纬度参数

那么,以编程方式将向量/点移动到精确位置的方法是什么

我的项目中有谷歌地图和OSM,投影问题会是个问题吗

我刚开始开发openlayers。
任何帮助都将不胜感激。

很可能与投影有关。如果你使用谷歌地图和OSM,那么你的坐标系是3857(球面墨卡托),单位是米。您需要先将lat/lon转换为该值,然后调用move,例如

var fromProj = new OpenLayers.Projection("EPSG:4326");
var toProj = new OpenLayers.Projection("EPSG:3857");
var point = new OpenLayers.LonLat(-1, 52);
point.transform(proj, toProj);
feature.geometry.move(point);
这本书里有一些有用的信息

还可以在地图构造函数中设置mapProjection和displayProjection,然后可以使用:

point.transform(fromProj, map.getProjectionObject()) as well.

有关设置地图投影属性的更多信息,请参见此部分。

它很可能与投影相关。如果你使用谷歌地图和OSM,那么你的坐标系是3857(球面墨卡托),单位是米。您需要先将lat/lon转换为该值,然后调用move,例如

var fromProj = new OpenLayers.Projection("EPSG:4326");
var toProj = new OpenLayers.Projection("EPSG:3857");
var point = new OpenLayers.LonLat(-1, 52);
point.transform(proj, toProj);
feature.geometry.move(point);
这本书里有一些有用的信息

还可以在地图构造函数中设置mapProjection和displayProjection,然后可以使用:

point.transform(fromProj, map.getProjectionObject()) as well.

有关设置地图投影属性的更多信息,请参见此部分。

它很可能与投影相关。如果你使用谷歌地图和OSM,那么你的坐标系是3857(球面墨卡托),单位是米。您需要先将lat/lon转换为该值,然后调用move,例如

var fromProj = new OpenLayers.Projection("EPSG:4326");
var toProj = new OpenLayers.Projection("EPSG:3857");
var point = new OpenLayers.LonLat(-1, 52);
point.transform(proj, toProj);
feature.geometry.move(point);
这本书里有一些有用的信息

还可以在地图构造函数中设置mapProjection和displayProjection,然后可以使用:

point.transform(fromProj, map.getProjectionObject()) as well.

有关设置地图投影属性的更多信息,请参见此部分。

它很可能与投影相关。如果你使用谷歌地图和OSM,那么你的坐标系是3857(球面墨卡托),单位是米。您需要先将lat/lon转换为该值,然后调用move,例如

var fromProj = new OpenLayers.Projection("EPSG:4326");
var toProj = new OpenLayers.Projection("EPSG:3857");
var point = new OpenLayers.LonLat(-1, 52);
point.transform(proj, toProj);
feature.geometry.move(point);
这本书里有一些有用的信息

还可以在地图构造函数中设置mapProjection和displayProjection,然后可以使用:

point.transform(fromProj, map.getProjectionObject()) as well.

有关设置地图投影属性的更多信息,请参见此部分。

我相信,用于创建矢量特征的点已指定给该特征的几何属性

尝试在第一个示例中设置feature.geometry.x和feature.geometry.y,而不是设置feature.point

更新为,主要部分为:

    var targetLoc = new OpenLayers.LonLat(-16, 50).transform(epsg4326, projectTo);
    feature.geometry.x = targetLoc.lon;
    feature.geometry.y = targetLoc.lat;
    vectorLayer.redraw();

我相信,用于创建矢量特征的点被指定给该特征的几何特性

尝试在第一个示例中设置feature.geometry.x和feature.geometry.y,而不是设置feature.point

更新为,主要部分为:

    var targetLoc = new OpenLayers.LonLat(-16, 50).transform(epsg4326, projectTo);
    feature.geometry.x = targetLoc.lon;
    feature.geometry.y = targetLoc.lat;
    vectorLayer.redraw();

我相信,用于创建矢量特征的点被指定给该特征的几何特性

尝试在第一个示例中设置feature.geometry.x和feature.geometry.y,而不是设置feature.point

更新为,主要部分为:

    var targetLoc = new OpenLayers.LonLat(-16, 50).transform(epsg4326, projectTo);
    feature.geometry.x = targetLoc.lon;
    feature.geometry.y = targetLoc.lat;
    vectorLayer.redraw();

我相信,用于创建矢量特征的点被指定给该特征的几何特性

尝试在第一个示例中设置feature.geometry.x和feature.geometry.y,而不是设置feature.point

更新为,主要部分为:

    var targetLoc = new OpenLayers.LonLat(-16, 50).transform(epsg4326, projectTo);
    feature.geometry.x = targetLoc.lon;
    feature.geometry.y = targetLoc.lat;
    vectorLayer.redraw();

从上面的代码中,我看不出您提供了“unit.lon,unit.lat”任何新值,您已经这样做了吗?您还使用point.clearBounds,这意味着向量的边界将为null,它将不显示任何内容。unit.lon和unit.lat每次都有新值。我已经查过了@JSCI从一个示例中复制了“clear bounds”代码,实际上我不知道它是如何工作的@JSC从上面的代码中,我看不出您提供了“unit.lon,unit.lat”任何新值,您已经这样做了吗?您还使用point.clearBounds,这意味着向量的边界将为null,它将不显示任何内容。unit.lon和unit.lat每次都有新值。我已经查过了@JSCI从一个示例中复制了“clear bounds”代码,实际上我不知道它是如何工作的@JSC从上面的代码中,我看不出您提供了“unit.lon,unit.lat”任何新值,您已经这样做了吗?您还使用point.clearBounds,这意味着向量的边界将为null,它将不显示任何内容。unit.lon和unit.lat每次都有新值。我已经查过了@JSCI从一个示例中复制了“clear bounds”代码,实际上我不知道它是如何工作的@JSC从上面的代码中,我看不出您提供了“unit.lon,unit.lat”任何新值,您已经这样做了吗?您还使用point.clearBounds,这意味着向量的边界将为null,它将不显示任何内容。unit.lon和unit.lat每次都有新值。我已经查过了@JSCI从一个示例中复制了“clear bounds”代码,实际上我不知道它是如何工作的@jsc实际上,move方法的签名是point.move(x,y),如下所示:。您可以直接设置它们,但这不是问题所在。
移动(x,y)
将点移动给定偏移量,不是吗?我添加了一个简单的提琴来演示这个例子。实际上,move方法的签名是point.move(x,y),如图所示:。您可以直接设置它们,但这不是问题所在。
移动(x,y)
将点移动给定偏移量,不是吗?我添加了一个简单的提琴来演示这个案例。实际上,这个符号