问题描述
我对地理空间数据很陌生。在我的工作中,我必须使用等时线计算多边形。我正在处理的数据非常大(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)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)