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
相关产品推荐
相关产品推荐

