我需要显示一个地图(世界地图,使用默认的 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
类型。但是我从未做过这样的应用。只是一个看起来合理的建议。