3

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

4

3 回答 3

3

根据图层的不同,您将始终拥有某种无法真正转换的基础图层(地图)。如果您想在该地图上添加数据(标记、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 文档。

于 2009-04-23T15:00:42.413 回答
2

如果地图服务器提供不同的栅格,那么您可能不走运。

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

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

于 2010-11-19T13:47:10.543 回答
2

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

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

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

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

myLayer.projection = "EPSG:3857";

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

于 2014-05-22T19:00:18.890 回答