我需要显示一张地图(世界地图,使用默认OpenLayers
WMS)并在其上显示一个点(包括onhover等事件)。这是我的代码:
var options = {
projection: new OpenLayers.Projection("EPSG:900913"),
maxResolution: 6000
};
map = new OpenLayers.Map('map', options);
var wmsLayer = new OpenLayers.Layer.WMS(
"OpenLayers WMS",
"http://vmap0.tiles.osgeo.org/wms/vmap0",
{layers: 'basic'}
);
var vectors = new OpenLayers.Layer.Vector("Vector Layer");
point = new OpenLayers.Geometry.Point(20.088844299316406, 51.8321709083475);
vectors.addFeatures([new OpenLayers.Feature.Vector(point)]);
map.addLayers([wmsLayer, vectors]);
map.zoomToMaxExtent();
但是这段代码定位的点不是在正确的位置绘制的,而是在非洲附近的某个地方(那个地方lat和lon是0,0)。 问题:为什么会发生这种情况,我能解决吗?我只需将点找到正确的位置即可。悖论当我在控制台中打印这一点时,它会显示点lan和lon是根据需要(如定义的那样)。但它仍然在错误的地方......
答案 0 :(得分:1)
您的地图位于900913,并指向4326投影。你必须将它从4326转换为900913:
point = new OpenLayers.Geometry.Point(20.088844299316406, 51.8321709083475);
point.transform(
new OpenLayers.Projection("EPSG:4326"),
new OpenLayers.Projection("EPSG:900913")
);
另外,请考虑按功能对地图进行居中。 zoomToMaxExtent()的中心映射为0,0。由于您已将maxResolution设置为6000,因此只有一小部分地图可见且特征可能超出地图范围。
map.zoomToMaxExtent();
map.setCenter([point.x, point.y]);
答案 1 :(得分:0)
似乎new OpenLayers.Feature.Vector()
使用OpenLayers.Geometry
但不使用OpenLayers.Geometry.Point
类型。但我从来没有做过这样的应用程序。只是一个看似合理的建议。