深圳市文章资讯

Python轻松实现某德地图可视化功能

2026-03-28 10:29:02 浏览次数:2
详细信息

1. Pyecharts(推荐:简单易用)

from pyecharts.charts import BMap
from pyecharts import options as opts

# 百度地图可视化
map_chart = BMap(init_opts=opts.InitOpts(width="1000px", height="600px"))
map_chart.add_schema(
    baidu_ak="你的百度AK",  # 需申请百度地图AK
    center=[116.397428, 39.90923],  # 北京
    zoom=11,
    is_roam=True
)

# 添加点
data = [
    ("天安门", [116.397443, 39.909187]),
    ("故宫", [116.397026, 39.918058]),
    ("颐和园", [116.271728, 39.999939])
]
map_chart.add_coordinate("天安门", 116.397443, 39.909187)
map_chart.add(
    series_name="景点",
    type_="scatter",
    data_pair=[("天安门", 1), ("故宫", 1), ("颐和园", 1)],
    label_opts=opts.LabelOpts(is_show=False),
)
map_chart.render("baidu_map.html")  # 生成html文件

2. Folium(基于Leaflet)

import folium

# 创建地图
m = folium.Map(
    location=[39.90923, 116.397428],  # 北京
    zoom_start=12,
    tiles='OpenStreetMap'  # 可以换成其他瓦片
)

# 添加标记
folium.Marker(
    [39.909187, 116.397443],
    popup='天安门',
    tooltip='点击查看详情'
).add_to(m)

# 添加圆形区域
folium.Circle(
    radius=1000,
    location=[39.909187, 116.397443],
    color='red',
    fill=True
).add_to(m)

# 保存
m.save('map.html')

3. Plotly Express(交互式地图)

import plotly.express as px
import pandas as pd

# 创建数据
df = pd.DataFrame({
    'city': ['北京', '上海', '广州', '深圳'],
    'lat': [39.9042, 31.2304, 23.1291, 22.5431],
    'lon': [116.4074, 121.4737, 113.2644, 114.0579],
    'value': [100, 80, 60, 70]
})

# 创建散点地图
fig = px.scatter_mapbox(
    df,
    lat='lat',
    lon='lon',
    size='value',
    color='value',
    text='city',
    zoom=4,
    height=600
)

fig.update_layout(
    mapbox_style="open-street-map",  # 或"carto-positron", "stamen-terrain"
    margin={"r":0, "t":0, "l":0, "b":0}
)

fig.show()

4. 简化的完整示例(公交站点可视化)

import pandas as pd
import folium
from folium.plugins import MarkerCluster

# 模拟公交站点数据
data = {
    'station': ['站点A', '站点B', '站点C', '站点D'],
    'lat': [39.91, 39.92, 39.93, 39.94],
    'lon': [116.40, 116.41, 116.42, 116.43],
    'passengers': [100, 200, 150, 80]
}
df = pd.DataFrame(data)

# 创建地图
m = folium.Map(
    location=[df['lat'].mean(), df['lon'].mean()],
    zoom_start=13
)

# 添加聚类标记
marker_cluster = MarkerCluster().add_to(m)

# 添加站点
for idx, row in df.iterrows():
    folium.CircleMarker(
        location=[row['lat'], row['lon']],
        radius=row['passengers']/20,
        popup=f"{row['station']}: {row['passengers']}人",
        color='blue',
        fill=True
    ).add_to(marker_cluster)

# 添加热力图
from folium.plugins import HeatMap
heat_data = [[row['lat'], row['lon'], row['passengers']] for _, row in df.iterrows()]
HeatMap(heat_data).add_to(m)

m.save('bus_stations.html')
print("地图已保存为 bus_stations.html")

5. 获取百度地图AK的步骤

访问百度地图开放平台(https://lbsyun.baidu.com/) 注册登录 → 控制台 → 创建应用 获取AK(服务端AK或浏览器端AK)

各方案对比

方案 优点 缺点 适用场景
Pyecharts 中文友好,样式美观 需要百度AK 需要百度地图风格的场景
Folium 简单易用,插件丰富 交互性一般 快速创建交互式地图
Plotly 交互性强,图表美观 需要学习plotly语法 数据分析展示
Geopandas 专业GIS功能 学习曲线较陡 地理数据分析

快速开始建议

如果只需要简单展示 → 用Folium 如果需要百度地图样式 → 用Pyecharts 如果需要高度交互 → 用Plotly

注意事项

地图API可能有调用限制 商业用途需要关注地图服务的授权 大量数据点建议使用聚类或热力图

需要哪个具体功能(如路径规划、地理编码、热力图等)我可以提供更详细的代码示例。

相关推荐