GeoPandas и OSMnx - прокладка на карте - PullRequest
1 голос
/ 15 марта 2019


Я хочу нанести на карту свою Geopandas df. в качестве фона я хочу (дорожную) карту местности. любя пакет OSMnx, я пытаюсь выяснить, как использовать его вывод (шейп-файл? сеть?) в качестве фона для моего сюжета

import osmnx as ox 
G= ox.core.graph_from_place('Chengdu City', network_type='all_private', 
                            simplify=True, retain_all=False, 
                            truncate_by_edge=False, name='unnamed', 
                            which_result=1, buffer_dist=None, timeout=180, 
                            memory=None, 
                            max_query_area_size=2500000000, 
                            clean_periphery=True, infrastructure='way["highway"]', custom_filter=None)

это сетевой график, теперь я хочу нанести на него свои точки и линии геопанады:

dict= {'take_lat_1k': [31.47, 31.51, 30.54, 30.54],'take_lng_1k': [104.75, 104.67, 103.97, 103.97], 
     'return_lat_1k': [31.48, 31.49, 30.54, 30.54],'return_lng_1k': [104.71, 104.69, 103.97, 103.97]}
df= pd.DataFrame(dict)
# creating Geopandas geometries 
geometry_t = [Point(xy) for xy in zip(df["take_lng_1k"],df["take_lat_1k"])]
geometry_r = [Point(xy) for xy in zip(df["return_lng_1k"],df["return_lat_1k"])]
lines = [LineString(ab) for ab in zip (geometry_t, geometry_t)]

# osmnx network as the fig,ax
fig, ax = ox.plot_graph(G)

# creating Geodf
geo_df_t = gpd.GeoDataFrame(df, geometry=geometry_t)
geo_df_t.plot(ax=ax, markersize = 20, color = "red" , alpha=1)
geo_df_line = gpd.GeoDataFrame(df, geometry=lines)
geo_df_line.plot(ax=ax,  color = "black"  , alpha=1  )
geo_df_r = gpd.GeoDataFrame(df, geometry=geometry_r)
geo_df_r.plot(ax=ax, markersize = 20, color = "green"  , alpha=1    )
plt.show()

и то, что я получаю, это симпатичный граф osmnx netwrok, но без моих точек и линий между ними. также это появляется внизу изображения: Размер рисунка 432x288 с 0 осями
я делаю это правильно ..?

1 Ответ

1 голос
/ 16 марта 2019

Согласно документации OSMnx используйте аргументы show и close, чтобы не показывать и не закрывать график, пока вы не добавили в него все. Кроме того, присвойте своим точкам и линиям более высокий zorder, чтобы убедиться, что они нанесены поверх базовой карты, а не под ней:

fig, ax = ox.plot_graph(G, show=False, close=False)
geo_df_t.plot(ax=ax, markersize = 20, color="red" , alpha=1, zorder=7)
geo_df_line.plot(ax=ax, color = "black", alpha=1, zorder=8)
geo_df_r.plot(ax=ax, markersize = 20, color="green", alpha=1, zorder=9)
plt.show()
...