使用Basemap将经纬度转XY坐标时出现超大值问题求助
解决Basemap绘制位置点时XY值异常的问题
问题根源:你调用
Basemap实例的坐标转换方法时,参数顺序搞反了!Basemap的m(lon, lat)方法要求先传经度,再传纬度,但你写的是m(37.5,-122.5)——把纬度(37.5)放在了经度的位置,经度(-122.5)放在了纬度的位置,这直接导致纬度值超出了你设置的投影范围(35-40),所以返回了异常的1e+30(代表超出范围的无效值)。修正后的代码:
from mpl_toolkits.basemap import Basemap m = Basemap(projection='merc',llcrnrlat=35,urcrnrlat=40,\ llcrnrlon=-125,urcrnrlon=-120,resolution='c') # 调换参数顺序:先经度(-122.5),再纬度(37.5) x,y = m(-122.5, 37.5) print(x,y)
- 验证结果:运行修正后的代码,会得到正常的投影坐标:
(17662053.21565348, 4227787.281473132)
- 额外提醒:
- 所有Basemap的坐标转换方法(包括
m()、m.scatter()里的坐标输入)都是先经度后纬度,和我们日常习惯的“纬度在前经度在后”相反,很容易踩坑; - 如果后续要批量转换坐标,可以把经纬度列表按
(lon_list, lat_list)的格式传入,避免逐个出错。
- 所有Basemap的坐标转换方法(包括
内容的提问来源于stack exchange,提问作者kyi154
相关产品推荐
相关产品推荐

