向量数据(点)在MAP(OpenLayers)上的错误位置绘制



我需要显示一个地图(世界地图,使用默认的 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 and Lon是0,0)。问题:为什么会发生这种情况,我可以修复它吗?我只需要找到正确位置的点即可。当我在控制台上打印这一点时,悖论表明点LAN和LON是根据需要的(定义)。但是它仍然处于错误的位置...

您的地图在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。由于您将最大值设置为6000,因此仅可见地图的一小部分,并且功能可能不超出地图边界。

map.zoomToMaxExtent();
map.setCenter([point.x, point.y]);

似乎new OpenLayers.Feature.Vector()使用OpenLayers.Geometry,但不使用OpenLayers.Geometry.Point类型。但是我从未做过这样的应用。只是一个看起来合理的建议。

最新更新