Matplotlib底图:放大到正投影

时间:2017-11-13 18:23:22

标签: python matplotlib matplotlib-basemap

我正在尝试在正投影中绘制一个区域,以便将它与来自卫星的图像一起分层 satellite image

所以我试图放大像here

这样的正交投影

使用此代码:

fig = plt.figure(figsize = (5,5))

map = Basemap(projection = 'ortho', lon_0 = 15, lat_0 = 68,\
               resolution = 'c')

lllon = 7
urlon = 21
lllat = 67
urlat = 70

xmin, ymin = map(lllon, lllat)
xmax, ymax = map(urlon, urlat)

ax = plt.gca()

ax.set_xlim([xmin, xmax])
ax.set_ylim([ymin, ymax])

map.drawcoastlines(linewidth = .1)
map.drawmeridians(np.arange(-180,180,1), linewidth = .01)
map.drawparallels(np.arange(-80,80,.25), linewidth = .01)

还有一些用于绘制线条,但这会导致图像在中心和比例上正确但不会裁剪到指定的区域,如下所示:

map

有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

问题中的代码会生成完整的正交投影,如the example中所示。

  

正交投影将地球显示为卫星(在地球上空无限高的轨道上)会看到它。

为了只显示部分内容,您可以将地图边缘提供给Basemap来电。

不幸的是you cannot use the lat/lon values for this,而是需要使用x,y值。

因此以下工作:

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

fig = plt.figure(figsize = (5,5))

m = Basemap(projection = 'ortho', lon_0 = 0, lat_0 = 10,
            llcrnrx=-3000000, llcrnry=1000000, urcrnrx=3000000, urcrnry=6000000, 
            resolution = 'c')

m.drawcoastlines(linewidth = 1)
m.drawcountries()

plt.show()

enter image description here

this thread中显示了一个不同的选项,即在绘制地图后设置轴限制。

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

fig = plt.figure(figsize = (5,5))

map = Basemap(projection = 'ortho', lon_0 = 15, lat_0 = 68,\
               resolution = 'l')

map.drawcoastlines(linewidth = 1)
map.drawmeridians(np.arange(-180,180,1), linewidth = 1)
map.drawparallels(np.arange(-80,80,.25), linewidth = 1)

lllon = 7
urlon = 21
lllat = 67
urlat = 70

xmin, ymin = map(lllon, lllat)
xmax, ymax = map(urlon, urlat)

ax = plt.gca()

ax.set_xlim([xmin, xmax])
ax.set_ylim([ymin, ymax])

plt.show()

enter image description here