You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于OSMnx:如何随机选点并绘制1.5km等时线图?含报错求助

问题解决:随机选点与等时线绘制 + 依赖报错修复

一、修复依赖报错

报错ImportError: scikit-learn must be installed to search an unprojected graph是因为未安装scikit-learn,同时numpy版本冲突也会引发问题。直接安装兼容的依赖包即可:

!pip install osmnx scikit-learn numpy --upgrade

执行后重新导入库,即可解决该错误。

二、随机选点的两种方法

方法1:直接从路网节点中随机选择

最简单的方式,直接从已获取的路网节点列表中随机挑选:

import numpy as np
# 从路网G的节点中随机选一个
random_node = np.random.choice(list(G.nodes))

方法2:在区域范围内随机生成坐标,匹配最近节点

如果需要在整个 bounding box 内生成任意地理点(非路网节点),再匹配到最近的路网节点:

import numpy as np
# 在指定经纬度范围内随机生成点
lon = np.random.uniform(west, east)
lat = np.random.uniform(south, north)
# 找到该点对应的最近路网节点
random_node = ox.distance.nearest_nodes(G, lon, lat)

三、完整代码:随机选点 + 绘制1.5km等时线

整合所有步骤的可运行代码,包含依赖安装、路网获取、随机选点、等时线计算与可视化:

# 安装依赖
!pip install osmnx scikit-learn numpy --upgrade

# 导入所需库
import osmnx as ox
import numpy as np
import matplotlib.pyplot as plt

# 定义目标区域边界
north, south, east, west = 40.8580, 40.7448, -73.9842, -74.2996

# 获取指定区域的驾车路网
G = ox.graph_from_bbox(north, south, east, west, network_type='drive')

# 随机选点(可替换为上述两种方法的任意一种)
random_node = np.random.choice(list(G.nodes))

# 将路网投影到UTM坐标系(消除经纬度球面计算误差)
G_proj = ox.project_graph(G)

# 计算以随机节点为中心、1.5km范围的等时线(若需按时间计算,可替换为travel_time参数)
isochrone = ox.distance.isochrone(G_proj, random_node, distance=1500)

# 可视化结果
fig, ax = ox.plot_graph(G_proj, show=False, close=False, edge_color='gray', node_size=0)
isochrone.plot(ax=ax, color='red', alpha=0.5)
plt.title('1.5km Isochrone from Random Node')
plt.show()

补充说明:

  • 若要基于时间绘制等时线,可将distance=1500替换为travel_time=XXX(单位:秒),同时设置speed_kph参数(比如speed_kph=30代表平均时速30公里)。
  • 投影路网到UTM坐标系是为了让距离/时间计算更精准,避免经纬度的球面距离误差。

内容的提问来源于stack exchange,提问作者Rainbow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:27:09