Ответ 1
Вы можете добавить matplotlib.patches.Polygon() прямо к своим осям. Вопрос в том, хотите ли вы, чтобы ваши прямоугольники определяли координаты участка (прямые линии на графике) или в координатах карты (большие круги на графике). В любом случае вы указываете вершины в координатах карты, а затем преобразуете их в график координат, вызывая экземпляр Basemap (m()
в приведенном ниже примере), самостоятельно создавайте Polygon и добавляйте его вручную к отображаемым осям.
Для прямоугольников, определенных в графических координатах, здесь приведен пример:
from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
def draw_screen_poly( lats, lons, m):
x, y = m( lons, lats )
xy = zip(x,y)
poly = Polygon( xy, facecolor='red', alpha=0.4 )
plt.gca().add_patch(poly)
lats = [ -30, 30, 30, -30 ]
lons = [ -50, -50, 50, 50 ]
m = Basemap(projection='sinu',lon_0=0)
m.drawcoastlines()
m.drawmapboundary()
draw_screen_poly( lats, lons, m )
plt.show()
Для прямоугольников, определенных в координатах карты, используйте тот же подход, но интерполируйте свою линию в пространстве карты перед преобразованием в график графика. Для каждого сегмента линии вам нужно будет:
lats = np.linspace( lat0, lat1, resolution )
lons = np.linspace( lon0, lon1, resolution )
Затем преобразуем эти координаты карты для построения координат (как указано выше, с помощью m()
) и снова создаем многоугольник с координатами графика.