如何使用Python基于坐标从Google Earth提取PNG图像并借助PySimpleGUI实现地图展示
开发实现思路
前置依赖安装
你需要先安装用到的第三方库,执行命令:pip install requests pillow pysimplegui
各库作用说明:
requests:拉取Google地图瓦片资源pillow:瓦片拼接、裁剪生成PNG格式图像pysimplegui:快速搭建交互GUI界面
核心功能实现逻辑
第一部分:经纬度转地图PNG
不需要对接复杂的Google Earth官方API,直接调用公开的Google地图静态瓦片服务即可实现按坐标取图,核心步骤:
- 实现经纬度转瓦片坐标的转换函数,Google瓦片的转换公式是通用公开实现,直接按公式写即可,输入参数为目标经纬度、地图缩放级别(推荐支持1-20级可选,缩放级别越高,图像越清晰,拉取的瓦片数量越多,加载速度越慢)
- 按计算出的瓦片坐标拉取对应瓦片资源,请求头需要配置正常的UA标识避免被接口拦截
- 把拉取到的多块瓦片拼接成整图,再以输入的目标经纬度为中心点裁剪成你需要的尺寸(比如800*600),保存为PNG格式,可以存在本地临时路径或者直接存在内存中供GUI调用
- 加异常处理逻辑:网络请求失败、坐标参数不合法的时候抛出可识别的错误信息,不要直接崩溃
第二部分:PySimpleGUI GUI搭建
GUI的常规布局参考:
- 顶部输入区:经度输入框、纬度输入框、缩放级别下拉选择、「生成图像」按钮、「保存PNG」按钮
- 中部展示区:用来渲染生成的地图PNG
- 底部提示区:用来展示操作状态、错误提示
交互逻辑开发要点: - 先做输入校验:经度范围必须在-180180之间,纬度范围必须在-9090之间,输入非数字、超出范围直接弹提示,不执行后续请求
- 点击「生成图像」按钮后,后台调用取图逻辑,过程中可以加加载动画提示,生成完成后把图像更新到展示区
- 点击「保存PNG」按钮后,弹出文件选择框让用户选择保存路径,把生成的PNG存到对应路径
最简核心代码参考
import math import requests from PIL import Image import PySimpleGUI as sg # 经纬度转瓦片坐标通用实现 def latlon_to_tile(lat, lon, zoom): n = 2.0 ** zoom x = int((lon + 180.0) / 360.0 * n) y = int((1.0 - math.log(math.tan(math.radians(lat)) + 1.0 / math.cos(math.radians(lat))) / math.pi) / 2.0 * n) return x, y # 瓦片拉取、拼接逻辑可基于上述函数扩展,GUI布局按你需要的样式调整即可
内容的提问来源于stack exchange,提问作者Akash
相关产品推荐
相关产品推荐

