如何在OpenLayers中混合具有不同坐标系的图层?
我正在使用OpenLayers地图,我想在其中使用不同的地图服务器,它使用不同的坐标系。 OpenLayers能否将其集成到同一张地图中并自动转换坐标系?如何在OpenLayers中混合具有不同坐标系的图层?
根据图层的不同,您将始终拥有某种您无法真正转换的底层(地图)。如果您想要在该地图上添加数据(标记,geo json东西等),则必须将其转换为基础层使用的投影。
// defining our coordinate systems
var google = new OpenLayers.Projection("EPSG:900913"),
latlon = new OpenLayers.Projection("EPSG:4326");
// transforming the location to the right coordinate system
var location = new OpenLayers.LonLat(10, 10).transform(latlon, google);
// assuming you made an icon and marker layer
var marker = new OpenLayers.Marker(location, icon);
markerLayer.addMarker(marker);
检查出的OpenLayers文档有关在系统之间转换位置到另一个位置:
对于这种标记可以通过easyly来完成。
如果地图服务器提供了不同的栅格,那么你可能会倒霉。然而,如果他们正在提供向量(例如KML文件)或JavaScript写入的地图对象(例如Dre的答案),那么您可以在不同的投影之间进行变换,以便所有数据都出现在相同的投影和坐标系统上作为底图。 OpenLayers有这个钩子(请参阅Dre的答案),但您可能需要包含提供该功能的Proj4JS库。
或者您可以自己使用Proj4JS在绘图之前转换坐标。
这是一个古老的问题,但我从搜索中发现了这种情况,并认为如果这对他人有帮助,我可能会发出警告。
这可能与所提问题面临的情况有所不同,但最近我遇到了类似的情况。就我而言,我需要在一张地图上显示来自两个不同WMS提供者的输出。一个在EPSG:900913提供服务,另一个在EPSG:3857提供服务。知道这些,我想我是否可以用服务工作的方式请求他们,以便地图能够处理输出。我的地图位于900913(因此其他服务默认使用此投影请求)。
我如何能够获得被请求正确是其他服务如下(填写您的信息):
var myLayer = new OpenLayers.Layer.WMS(
"Name",
"URL", {
"layer": "layer"
});
myLayer.projection = "EPSG:3857";
通常附加?request=getCapabilities
到服务网址将允许你看看有什么预测是可用来自所需层的CRS标签中的服务。