如何在OpenLayers中混合使用不同坐标系的图层?

时间:2009-04-21 13:50:50

标签: map openlayers mapserver proj4js

我正在使用OpenLayers-map,我想在其中使用不同的地图服务器,它们使用不同的坐标系。 OpenLayers可以将它集成到同一个地图中并自动转换坐标系吗?

3 个答案:

答案 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标记中的服务可用的投影。