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

OSMNx:如何用graph_from_point获取端点超距离的OSM道路

解决方法

你遇到的问题是因为ox.graph_from_point的dist参数会限制以指定点为中心的搜索半径,只有节点落在这个半径范围内的道路才会被纳入。如果目标道路的远端节点超出100米,自然无法通过当前代码获取。可以用以下两种方式解决:

方法一:先扩大范围获取道路,再裁剪到目标圆圈

先获取更大范围的道路网络,再根据蓝色圆圈的多边形边界裁剪出需要的部分:

import osmnx as ox
from shapely.geometry import Point, Polygon

# 给定的中心点坐标
lng, lat = 8.89458178871303, 41.657804855447374
# 蓝色圆圈的半径(替换成你实际需要的数值,单位:米)
circle_radius = 150

# 创建蓝色圆圈的多边形(将米转换为经纬度度数偏移)
center_point = Point(lng, lat)
circle_polygon = center_point.buffer(circle_radius / 111320)

# 先扩大范围获取足够的道路(dist设为圆圈半径+50米,确保覆盖所有需要的道路)
road_filter = '["highway"~"secondary"]'
G = ox.graph_from_point((lat, lng), custom_filter=road_filter, dist=circle_radius + 50)

# 裁剪图到蓝色圆圈范围内
G_cropped = ox.truncate.truncate_graph_polygon(G, circle_polygon, retain_all=False)

# 可选:可视化验证
ox.plot_graph(G_cropped)

方法二:直接根据蓝色圆圈多边形获取道路

如果已经知道蓝色圆圈的多边形范围,直接用graph_from_polygon可以精准获取范围内的道路,无需依赖中心点的搜索半径:

import osmnx as ox
from shapely.geometry import Point, Polygon

# 给定的中心点坐标
lng, lat = 8.89458178871303, 41.657804855447374
# 蓝色圆圈的半径(替换成你实际需要的数值,单位:米)
circle_radius = 150

# 创建蓝色圆圈的多边形(将米转换为经纬度度数偏移)
center_point = Point(lng, lat)
circle_polygon = center_point.buffer(circle_radius / 111320)

# 直接根据多边形获取道路
road_filter = '["highway"~"secondary"]'
G = ox.graph_from_polygon(circle_polygon, custom_filter=road_filter)

# 可选:可视化验证
ox.plot_graph(G)

说明

  • 代码中的circle_radius需要替换成你蓝色圆圈实际的半径(单位:米)
  • buffer方法里的111320是WGS84坐标系下1度对应的大致米数,用来将米单位的半径转换为经纬度的度数偏移

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:26:27