我在球形墨卡托投影中有一个简单的 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]
]
]
}
答案 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:这就是为什么一个是不同的形状。