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

Prettymaps如何在生成的地图上添加指定坐标的位置标记

prettymaps添加点位标识实现方案

你当前代码点位不显示/位置偏移,核心是两个问题:

  • 经纬度顺序写反:地图绘图轴的x轴对应经度(东西方向,数值范围-180180,你提供的127.0114887是首尔驿三洞附近的经度),y轴对应**纬度**(南北方向,数值范围-9090,你写在x变量里的37.5718616才是纬度),参数传反时点会落在画布外。
  • 标记层级不够:你配置的地图元素中建筑层zorder为4,标记默认层级低于地图要素,会被道路、建筑完全盖住。

prettymaps本质是对matplotlib+osmnx的封装,绘图用的ax对象完全开放,直接用matplotlib原生接口就能加标记,以下是几种常用方案:


方案1:原生matplotlib画标记(最简便,适合少量点位)

不要用全局plt.plot,直接调用绑定地图的ax对象绘图,稳定性更高。把你代码最后两行替换成下面的片段即可:

# 传参顺序:经度、纬度
# zorder设为5,高于所有地图图层,保证标记显示在最上层
ax.plot(
    127.0114887, 37.5718616,
    marker='o',  # 可替换为任意matplotlib支持的标记:'^'上三角、's'方块、'*'星号,也支持LaTeX格式标记
    markersize=12,
    color='#C5283D',
    markeredgecolor='white',
    markeredgewidth=2,
    zorder=5
)

# 如需加文字标注,直接调用ax.text即可
ax.text(
    127.0114887, 37.5718616 + 0.001,  # 纬度加0.001,把文字挪到点位北侧约100米位置,避免遮挡标记
    '目标建筑',
    fontsize=12,
    fontweight='bold',
    color='#2F3737',
    ha='center',
    zorder=6
)

批量加多点位时,把坐标整理成列表循环绘制即可:

point_list = [
    (127.0114887, 37.5718616, "驿三洞地铁站"),
    (127.0203, 37.5721, "中心商圈")
]
for lon, lat, label in point_list:
    ax.plot(lon, lat, marker='o', markersize=10, color='#E9724C', zorder=5)
    ax.text(lon, lat + 0.001, label, ha='center', fontsize=10, zorder=6)

方案2:自定义图标标记(适合定制化视觉需求)

如果需要用专属图标(比如景点、商铺的专属标识)代替matplotlib自带的简单标记,可以加载本地图片贴到对应坐标:

from matplotlib.offsetbox import OffsetImage, AnnotationBbox

# 读取本地图标文件,调整zoom参数控制图标大小
marker_img = OffsetImage(plt.imread("custom_marker.png"), zoom=0.06)
marker_box = AnnotationBbox(
    marker_img,
    (127.0114887, 37.5718616),
    frameon=False,  # 去掉图标默认边框
    zorder=5
)
ax.add_artist(marker_box)

方案3:批量加载POI自动打点(适合大量点位场景)

如果需要给某一类公共设施批量打点,不需要手动整理坐标,可以直接用osmnx拉取研究范围内的对应POI自动绘制,比如绘制范围内所有咖啡店点位:

# 从plot返回的结果中拿到当前地图的边界范围
map_perimeter = backup['perimeter']
# 拉取边界内所有咖啡店类别的POI
cafe_pois = ox.geometries_from_polygon(map_perimeter, tags={'amenity': 'cafe'})
# 筛选点类型的POI绘制,排除面状的咖啡店建筑
cafe_pois[cafe_pois.geom_type == 'Point'].plot(
    ax=ax,
    color='#483420',
    markersize=6,
    zorder=5
)

注意事项

  • 所有后添加的自定义元素zorder必须大于现有地图元素的最高zorder,否则会被遮挡。
  • 经纬度顺序不要搞混:国内及东亚城市经度普遍在70140区间,纬度在1060区间,拿不准时可以通过数值范围快速判断。
  • 尽量使用ax.开头的对象方法绘图,不要用plt.开头的全局方法,避免多子图场景下元素错位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:09:20