我正在使用OpenLayers-map,我想在其中使用不同的地图服务器,它们使用不同的坐标系。 OpenLayers可以将它集成到同一个地图中并自动转换坐标系吗?
答案 0 :(得分:3)
根据图层的不同,你总会得到某种你无法真正转换的基层(地图)。如果你想在地图上添加数据(标记,地理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关于将位置从一个系统转换为另一个系统的文档。
答案 1 :(得分:2)
如果地图服务器提供不同的栅格,那么你可能会运气不好。
但是,如果他们提供矢量(例如KML文件)或JavaScript编写的地图对象(例如Dre的答案),那么您可以在不同的投影之间进行转换,以便所有数据都显示在同一投影和坐标系上基本地图。 OpenLayers有这方面的钩子(参见Dre的答案),但您可能必须包含提供功能的Proj4JS库。
或者您可以自己使用Proj4JS在绘图前转换坐标。
答案 2 :(得分:2)
这是一个古老的问题,但我从搜索中发现了这一点,并认为如果这对其他人有帮助我可能会加入。
这可能与提出的问题所面临的情况有所不同,但最近我遇到了类似的情况。就我而言,我需要在一张地图上显示两个不同WMS提供商的输出。一个在EPSG提供服务:900913,另一个在EPSG:3857。知道这些are functionally equivalent,我想如果我能以一种使服务工作的方式请求它们,那么地图将能够与输出一起工作。我的地图位于900913(其他服务因此默认使用此投影请求。)
我如何才能正确请求其他服务如下(填写您的信息):
var myLayer = new OpenLayers.Layer.WMS(
"Name",
"URL", {
"layer": "layer"
});
myLayer.projection = "EPSG:3857";
通常将?request=getCapabilities
附加到服务URL将允许您查看所需图层的CRS标记中的服务可用的投影。