geospatial - 使用 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)
解决方案
推荐阅读
- c# - c#WebClient 将文件从 url 下载到所需目录不(真的)工作
- powershell - 如何使用 ffmpeg 从 Powershell 脚本中自动删除黑条?
- java - 根据 en 值在 Spring Boot 中加载 Rabbit 或 IBM mq 配置
- c# - 使用旧版本的 .net 运行 c# 应用程序?
- c++ - 在静态类型语言中提供不同类型的可能参数
- reactjs - React Hook useEffect 缺少依赖项。包括它们或删除依赖数组
- xamarin - 如何在 Xamarin 表单应用程序中每次单击按钮时将图像旋转 90 度?
- python - 解析出一个字符串
- node.js - 如何在路由和 server.js 中使用 socket.io?
- javascript - 如何在 React 中添加事件监听器?