如何从Google Maps短链接中提取X、Y坐标?
Python脚本:解析Google Maps链接(含短链接)提取经纬度坐标
需求说明
需要实现一个Python脚本,支持用户输入Google Maps的完整链接或短链接,输出对应的X(经度)、Y(纬度)坐标。例如:
- 完整链接:
https://www.google.com/maps/search/29.996966,+68.748251?entry=tts&g_ep=EgoyMDI0MDUyOC4wKgBIAVAD,可提取出x=68.748251 y=29.996966 - 短链接:
https://maps.app.goo.gl/wsmXZrYfP8V3ur2RA,需先解析为完整链接再提取坐标
优化后的代码
import requests from urllib.parse import urlparse, parse_qs def resolve_short_link(short_link): """解析短链接,返回跳转后的完整链接""" try: response = requests.get(short_link, allow_redirects=True) response.raise_for_status() return response.url except requests.exceptions.RequestException: print("解析短链接失败,请检查链接有效性") return None def extract_coordinates(full_link): """从完整Google Maps链接中提取经纬度坐标""" parsed_url = urlparse(full_link) # 情况1:链接路径包含/search/经纬度格式 if parsed_url.path.startswith('/search/'): path_part = parsed_url.path.split('/')[2] if ',' in path_part: lat, lon = path_part.split(',', 1) return lat.strip(), lon.strip() # 情况2:链接查询参数包含q=经纬度格式 query_params = parse_qs(parsed_url.query) q_param = query_params.get('q') if q_param and ',' in q_param[0]: lat, lon = q_param[0].split(',', 1) return lat.strip(), lon.strip() print("无法从链接中提取坐标") return None, None def get_coordinates(input_link): """统一处理输入链接(完整/短链接),返回坐标""" # 判断是否为短链接(maps.app.goo.gl域名) if input_link.startswith('https://maps.app.goo.gl/'): full_link = resolve_short_link(input_link) if not full_link: return None, None else: full_link = input_link return extract_coordinates(full_link) def main(): user_input = input("请输入Google Maps链接(完整或短链接):") y, x = get_coordinates(user_input) # y是纬度,x是经度 if x and y: print(f"x = {x}") print(f"y = {y}") else: print("未能提取到有效坐标") if __name__ == "__main__": main()
关键改进点
- 同时支持完整链接与短链接:自动识别短链接并跳转解析为完整链接
- 适配多种链接格式:既支持路径中包含坐标的
/search/经纬度格式,也支持查询参数q=经纬度的格式 - 错误处理优化:增加了请求异常捕获,提示更清晰的错误信息
- 坐标对应关系明确:严格按照需求返回X(经度)、Y(纬度),对应链接中先纬度后经度的顺序
内容的提问来源于stack exchange,提问作者saqer.ms
相关产品推荐
相关产品推荐

