底图中的坐标与真实坐标不符

Coordinates in Basemap don't match the real ones

对于我的团队项目,我正在尝试使用 Python 获取我所在城市的地图并在其上绘制热图。我正在使用 Basemap 和 matplotlib。

我发现选择 epsg=3003 可以获得足够的图形结果,但问题是如果我想在地图上可视化一个精确的坐标,例如 lat=45.0306 和 long=7.42,它会显示一个不同的点关于我用 Google Earth 得到的那个。

由于我需要绘制非常精确和接近坐标的数据,因此获得准确的地图是必不可少的。

谁能帮我写代码?

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np

map = Basemap(llcrnrlat=45,urcrnrlat=45.4,
    llcrnrlon=7.41,urcrnrlon=7.8,resolution='h', epsg=3003)
map.arcgisimage(service='ESRI_StreetMap_World_2D', xpixels = 3000, verbose= True)
plt.show()

问题是您使用的是两个不同的投影系统。 Google 地球使用 WGS84,其 epsg 代码为:3857 但您使用 EPSG:3003 设置地图。最好的方法就是在定义底图时更改地图的投影。或者,如果你真的想使用 EPSG:3003 那么你必须重新投影你从 Google 地球获得的坐标(你可能想看看这个 answer

这里有一个小例子来说明通过使用正确的投影你可以很好地匹配 google 地图结果:

map = Basemap(llcrnrlat=45.245,urcrnrlat=45.255,
      llcrnrlon=7.54,urcrnrlon=7.55,resolution='h', epsg=4326)
map.arcgisimage(service='ESRI_StreetMap_World_2D', xpixels = 3000, verbose= True)
plt.plot(7.544335,45.250423,marker='+',markersize=15,color='Red')

这里是来自底图的地图和 google 地图截图: