在Leaflet.js球形墨卡托WMS地图上扭曲的GeoJSON形状

时间:2014-03-14 14:49:37

标签: javascript map leaflet projection wgs84

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

首先:我无法理解为什么,如果Leaflet使用CRS EPSG:3857 ,其单位 ,我仍然必须以WGS84格式提供坐标,如 maxBounds center ,它使用 。它是API不一致吗?

第二:我需要呈现以WGS84坐标( EPSG:4326 )表示的 GeoJSON 特征,但形状明显失真(参见下面的图片)。我应该 转换 形状从EPSG:4326到EPSG:3857?怎么样?如果我这样做,我会用米表示坐标,而Leaflet仍然需要度数。我怎么能解决这个问题?

我在OpenLayers和GeoJSON叠加层中使用简单的wms图层进行了双重检查,它运行正常,因此我证明了数据中没有失真。

有任何线索吗?

以下是测试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]
        ]
    ]
}

Example image on Leaflet

Example image on OpenLayers

1 个答案:

答案 0 :(得分:1)

  

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

数据中的预测与显示预测不同。 Leaflet的输入是WGS84中的lat / lon,默认输出是mercator,EPSG:3857。 EPSG:3857很少用于数据编码。

  

但形状明显扭曲(见下图)。

这就是预测:这是因为投影 失真而失真。

  

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

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

  

我使用OpenLayers中的简单wms图层和GeoJSON叠加层进行了双重检查,它工作正常,因此我证明了数据中没有失真。

你的OpenLayers地图有EPSG:4326作为显示投影,而你的宣传单地图有EPSG:3857:这就是为什么一个是不同的形状。