1

我从上周开始研究传单,这个问题让我很生气。

数据库返回坐标以创建 Leaflet 标记(使用默认 Map.CRS EPSG3857),因此我决定使用 proj4js 将数据库坐标 4326 转换为 3857:

var iarCoordinate = [-76.495207812, 3.429960207],
    obSource = new proj4.Proj('EPSG:4326'),
    obDest = new proj4.Proj('EPSG:3857'),        
    obResult = new proj4.Point(iarCoordinate);
proj4.transform(obSource, obDest, obResult);
//obResult = [-8515407.581757482, 382049.6844491562]

这些[-8515407.581757482, 382049.6844491562]不代表正确的点。

如果我反转最初的 4326 坐标 [3.429960207,-76.495207812] 并直接设置为标记,它显示完美(没有任何 proj4 转换)。

1. 为什么这种转换在 Leaflet 上不起作用,或者我应该怎么做才能让它起作用?

2.为什么反转坐标似乎有效?

3.应该如何正确解决问题?

4

1 回答 1

3

Leaflet 使用纬度-经度,而 proj4 使用经度-纬度(或者,更一般地说,投影定义中指定的轴顺序,对于大多数投影来说,它是东-北)。

是的,有些软件使用 lat-long,而其他软件使用 long-lat,这很令人困惑。

如果您打算只使用EPSG:4326and EPSG:3857,请考虑使用 Leaflet 的内置L.CRS.EPSG3857.projectand L.CRS.EPSG.3857.unproject,记得查看Leaflet 的文档。这样,您将使用一个一致的轴顺序。

于 2018-01-31T09:45:15.693 回答