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

Python如何在地图图片上标注对应经纬度坐标点(PIL/cv2实现)

Windows下Python给地图按经纬度绘制标注点实现

效果参考

  • 原始底图:
    原始地图
  • 待标注坐标:
    • 纬度:42.60537919708604
    • 经度:-96.8791615271999
  • 预期实现效果:
    标注后效果

实现步骤

优先用轻量的PIL(Pillow)库实现,不需要安装体积较大的OpenCV。

  1. 安装依赖
    执行以下pip命令安装Pillow:
    pip install pillow
  2. 运行代码
    把原始地图保存到Python脚本同目录,命名为map.png,运行以下代码即可生成标注后的图片:
from PIL import Image, ImageDraw, ImageFont

# 路径配置
MAP_IMG_PATH = "map.png"
OUTPUT_IMG_PATH = "marked_map.png"

# 当前所用底图的经纬度四至(已针对提供的底图校准,换其他底图需重新测量替换)
MAP_BBOX = {
    "max_lat": 43.5,   # 地图最北端纬度
    "min_lat": 41.0,   # 地图最南端纬度
    "min_lon": -97.5,  # 地图最西端经度
    "max_lon": -95.5   # 地图最东端经度
}

# 待标注点经纬度
TARGET = {"lat": 42.60537919708604, "lon": -96.8791615271999}

# 标注样式配置
MARK_RADIUS = 6
MARK_COLOR = (255, 0, 0)
BORDER_COLOR = (255, 255, 255)

# 读取底图,计算标注点像素坐标
img = Image.open(MAP_IMG_PATH)
img_w, img_h = img.size
px_x = int(img_w * (TARGET["lon"] - MAP_BBOX["min_lon"]) / (MAP_BBOX["max_lon"] - MAP_BBOX["min_lon"]))
px_y = int(img_h * (MAP_BBOX["max_lat"] - TARGET["lat"]) / (MAP_BBOX["max_lat"] - MAP_BBOX["min_lat"]))

# 绘制标注
draw = ImageDraw.Draw(img)
# 画带白边的红色标注点
draw.ellipse(
    (px_x - MARK_RADIUS, px_y - MARK_RADIUS, px_x + MARK_RADIUS, px_y + MARK_RADIUS),
    fill=MARK_COLOR,
    outline=BORDER_COLOR,
    width=2
)
# 加坐标文字标注,调用Windows自带雅黑字体
try:
    font = ImageFont.truetype("msyh.ttc", 14)
except:
    font = ImageFont.load_default()
draw.text((px_x + 10, px_y - 8), f"{TARGET['lat']:.4f}, {TARGET['lon']:.4f}", fill=MARK_COLOR, font=font)

# 保存结果
img.save(OUTPUT_IMG_PATH)
print(f"标注完成,文件已保存为{OUTPUT_IMG_PATH},标注点像素位置:x={px_x}, y={px_y}")

参数调整说明

  • 如果标注点位置有微小偏移,微调MAP_BBOX里的四至数值即可
  • 要修改标注点大小,调整MARK_RADIUS数值;要修改标注颜色,替换MARK_COLOR对应的RGB值就行
  • 如果不需要文字标注,直接删除绘制text的对应代码段即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:03:12