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

OSMNX路径规划无路线显示及Kivy集成、打包问题求助

问题解决方案与思路

一、OSMNX路线不显示的修复

你的代码核心错误是ox.nearest_nodes的参数顺序搞反了:OSMNX中X对应经度(longitude),Y对应纬度(latitude),你把经纬度传反了,导致找不到正确的起点/终点节点,最终shortest_path返回None,自然没有路线显示。

修正后的代码:

import osmnx as ox  # 建议用别名ox,更规范

G = ox.graph_from_place("New York, New York", network_type='drive')

# 起点终点经纬度
origin_lat, origin_lon = 40.73765090370579, -73.97428265598312
destination_lat, destination_lon = 40.72568284052202, -74.01119033844985

# 修正参数顺序:X=经度,Y=纬度
origin_node = ox.nearest_nodes(G, X=origin_lon, Y=origin_lat)
destination_node = ox.nearest_nodes(G, X=destination_lon, Y=destination_lat)

# 先判断路径是否存在
R = ox.shortest_path(G, origin_node, destination_node, weight='length')
if not R:
    print("无可用路径")
else:
    fig, ax = ox.plot_graph_route(G, R, route_color="r", route_linewidth=6, node_size=0)

另外,建议添加路径存在性判断,避免因区域无道路导致的空路线问题。

二、集成Kivy MapView的思路

OSMNX输出的路线是节点ID列表,你需要将这些节点转换为经纬度坐标,再用Kivy MapView的Polyline组件绘制路线:

  1. 从图G中提取路线节点的经纬度:
    route_coords = [(G.nodes[node]['y'], G.nodes[node]['x']) for node in R]
    
    这里G.nodes[node]['y']是纬度,['x']是经度,对应MapView的坐标要求。
  2. 在Kivy布局中添加MapView,然后创建Polyline,将route_coords传入,设置颜色和宽度即可显示路线。
  3. 起点/终点可以用Marker组件标记,直接传入对应经纬度。

三、路线途经主要城镇的实现

核心是对路线上的节点进行反向地理编码,提取行政区域信息:

  1. 提取路线的所有节点坐标(参考上面的route_coords)。
  2. 对坐标进行反向地理编码:可以用OSMNX自带的ox.geocoder.reverse_geocode,或者geopy的Nominatim服务。
  3. 从返回的地址信息中提取城镇/城市名称,去重后筛选出主要的(比如排除小区、街道级别的名称,保留town/city级别的)。
  4. 优化方式:不需要对每个节点都编码,每隔一段距离取一个节点即可,减少请求量。

四、WSL环境Buildozer打包问题的解决

WSL打包Android应用确实容易遇到SDK/NDK路径、权限问题,给你几个实用方案:

  • 手动配置Buildozer.spec:在spec文件中明确指定android.sdk_path和android.ndk_path,确保路径是WSL内的绝对路径(比如/home/你的用户名/android-sdk),不要用Windows的路径(比如/mnt/c/...)。
  • 依赖补全:执行sudo apt-get install -y build-essential git python3 python3-pip python3-dev ffmpeg libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev libportmidi-dev libswscale-dev libavformat-dev libavcodec-dev zlib1g-dev,确保所有依赖安装完整。
  • 替代打包方案:放弃本地WSL打包,用GitHub Actions自动打包。只需要把代码传到GitHub,配置一个Android打包的Action workflow,就能自动生成APK,完全避开本地环境问题。
  • GPS fallback方案:如果GPS获取失败,用地理编码(比如输入城市名称获取经纬度)作为起点,不会增加路线规划难度——OSMNX只需要经纬度坐标,不管来源是GPS还是地理编码,路线逻辑完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:01:16