首页
学习
活动
专区
圈层
工具
发布

OSMnx等时
EN

Stack Overflow用户
提问于 2020-07-08 07:43:20
回答 1查看 1.1K关注 0票数 3

我有大量的位置数据(10k行) (lat,lon),我想从OSMnx的每个点开始计算一个10分钟步行等价线。(我尝试了开放的服务,但有一些限制)。我试过这个例子:https://github.com/gboeing/osmnx-examples/blob/v0.13.0/notebooks/13-isolines-isochrones.ipynb

代码语言:javascript
复制
import pandas as pd
import geopandas as gpd
from shapely.geometry import Point, Polygon
import networkx as nx
import osmnx as ox
ox.config(log_console=True, use_cache=True)

def get_isochrone(lon, lat, walk_time=10, speed=4.5):
    loc = (lat, lon)
    G = ox.graph_from_point(loc, simplify=True, network_type='walk')
    gdf_nodes = ox.graph_to_gdfs(G, edges=False)
    x, y = gdf_nodes['geometry'].unary_union.centroid.xy
    center_node = ox.get_nearest_node(G, (y[0], x[0]))
    meters_per_minute = speed * 1000 / 60 #km per hour to m per minute
    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
    return polys

然后用在我的大型熊猫DataFrame上:

代码语言:javascript
复制
df.apply(lambda x: get_isochrone(x.lon, x.lat), axis=1)

但花了这么多时间。100行约3分钟的运行时间。是否还有其他方法、包装来实现这一目标?有一个合理的跑步时间?

最后一个问题,OSMnx请求的限制是什么,特别是对于大数据?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-08 16:18:50

这将是一个固有的缓慢过程。如果您有10,000个位置,并且它们彼此相距很远,那么您需要下载并建立10,000个本地街道网络,以计算每个点周围的可访问性。这意味着10,000个服务器调用和数据下载、图形构建和拓扑清理等。

因此,在3分钟内100行对我来说似乎相当快,特别是考虑到这意味着您可以在大约300分钟(即5小时)内完成所有10,000行(即5小时),根据您的估计时间。在上床睡觉之前,只要开始这个过程,当你醒来的时候,它就会完成。这假设这是一次过的计算,不需要频繁地重新计算。

另一种选择是将其并行化,将其划分为10个容器或进程,每个容器或进程处理1000个位置。考虑到你估计的时间,这将在30分钟内完成。

最后一个问题,OSMnx请求的限制是什么,特别是对于大数据?

使用OSMnx处理大规模网络模型的限制是计算机上内存的数量。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62789846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档