首页 > 解决方案 > 使用 OSMnx 的等时线

问题描述

我对地理空间数据很陌生。在我的工作中,我必须使用等时线来计算多边形。我正在处理的数据非常大(120 万行)。要执行每一行,大约需要 1 秒,因此按此计算,运行此代码大约需要 13 天!有什么办法可以减少时间吗?

def get_isochrone(lon, lat, count, walk_time=10, speed=4.5):   
    loc = (lat, lon)
    G = ox.graph_from_point(loc, simplify=True, network_type='walk')
    #Create nodes geodataframe from Graph network (G)
    gdf_nodes = ox.graph_to_gdfs(G, edges=False)
    x, y = gdf_nodes['geometry'].unary_union.centroid.xy
    # center_node = ox.distance.nearest_nodes(G, x[0], y[0])
    center_node = ox.get_nearest_node(G, (y[0], x[0]))
    meters_per_minute = speed * 1000 / 60
    for u, v, k, data in G.edges(data=True, keys=True):
        data['time'] = data['length'] / meters_per_minute
    subgraph = nx.ego_graph(G, center_node, radius=walk_time, distance='time')
    node_points = [Point(data['x'], data['y']) for node, data in subgraph.nodes(data=True)]
    polys = gpd.GeoSeries(node_points).unary_union.convex_hull
    if (count%5)==0:
        print(count)
    return polys

wsp_df['polygon'] = wsp_df.apply(lambda x: get_isochrone(x.lon, x.lat, x.counter ), axis=1)

标签: geospatialopenstreetmapgeopandasqgisosmnx

解决方案


推荐阅读