В настоящее время я создаю приложение Dash, которое использует раскрывающиеся меню, чтобы определить, какие данные отображать на глобальной карте (обычно контурные графики).
Я знаю, что использование Basemap постепенно прекращается, поэтому хочу перейти на Cartopy в качестве источника карт (Mapbox является отличным, но не подходит), но я не уверен, как получить информацию о карте в виде трассировки, чтобы использовать ее с Dash?
У меня нет проблем с переходом на простой график - он находится прямо в интерфейсе Dash, где данные карты должны вводиться в виде трассировки.
Учебник, которому я следовал, касается только базовой карты, и я не могу найти никакой информации о том, как преобразовать этот метод в Cartopy при использовании Dash.
Любые идеи очень ценятся!
Код взят из: https://plot.ly/ipython-notebooks/basemap-maps/ Полный пример доступен там - я только что скопировал то, что, по моему мнению, является ключевым битом, который мне нужно изменить
превращение контуров в след
trace1 = Contour(
z=air,
x=lon,
y=lat,
colorscale="RdBu",
zauto=False, zmin=-5, zmax=5 )
делать карту
m = Basemap()
def make_scatter(x,y):
return Scatter(
x=x,
y=y,
mode='lines',
line=Line(color="black"),
name=' ' # no name on hover
)
def polygons_to_traces(poly_paths, N_poly):
'''
pos arg 1. (poly_paths): paths to polygons
pos arg 2. (N_poly): number of polygon to convert
'''
traces = [] # init. plotting list
for i_poly in range(N_poly):
poly_path = poly_paths[i_poly]
# get the Basemap coordinates of each segment
coords_cc = np.array(
[(vertex[0],vertex[1])
for (vertex,code) in poly_path.iter_segments(simplify=False)]
)
# convert coordinates to lon/lat by 'inverting' the Basemap projection
lon_cc, lat_cc = m(coords_cc[:,0],coords_cc[:,1], inverse=True)
# add plot.ly plotting options
traces.append(make_scatter(lon_cc,lat_cc))
return traces
def get_coastline_traces():
poly_paths = m.drawcoastlines().get_paths() # coastline polygon paths
N_poly = 91 # use only the 91st biggest coastlines (i.e. no rivers)
return polygons_to_traces(poly_paths, N_poly)
def get_country_traces():
poly_paths = m.drawcountries().get_paths() # country polygon paths
N_poly = len(poly_paths) # use all countries
return polygons_to_traces(poly_paths, N_poly)
traces_cc = get_coastline_traces()+get_country_traces()
data = Data([trace1]+traces_cc)