我正在尝试显示三层地图(谷歌地图图层,wms图层和点图层)这是我的代码:
var map = new OpenLayers.Map({
div: "map",
maxExtent: new OpenLayers.Bounds(-20037508, -20037508, 20037508, 20037508.34)
});
var capaGoogle = new OpenLayers.Layer.Google(
"Google Satellite",
{ type: G_SATELLITE_MAP, sphericalMercator: true, transparent: true }
);
var wmsOverlay = new OpenLayers.Layer.WMS("OpenLayers WMS",
"http://localhost:1979/geoserver/wms",
{ layers: 'world:PYCIUDADES', transparent: true }, { isBaseLayer: false });
var vectorLayer = new OpenLayers.Layer.Vector("vector");
vectorLayer.addFeatures([
new OpenLayers.Feature.Vector(
new OpenLayers.Geometry.Point(-57.635021, -25.276987)
),
new OpenLayers.Feature.Vector(
new OpenLayers.Geometry.Point(-56.759034, -22.71539)
)
]
);
map.addLayers([wmsOverlay, vectorLayer, capaGoogle]);
map.addControl(new OpenLayers.Control.LayerSwitcher());
var center = new OpenLayers.LonLat(-57.58, -25.27).transform(
new OpenLayers.Projection("EPSG:4326"),
map.getProjectionObject()
)
map.setCenter(center, 6);
“vectorLayer”图层必须位于我的地图之上,但我得到了这个(我的wms图层在南美洲,我的点也必须在南美洲,但它们在非洲附近):
http://i45.tinypic.com/34y40zk.png
我该怎么办?
提前致谢
答案 0 :(得分:5)
你应该改变你的点的坐标:
var epsg4326 = new OpenLayers.Projection('EPSG:4326');
var epsg900913 = new OpenLayers.Projection('EPSG:900913');
vectorLayer.addFeatures([
new OpenLayers.Feature.Vector(
new OpenLayers.Geometry.Point(-57.635021, -25.276987).transform(epsg4326, epsg900913)
),
new OpenLayers.Feature.Vector(
new OpenLayers.Geometry.Point(-56.759034, -22.71539).transform(epsg4326, epsg900913)
)
]);
答案 1 :(得分:1)
“非洲旁边”=经度0纬度0
当您只输入经度和纬度时,OL认为这是WGS84投影(标准)。
但是由于您使用的是Google图层(CapaGoogle),这是一个以墨卡托为参考的投影,您最终会同时使用两个参考投影(4326 = WGS84和900913 = mercator)并且地图服务器会忽略您的标记的位置,因为他们“不正确”。因此,它只是将它们放在(0,0)。
正如DrNextGIS所说,你必须“转换你的点坐标”,以便地图上的所有内容都使用相同的投影。
如果您使用的是简单的OpenLayer地图(没有Google或OSM),则不会出现此问题。