1

我有一个带有球形墨卡托投影的简单WMS图层的地图(由 OSM-Mapnik-TileCache 服务器堆栈渲染,一切都在EPSG:900913 / EPSG:3857中)。

首先:我不明白为什么,如果 Leaflet 使用 CRS EPSG:3857,其单位是,我仍然必须以 WGS84 格式提供坐标,如maxBoundscenter,它使用degree。是不是 API 不一致?

第二:我需要渲染一个以 WGS84 坐标 ( EPSG:4326 ) 表示的GeoJSON特征,但形状明显变形(见下图)。我应该形状从 EPSG:4326 转换为 EPSG:3857 吗?如何?如果我这样做,我将以米为单位表示坐标,而 Leaflet 仍然需要度数。我该如何解决这个问题?

我对 OpenLayers 中的一个简单 wms 层和一个 GeoJSON 覆盖进行了仔细检查,它工作正常,所以我证明数据中没有失真。

有什么线索吗?

这是测试GeoJSON,希望有人能理解问题的原因:

{
    "type": "Polygon",
    "coordinates": [
        [
            [14.740017498458682, 40.673078870109705],
            [14.740132563378529, 40.673283531348574],
            [14.741625561383819, 40.67246759585111],
            [14.741671820229074, 40.672308542443076],
            [14.74151049646397, 40.672262934612235],
            [14.740017498458682, 40.673078870109705]
        ]
    ]
}

传单上的示例图片

OpenLayers 上的示例图像

4

1 回答 1

1

首先:我不明白为什么,如果 Leaflet 使用 CRS EPSG:3857,其单位是米,我仍然必须提供 WGS84 格式的坐标,如 maxBounds 和 center,它使用度数。是不是 API 不一致?

数据中的投影不同于显示投影。Leaflet 的输入是 WGS84 中的纬度/经度,默认输出是墨卡托,在 EPSG:3857 中。EPSG:3857 很少用于数据编码。

但形状明显变形(见下图)。

这就是预测:这是扭曲的,因为预测就是扭曲。

我应该将形状从 EPSG:4326 转换为 EPSG:3857 吗?

Leaflet 已经在内部执行此操作,您无需手动执行此操作。

我对 OpenLayers 中的一个简单 wms 层和一个 GeoJSON 覆盖进行了仔细检查,它工作正常,所以我证明数据中没有失真。

您的 OpenLayers 地图具有 EPSG:4326 作为其显示投影,而您的 Leaflet 地图具有 EPSG:3857:这就是为什么一个是不同的形状。

于 2014-03-14T15:19:08.710 回答