底图中的重复地图

时间:2018-09-26 00:12:54

标签: python matplotlib-basemap

如何在底图的经度图上对卫星轨道进行重复?

Like this map

为了获得连续的卫星轨道,我尝试了不同的llcrnrlonurcrnrlon。对于llcrnrlon=-180urcrnrlon为主要值180的集合{(打算重复一些子午线),底图不会生成地图

This is the current map of the satellite track

1 个答案:

答案 0 :(得分:0)

您可以将-360的最小值传递给llcrnrlon,将最大值720传递给urcrnrlon(在更大程度上Basemap会抱怨) 。通过这种设置,Basemap的某些功能会产生重复的图像。最好只举一个例子:

from matplotlib import pyplot as plt
from mpl_toolkits import basemap
import numpy as np
fig, ax = plt.subplots(figsize=(15,6))

lonmin = -360
lonmax = 720
latmin = -90
latmax = 90

##setting up the map
bmp = basemap.Basemap(
    ax=ax,
    llcrnrlat=latmin, llcrnrlon=lonmin,
    urcrnrlat=latmax, urcrnrlon=lonmax,
    )
bmp.drawcoastlines()
bmp.drawcountries()
bmp.drawmapboundary(fill_color='cyan')
bmp.fillcontinents(color='coral')
##bmp.arcgisimage() <-- does not work
##bmp.bluemarble() <-- works to some extent

##drawing a fake track
lons = np.linspace(lonmin, lonmax, 200)
rads = lons/150*np.pi
lats = np.sin(rads)*0.95*latmax
bmp.plot(lons,lats, 'r--', lw=5)
plt.show()

结果图像如下:

result of the above code

如您所见,地图的最后一部分(右侧)不再绘制,因此最好将540的约束约束为urcrnrlon的最大值。我还有两个背景图片功能。 arcgisimage()引发并出错,它无法处理跨越日期边界的地图,但是bluemarble()可以工作,即使仅在较小的区域也是如此。如果您希望地图重复的次数更多,我认为您必须stitch将多个轴放在一起,然后将数据分成多个部分,然后将其绘制在各个地图上。