Map 如何在OpenLayers中混合具有不同坐标系的层?

Map 如何在OpenLayers中混合具有不同坐标系的层?,map,openlayers,mapserver,proj4js,Map,Openlayers,Mapserver,Proj4js,我正在使用OpenLayers地图,我想在其中使用不同的地图服务器,它们使用不同的坐标系。OpenLayers能否将其集成到同一地图中并自动转换坐标系?根据图层的不同,您将始终拥有某种无法真正转换的基本图层(地图)。如果要在该地图上添加数据(标记、geo json等),必须将其转换为baselayer正在使用的投影 对于标记,可通过以下方式轻松完成: // defining our coordinate systems var google = new OpenLayers.Projection

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

根据图层的不同,您将始终拥有某种无法真正转换的基本图层(地图)。如果要在该地图上添加数据(标记、geo json等),必须将其转换为baselayer正在使用的投影

对于标记,可通过以下方式轻松完成:

// 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文档,了解如何将位置从一个系统转换到另一个系统。

如果地图服务器提供不同的光栅,那么您可能运气不好

但是,如果它们提供矢量(例如KML文件)或JavaScript编写的地图对象(例如Dre的答案),则可以在不同的投影之间进行转换,以便所有数据显示在与底图相同的投影和坐标系上。OpenLayers为此提供了钩子(请参见Dre的答案),但您可能必须包含提供该功能的Proj4JS库


或者你可以自己使用Proj4JS在绘图之前转换坐标。

这是一个老问题,但我在搜索中发现了这个问题,我想我可能会插话,以防这对其他人有帮助

这可能与提出的问题所面临的情况有所不同,但我最近遇到了类似的情况。在我的例子中,我需要在一张地图上显示来自两个不同WMS提供者的输出。其中一个在EPSG:900913中提供服务,另一个在EPSG:3857中提供服务。知道了这些,我想如果我能够以一种让服务工作的方式请求它们,那么map就能够处理输出。我的地图位于900913(因此其他服务要求默认使用此投影)

我是如何正确请求其他服务的(请填写您的信息):

通常,将
?request=getCapabilities
附加到服务URL将允许您在所需层的CRS标记中查看服务的可用投影

var myLayer = new OpenLayers.Layer.WMS(
    "Name",
    "URL", {
        "layer": "layer"
    });

myLayer.projection = "EPSG:3857";