matplotlib-basemap - 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.8538251057188251) (0.10162622883366988, 0.9376231627625158)
为什么我在地理空间数据处理中使用与新手相同的投影参数时结果不同我提前为一个可能微不足道的问题道歉
解决方案
对于墨卡托投影,底图使用位于可计算值左下方范围的格网坐标系的原点。使用您的代码,这些值可以计算为
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)
他们非常同意,但并不接近。对于小比例地图绘制,您看不到地图上的差异。
推荐阅读
- javascript - 文档和集合参考之间的区别
- digital-ocean - 错误损坏的标头:“在 Kubernates 上使用 LetsEncrypt 获取 /.well-known/acme-challeng
- python - Python 字典更新在 for 循环中不起作用
- google-apps-script - 使用 Google Apps 脚本根据日期更改 Google 表格中的下拉列表单元格
- c# - 如何为 RichTextBox 中的所有 Regex.Matches 着色
- powershell - PowerShell : - 无法索引到空数组。使用来自 Invoke-SqlCmd 的数据集
- javascript - Javascript 不等待读取 json 文件
- python - 有没有办法让 python 多次重复打印输入函数,同时仍然在 python 中得到答案?
- android - 更改导航抽屉组标题文本的颜色
- c# - Blazor 请求 json 文件