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

OSMnx生成的图中添加散点不显示,求助解决办法

为什么OSMnx绘制的地图上添加的红点不显示?

你的问题很典型——这其实是坐标系不匹配导致的。我来给你拆解一下:

问题根源

OSMnx的ox.plot_graph()默认会把加载的路网转换为UTM投影坐标系(一种基于米的笛卡尔坐标系,适合局部区域的地图展示),而你用ax.scatter()传入的是WGS84经纬度(比如-77.036498是经度,38.897270是纬度),这俩坐标系的数值范围完全不在一个频道上:

  • UTM坐标的x/y值可能是几十万、几百万级的(米为单位)
  • 经纬度的数值范围是经度[-180,180],纬度[-90,90]

所以你输入的经纬度点,其实被画到了当前坐标轴的可视范围之外,自然看不到。

两种解决方案

方案1:把经纬度转换成地图的投影坐标

先获取地图的坐标系,再把你的经纬度点转换过去,就能正确定位:

import osmnx as ox
import matplotlib.pyplot as plt

# 加载地图,保留默认UTM投影
G = ox.graph_from_address('1600 Pennsylvania Ave NW, Washington, DC 20500', distance=500)
fig, ax = ox.plot_graph(G)

# 定义你的经纬度点(注意顺序是 经度, 纬度)
lon, lat = -77.036498, 38.897270

# 转换为地图的投影坐标系
point_proj, _ = ox.projection.project_geom(ox.geometry.Point(lon, lat), crs=G.graph['crs'])
x, y = point_proj.x, point_proj.y

# 添加红点(设置s参数让点更大更明显)
ax.scatter(x, y, c='red', s=100)
plt.show()

方案2:让地图直接使用经纬度坐标系

调用ox.plot_graph()时指定projection='latlon'参数,这样坐标轴就是经纬度,直接传入你的坐标就能显示:

import osmnx as ox
import matplotlib.pyplot as plt

G = ox.graph_from_address('1600 Pennsylvania Ave NW, Washington, DC 20500', distance=500)
# 指定用经纬度坐标系绘制地图
fig, ax = ox.plot_graph(G, projection='latlon')

# 直接添加经纬度点
ax.scatter(-77.036498, 38.897270, c='red', s=100)
plt.show()

你可以根据自己的需求选其中一种方案,两种都能让你的红点正常显示在地图上~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:03:53