Python如何在地图图片上标注对应经纬度坐标点(PIL/cv2实现)
Windows下Python给地图按经纬度绘制标注点实现
效果参考
- 原始底图:

- 待标注坐标:
- 纬度:
42.60537919708604 - 经度:
-96.8791615271999
- 纬度:
- 预期实现效果:

实现步骤
优先用轻量的PIL(Pillow)库实现,不需要安装体积较大的OpenCV。
- 安装依赖
执行以下pip命令安装Pillow:pip install pillow - 运行代码
把原始地图保存到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
相关产品推荐
相关产品推荐

