0

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

4

2 回答 2

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]);
于 2012-10-28T21:28:56.973 回答
0

Seems that new OpenLayers.Feature.Vector() uses OpenLayers.Geometry but not an OpenLayers.Geometry.Point type. But I never done such kind of app. Just a suggestion which looks reasonable.

于 2012-10-28T20:08:36.613 回答