利用python通过读取一个包含经纬度信息的json文件,获取到经纬度,使用folium库来创建一个基于给定坐标的交互式地图
json文件数据格式示例:
[
{
"id": 1,
"原始文本": "113.37878219783308 23.073583164927953",
"经度": "113.37878219783308",
"纬度": "23.073583164927953"
}
]
绘制地图示例代码:
# !/usr/bin/env python
# -*- coding:utf-8 -*-
"""
@file: map.py
@author: czx
@time: 2024/4/10 17:02
"""
import json
import folium
with open(r'Your JSON file path', 'r', encoding='utf-8') as file:
data_list = json.load(file)
# 初始化坐标列表
coordinates = []
# 遍历列表中的每个字典元素
for item in data_list:
# 确保 "纬度" 和 "经度" 都是字典中的键,并且它们的值不是 None
if "纬度" in item and "经度" in item and item["纬度"] is not None and item["经度"] is not None:
try:
# 将 "纬度" 和 "经度" 的值转换为浮点数,并添加到坐标列表中
latitude = float(item["纬度"])
longitude = float(item["经度"])
coordinates.append((latitude, longitude))
except ValueError:
# 如果转换失败,打印错误信息并跳过这个元素
print(f"无法转换为浮点数: {item['纬度']}, {item['经度']}")
continue
else:
# 如果 "纬度" 或 "经度" 不是预期的值,打印错误信息并跳过这个元素
print(f"缺失或无效的数据: {item}")
# 如果坐标列表不为空,则继续创建地图
if coordinates:
tiles = 'https://wprd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=7'
# map = folium.Map(location=coordinates[0], zoom_start=15)
map = folium.Map(location=coordinates[0], # 坐标范围自己设置
tiles=tiles,
attr='高德-常规图',
zoom_start=15,
control_scale=True,
width='100%'
)
# 添加线段
folium.PolyLine(coordinates, color='blue', weight=2.5, opacity=1).add_to(map)
# 为每个点添加标记
for i, coord in enumerate(coordinates):
folium.Marker(coord, popup=f'点 {i+1}').add_to(map)
# 保存地图
map.save('map.html')
else:
print("没有有效的坐标数据。")
如果还没有安装folium库的话,可以通过以下命令安装:
pip install folium -i https://pypi.tuna.tsinghua.edu.cn/simple
效果:
由于我的json文件经纬度是百度坐标系,而上面绘制地图代码程序使用的是高德坐标系,所以会有偏差,可以通过坐标系转换得到正确的位置,可以参考python转换坐标系