矢量数据(点)绘制在地图上的错误位置(OpenLayers)

时间:2012-10-28 19:06:20

标签: javascript vector openlayers point

我需要显示一张地图(世界地图,使用默认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是根据需要(如定义的那样)。但它仍然在错误的地方......

2 个答案:

答案 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类型。但我从来没有做过这样的应用程序。只是一个看似合理的建议。