Python Basemap 立体投影地图

8 投票
3 回答
2274 浏览
提问于 2025-04-17 04:58

我想在一个立体投影的地图上显示一些数值(这里是南极的地图,叫spstere)。如果我在一个圆柱形的地图上显示这些数值(叫cyl),一切都很正常:

m = Basemap(projection='cyl',llcrnrlon=-180,llcrnrlat=-90,urcrnrlon=180,urcrnrlat=90,resolution='i') 
CS = m.scatter(lon2,lat2,c=BT2,edgecolors='none',s=sz,cmap='gray')

现在我想在南极的立体投影地图上显示相同的数值,但我就是搞不定:

m = Basemap(projection='spstere',boundinglat=-10,lon_0=180,resolution='c')
CS = m.scatter(lon2,lat2,c=BT2,edgecolors='none',s=sz,cmap='gray')

无论我怎么做,我只看到大陆的轮廓,但没有任何数据。

3 个回答

0

只需要添加latlon这个关键词

m = Basemap(projection='spstere',boundinglat=-10,lon_0=180,resolution='c')
CS = m.scatter(lon2,lat2,c=BT2,s=sz,cmap='gray', latlon=True)

来自文档

如果将latlon关键词设置为True,那么x和y就会被理解为经度和纬度,单位是度。数据和经度会自动调整,以适应圆柱形和伪圆柱形地图的投影区域,同时x和y会转换为地图投影坐标。如果latlon设置为False(默认值),那么x和y就会被认为是地图投影坐标。

1

看起来你已经明白了,你需要把你的x和y坐标转换成“地图”坐标(相关的文档可以在这里找到:http://matplotlib.github.com/basemap/users/mapcoords.html):

spstereo = Basemap(projection='spstere',boundinglat=-10,lon_0=180,resolution='c')
x, y = spstereo(lons, lats)
spstereo.scatter(x, y)
3

我想我自己找到了答案。你需要做的是把经纬度坐标从圆柱投影转换成属于立体投影的x/y坐标。这其实很简单,首先像这样定义Basemap:

m = Basemap(projection='spstere',boundinglat=-10,lon_0=180,resolution='c')

然后就可以这样进行转换:

x,y = m(lon2,lat2)

最后用x/y坐标来绘制地图,比如:

CS = m.scatter(x,y,c=BT2,edgecolors='none',s=sz,cmap='gray')

这样对我来说是有效的 :)

撰写回答