Использование Cartopy вместо Basemap для создания трассировок карты в приложении Dash - PullRequest
1 голос
/ 15 октября 2019

В настоящее время я создаю приложение Dash, которое использует выпадающие меню, чтобы определить, какие данные следует отобразить на глобальной карте (обычно контурные графики).

Мне известно, что Базовая карта постепенно сокращается, поэтому я хочу перейти на Cartopy в качестве источника карт (Mapbox - туз, но не подходит), но я не уверен, как получить информацию карты в виде трассы по порядку. использовать его с Dash?

У меня нет проблем с переключением на простой график - это просто в интерфейсе Dash, где данные карты должны быть представлены в виде трассы.

Учебное пособие IНиже приведена только Базовая карта, и я не могу найти никакой информации о том, как преобразовать метод в 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...