<丫
Folium
是一个基于Python的库,用于将地理数据转换为交互式地图。它使用Leaflet.js
前端库来生成地图,并且可以轻松集成到Web应用程序中。Folium
特别适合于数据科学和地理信息系统(GIS)领域的可视化。
Folium的主要特点
- 交互性:生成的地图支持缩放、拖拽等交互操作。
- 多种地图样式:支持多种地图底图样式,包括OpenStreetMap、Stamen Terrain、Mapbox等。
- 丰富的图层:可以添加标记、线条、多边形、热力图等多种图层。
- 数据可视化:支持从GeoJSON和TopoJSON数据生成地图。
常用Folium函数及其参数
folium.Map()
创建一个地图对象。
location
: 地图中心的经纬度坐标。zoom_start
: 初始缩放级别。tiles
: 地图底图的URL或内置样式名称。
folium.Marker()
在地图上添加一个标记。
location
: 标记的经纬度坐标。popup
: 点击标记时显示的弹出窗口内容。tooltip
: 鼠标悬停时显示的提示信息。icon
: 自定义标记图标。
folium.Circle()
在地图上绘制一个圆形区域。
location
: 圆心的经纬度坐标。radius
: 圆的半径,单位为米。color
: 圆的边框颜色。
folium.PolyLine()
在地图上绘制一条折线。
locations
: 折线各点的经纬度坐标列表。color
: 线条颜色。weight
: 线条宽度。
folium.Polygon()
在地图上绘制一个多边形。
locations
: 多边形各点的经纬度坐标列表。fill
: 是否填充多边形内部。color
: 线条颜色。fill_color
: 填充颜色。
folium.LayerControl()
添加图层控制到地图。
collapsed
: 是否默认折叠图层控制。
folium.MarkerCluster()
将多个标记聚合为一个图层。
markers
: 要聚合的标记列表。
示例
以下是一个使用Folium
绘制地图并添加标记的示例:
import folium
import pandas as pd
from folium.plugins import MarkerCluster
# 模拟一些数据
data = {
'Name': ['Place A', 'Place B', 'Place C', 'Place D'],
'Latitude': [39.9, 39.8, 40.0, 40.1],
'Longitude': [116.4, 116.5, 116.6, 116.7],
'Description': ['Description A', 'Description B', 'Description C', 'Description D']
}
df = pd.DataFrame(data)
# 创建地图对象,中心坐标为北京
m = folium.Map(location=[39.9, 116.4], zoom_start=12, tiles='Stamen Terrain')
# 添加标记
marker_cluster = MarkerCluster().add_to(m)
for index, row in df.iterrows():
folium.Marker(
location=[row['Latitude'], row['Longitude']],
popup=f"{row['Name']}<br/>{row['Description']}",
icon=folium.Icon(color='red', icon='info-sign')
).add_to(marker_cluster)
# 添加多边形
folium.Polygon(
locations=[
[39.9, 116.4],
[39.95, 116.45],
[40.0, 116.4],
[39.9, 116.4]
],
color='blue',
fill=True,
fill_color='#AAF',
fill_opacity=0.5
).add_to(m)
# 添加热力图
from folium.plugins import HeatMap
heat_data = [[39.9, 116.4, 0.5], [39.95, 116.45, 0.7], [40.0, 116.4, 0.6]]
HeatMap(heat_data).add_to(m)
# 添加图片覆盖层
from folium.raster_layers import ImageOverlay
image_path = 'path_to_your_image.jpg'
ImageOverlay(image_path, bounds=[[39.88, 116.38], [40.03, 116.58]]).add_to(m)
# 保存地图为HTML文件
m.save('complex_map.html')
示例解释
- 数据准备:我们使用Pandas创建了一个包含地点名称、经纬度和描述的DataFrame。
- 创建地图:使用folium.Map创建了一个地图对象,中心设置在北京,初始缩放级别为12。
- 添加标记:遍历DataFrame中的每一行,为每个地点创建一个标记,并添加到地图上。使用MarkerCluster插件将所有标记聚合在一起。
- 添加多边形:使用folium.Polygon在地图上绘制一个多边形。
- 添加热力图:使用folium.plugins.HeatMap插件添加一个热力图层。
- 添加图片覆盖层:使用folium.raster_layers.ImageOverlay在地图上添加一个图片覆盖层。
- 保存地图:将地图保存为一个HTML文件,可以在浏览器中打开并进行交互。