如何在Python中提取HERE地图Linkid经纬度并绘制到地图?
从HERE Map LinkID提取经纬度并在Python中绘制地图
要实现从HERE的linkid提取经纬度并绘制地图,你可以按照以下步骤操作:
1. 通过HERE Map Data API获取Link的地理数据
你需要使用HERE的Map Data API来查询每个linkid对应的地理形状(包含经纬度点序列)。确保你已拥有有效的HERE API密钥,且该密钥具备Map Data API的访问权限。
import requests # 替换为你的HERE API密钥 API_KEY = "your_here_api_key" # 你从Route Matching API获取的linkid列表 target_link_ids = ["L12345", "L67890", "L01234"] # Map Data API 请求端点 api_endpoint = "https://data.api.here.com/v3/links" # 构造请求参数,指定获取shape属性(包含经纬度信息) request_params = { "apiKey": API_KEY, "ids": ",".join(target_link_ids), "attributes": "shape" } # 发送GET请求并处理响应 response = requests.get(api_endpoint, params=request_params) response.raise_for_status() # 抛出请求错误(如权限不足、linkid无效等) link_response_data = response.json()
2. 解码Link的Shape数据
HERE返回的shape字段是经过Polyline编码的字符串,需要解码为可读的经纬度坐标对。可以使用polyline库来完成解码,先通过pip install polyline安装该库。
import polyline # 存储所有link的经纬度坐标列表 link_coordinates = [] for link_item in link_response_data["links"]: # HERE的Polyline编码使用5位精度,需指定对应参数 decoded_coords = polyline.decode(link_item["shape"], precision=5) link_coordinates.append(decoded_coords)
3. 使用Folium绘制地图
借助folium库可以轻松在Python中生成交互式地图,先通过pip install folium安装。
import folium # 以第一个link的起点坐标作为地图中心(如果有link数据的话) map_center = link_coordinates[0][0] if link_coordinates else (0, 0) # 创建地图实例,设置初始缩放级别 map_obj = folium.Map(location=map_center, zoom_start=14) # 遍历每个link的坐标,绘制折线 for idx, coords in enumerate(link_coordinates): folium.PolyLine( locations=coords, color="#1a73e8", weight=6, opacity=0.8, popup=f"Link ID: {target_link_ids[idx]}" ).add_to(map_obj) # 将地图保存为HTML文件,可直接在浏览器中打开查看 map_obj.save("here_route_links_map.html")
关键注意事项
- 确认你的HERE API密钥已启用Map Data API服务,否则会返回权限错误
- 如果需要处理大量linkid,建议分批发送请求,避免触发API调用频率限制
- 解码Polyline时必须指定
precision=5,否则会得到错误的经纬度坐标
内容的提问来源于stack exchange,提问作者Mangesh Shinde
相关产品推荐
相关产品推荐

