首页 > 解决方案 > Basemap 和 proj 得到不同的投影结果

问题描述

我正在努力理解使用 pyproj 的预测。

现在我的问题是了解投影操作的结果

我在 x,y 上投影了以下坐标:

from mpl_toolkits.basemap import Basemap
import pyproj

lon  = [3.383789, 5.822754]
lat = [48.920575, 53.72185]

# with Basemap
M = Basemap(projection='merc',ellps = 'WGS84')
q1, q2 = M(lon, lat)
for a,b in zip([x for x in q1], [x for x in q2]):
    print(a,b)
# with pyproj
from pyproj import Proj
p = Proj(proj='merc', ellps='WGS84',errcheck = True)
p1 = Proj(proj='latlong', datum='WGS84',errcheck = True)
print(p(3.383789, 48.920575), p(5.822754, 53.72185))
print(p1(3.383789, 48.920575), p1(5.822754, 53.72185))

20414190.011221122 65799915.8523339 20685694.35308374 66653928.94763097 (376681.6684318804, 6229168.979819128) (648186.0102944968, 7083182.075116195) (0.0590582592427664, 0.8538251057188​​251) (0.10162622883366988, 0.9376231627625158)

为什么我在地理空间数据处理中使用与新手相同的投影参数时结果不同我提前为一个可能微不足道的问题道歉

标签: matplotlib-basemapproj

解决方案


对于墨卡托投影,底图使用位于可计算值左下方范围的格网坐标系的原点。使用您的代码,这些值可以计算为

M(0, 0, inverse=True)
# output: (-180.0, -89.98999999999992)

如果您计算 (long=0, lat=0) 的投影坐标并将值分配给 (x0, y0)。您会得到坐标 (x0, y0) 的变化,使其投影坐标不同于标准值(地图中心的 0,0)。

lon0, lat0 = 0, 0
x0, y0 = M(lon0, lat0)
# x0=20015077.371242613, y0=59546805.8807

对于 (long=3.383789, lat=48.920575) 的测试点,

lon1 = 3.383789
lat1 = 48.920575
x1, y1 = M(lon1, lat1)

应用坐标偏移后,结果是

print(x1-x0, y1-y0)
# output: (376259.9924608879, 6254386.049398325)

当与来自的值进行比较时pyproj

p0 = Proj(proj='merc', ellps='WGS84', errcheck = True)
print(p0(lon1, lat1))
# output (376681.6684318804, 6229168.979819128)

他们非常同意,但并不接近。对于小比例地图绘制,您看不到地图上的差异。


推荐阅读