Я хочу использовать Python / Matplotlib / Basemap, чтобы нарисовать карту и заштриховать окружность, которая находится в пределах заданного расстояния от указанной точки, подобно этой (Карта, сгенерированная Картографом Великого круга - авторское право © Karl L. Swartz. ):
Я могу получить карту для генерации следующим образом:
from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
# create new figure, axes instances.
fig,ax = plt.subplots()
# setup Mercator map projection.
m = Basemap(
llcrnrlat=47.0,
llcrnrlon=-126.62,
urcrnrlat=50.60,
urcrnrlon=-119.78,
rsphere=(6378137.00,6356752.3142),
resolution='i',
projection='merc',
lat_0=49.290,
lon_0=-123.117,
)
# Latitudes and longitudes of locations of interest
coords = dict()
coords['SEA'] = [47.450, -122.309]
# Plot markers and labels on map
for key in coords:
lon, lat = coords[key]
x,y = m(lat, lon)
m.plot(x, y, 'bo', markersize=5)
plt.text(x+10000, y+5000, key, color='k')
# Draw in coastlines
m.drawcoastlines()
m.fillcontinents()
m.fillcontinents(color='grey',lake_color='aqua')
m.drawmapboundary(fill_color='aqua')
plt.show()
, которая генерирует карту:
Теперь я хотел бы создать большой круг вокруг указанной точки, такой как верхняя карта.
Моя попытка - это функция, котораяберет объект карты, пару координат центра и расстояние, и создает две кривые, а затем затеняет их, что-то вроде:
def shaded_great_circle(map_, lat_0, lon_0, dist=100, alpha=0.2): # dist specified in nautical miles
dist = dist * 1852 # Convert distance to nautical miles
lat = np.linspace(lat_0-dist/2, lat_0+dist/2,50)
lon = # Somehow find these points
# Create curve for longitudes above lon_0
# Create curve for longitudes below lon_0
# Shade region between above two curves
, где я прокомментировал то, что хочу сделать, но не уверен, какчтобы сделать это.
Я попробовал несколько способов сделать это, но меня смутило то, что все входы на карту - это координаты, измеренные в градусах, тогда как я хочу указать точки по длине и иметь этопреобразуется в точки широты / долготы для построения графика. Я думаю, что это связано с данными как широта / долгота в градусах от координат проекции карты.
Любые толчки в правильном направлении приветствуются. Спасибо