Python folium的功能怎么使用

发布时间:2022-12-28 09:44:03 作者:iii
来源:亿速云 阅读:242

Python Folium 的功能怎么使用

目录

  1. 简介
  2. 安装与配置
  3. 基本地图创建
  4. 地图标记
  5. 图层控制
  6. 地理编码与逆地理编码
  7. 热力图
  8. 聚类标记
  9. 绘制几何图形
  10. 自定义图标
  11. 地图样式
  12. 地图交互
  13. 地图导出
  14. 高级功能
  15. 常见问题与解决方案
  16. 总结

1. 简介

Folium 是一个基于 Python 的库,用于创建交互式地图。它建立在 Leaflet.js 之上,Leaflet.js 是一个流行的 JavaScript 库,用于创建移动友好的交互式地图。Folium 使得在 Python 中创建和操作地图变得非常简单,尤其适合数据科学家和地理信息系统(GIS)开发者。

Folium 的主要特点包括:

2. 安装与配置

2.1 安装

要使用 Folium,首先需要安装它。可以通过 pip 来安装:

pip install folium

2.2 配置

安装完成后,可以直接在 Python 脚本中导入 Folium:

import folium

3. 基本地图创建

3.1 创建简单地图

创建一个简单的地图非常简单。以下代码创建了一个以北京为中心的地图:

import folium

# 创建地图对象,设置中心位置和缩放级别
m = folium.Map(location=[39.9042, 116.4074], zoom_start=10)

# 显示地图
m

3.2 设置地图底图

Folium 支持多种地图底图,可以通过 tiles 参数来设置:

m = folium.Map(location=[39.9042, 116.4074], zoom_start=10, tiles='Stamen Terrain')
m

常用的底图选项包括:

3.3 设置地图缩放范围

可以通过 min_zoommax_zoom 参数来设置地图的缩放范围:

m = folium.Map(location=[39.9042, 116.4074], zoom_start=10, min_zoom=5, max_zoom=15)
m

4. 地图标记

4.1 添加简单标记

可以使用 folium.Marker 来添加标记:

m = folium.Map(location=[39.9042, 116.4074], zoom_start=10)

# 添加标记
folium.Marker([39.9042, 116.4074], popup='北京').add_to(m)

m

4.2 自定义标记图标

可以通过 icon 参数来自定义标记图标:

m = folium.Map(location=[39.9042, 116.4074], zoom_start=10)

# 自定义图标
folium.Marker(
    [39.9042, 116.4074],
    popup='北京',
    icon=folium.Icon(color='red', icon='info-sign')
).add_to(m)

m

4.3 添加多个标记

可以在地图上添加多个标记:

m = folium.Map(location=[39.9042, 116.4074], zoom_start=10)

# 添加多个标记
folium.Marker([39.9042, 116.4074], popup='北京').add_to(m)
folium.Marker([31.2304, 121.4737], popup='上海').add_to(m)
folium.Marker([23.1291, 113.2644], popup='广州').add_to(m)

m

5. 图层控制

5.1 添加多个图层

Folium 支持添加多个图层,并且可以通过图层控制来切换不同的图层:

m = folium.Map(location=[39.9042, 116.4074], zoom_start=5)

# 添加多个图层
folium.TileLayer('OpenStreetMap').add_to(m)
folium.TileLayer('Stamen Terrain').add_to(m)
folium.TileLayer('Stamen Toner').add_to(m)

# 添加图层控制
folium.LayerControl().add_to(m)

m

5.2 自定义图层

可以创建自定义的图层,并将其添加到地图中:

m = folium.Map(location=[39.9042, 116.4074], zoom_start=5)

# 创建自定义图层
custom_tile = folium.TileLayer(
    tiles='https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',
    attr='Custom Tile',
    name='Custom Tile'
)

# 添加自定义图层
custom_tile.add_to(m)

# 添加图层控制
folium.LayerControl().add_to(m)

m

6. 地理编码与逆地理编码

6.1 地理编码

地理编码是将地址转换为地理坐标的过程。Folium 本身不提供地理编码功能,但可以结合其他库(如 geopy)来实现:

from geopy.geocoders import Nominatim

# 创建地理编码器
geolocator = Nominatim(user_agent="my_app")

# 地理编码
location = geolocator.geocode("北京")
print(location.latitude, location.longitude)

6.2 逆地理编码

逆地理编码是将地理坐标转换为地址的过程。同样可以使用 geopy 来实现:

from geopy.geocoders import Nominatim

# 创建地理编码器
geolocator = Nominatim(user_agent="my_app")

# 逆地理编码
location = geolocator.reverse("39.9042, 116.4074")
print(location.address)

7. 热力图

7.1 创建热力图

Folium 支持创建热力图,可以通过 folium.plugins.HeatMap 来实现:

import folium
from folium.plugins import HeatMap

m = folium.Map(location=[39.9042, 116.4074], zoom_start=10)

# 创建热力图数据
data = [
    [39.9042, 116.4074, 1],
    [31.2304, 121.4737, 0.8],
    [23.1291, 113.2644, 0.6]
]

# 添加热力图
HeatMap(data).add_to(m)

m

7.2 自定义热力图

可以通过 radiusblur 参数来自定义热力图的外观:

import folium
from folium.plugins import HeatMap

m = folium.Map(location=[39.9042, 116.4074], zoom_start=10)

# 创建热力图数据
data = [
    [39.9042, 116.4074, 1],
    [31.2304, 121.4737, 0.8],
    [23.1291, 113.2644, 0.6]
]

# 添加自定义热力图
HeatMap(data, radius=20, blur=15).add_to(m)

m

8. 聚类标记

8.1 创建聚类标记

当有大量标记时,可以使用聚类标记来优化显示效果。Folium 提供了 folium.plugins.MarkerCluster 来实现这一功能:

import folium
from folium.plugins import MarkerCluster

m = folium.Map(location=[39.9042, 116.4074], zoom_start=5)

# 创建聚类标记
marker_cluster = MarkerCluster().add_to(m)

# 添加多个标记
folium.Marker([39.9042, 116.4074], popup='北京').add_to(marker_cluster)
folium.Marker([31.2304, 121.4737], popup='上海').add_to(marker_cluster)
folium.Marker([23.1291, 113.2644], popup='广州').add_to(marker_cluster)

m

8.2 自定义聚类标记

可以通过 icon_create_function 参数来自定义聚类标记的图标:

import folium
from folium.plugins import MarkerCluster

m = folium.Map(location=[39.9042, 116.4074], zoom_start=5)

# 自定义聚类标记图标
icon_create_function = """
function(cluster) {
    return L.divIcon({
        html: '<b>' + cluster.getChildCount() + '</b>',
        className: 'marker-cluster-custom',
        iconSize: L.point(40, 40)
    });
}
"""

# 创建聚类标记
marker_cluster = MarkerCluster(icon_create_function=icon_create_function).add_to(m)

# 添加多个标记
folium.Marker([39.9042, 116.4074], popup='北京').add_to(marker_cluster)
folium.Marker([31.2304, 121.4737], popup='上海').add_to(marker_cluster)
folium.Marker([23.1291, 113.2644], popup='广州').add_to(marker_cluster)

m

9. 绘制几何图形

9.1 绘制多边形

可以使用 folium.Polygon 来绘制多边形:

import folium

m = folium.Map(location=[39.9042, 116.4074], zoom_start=10)

# 绘制多边形
folium.Polygon(
    locations=[[39.9042, 116.4074], [31.2304, 121.4737], [23.1291, 113.2644]],
    color='blue',
    fill=True,
    fill_color='red'
).add_to(m)

m

9.2 绘制线条

可以使用 folium.PolyLine 来绘制线条:

import folium

m = folium.Map(location=[39.9042, 116.4074], zoom_start=10)

# 绘制线条
folium.PolyLine(
    locations=[[39.9042, 116.4074], [31.2304, 121.4737], [23.1291, 113.2644]],
    color='blue',
    weight=5
).add_to(m)

m

9.3 绘制圆形

可以使用 folium.Circle 来绘制圆形:

import folium

m = folium.Map(location=[39.9042, 116.4074], zoom_start=10)

# 绘制圆形
folium.Circle(
    location=[39.9042, 116.4074],
    radius=50000,
    color='blue',
    fill=True,
    fill_color='red'
).add_to(m)

m

10. 自定义图标

10.1 使用自定义图标

可以使用 folium.features.CustomIcon 来使用自定义图标:

import folium
from folium.features import CustomIcon

m = folium.Map(location=[39.9042, 116.4074], zoom_start=10)

# 使用自定义图标
icon_image = 'https://leafletjs.com/examples/custom-icons/leaf-green.png'
icon = CustomIcon(
    icon_image,
    icon_size=(38, 95),
    icon_anchor=(22, 94),
    popup_anchor=(-3, -76)
)

folium.Marker([39.9042, 116.4074], icon=icon, popup='北京').add_to(m)

m

10.2 使用 Font Awesome 图标

可以使用 folium.Iconicon 参数来使用 Font Awesome 图标:

import folium

m = folium.Map(location=[39.9042, 116.4074], zoom_start=10)

# 使用 Font Awesome 图标
folium.Marker(
    [39.9042, 116.4074],
    popup='北京',
    icon=folium.Icon(color='green', icon='info-sign', prefix='fa')
).add_to(m)

m

11. 地图样式

11.1 设置地图背景颜色

可以通过 tiles 参数来设置地图的背景颜色:

import folium

m = folium.Map(location=[39.9042, 116.4074], zoom_start=10, tiles='CartoDB dark_matter')
m

11.2 自定义地图样式

可以通过 folium.TileLayerattr 参数来自定义地图样式:

import folium

m = folium.Map(location=[39.9042, 116.4074], zoom_start=10)

# 自定义地图样式
folium.TileLayer(
    tiles='https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',
    attr='Custom Tile',
    name='Custom Tile'
).add_to(m)

m

12. 地图交互

12.1 添加点击事件

可以通过 folium.ClickForMarker 插件来添加点击事件:

import folium
from folium.plugins import ClickForMarker

m = folium.Map(location=[39.9042, 116.4074], zoom_start=10)

# 添加点击事件
ClickForMarker().add_to(m)

m

12.2 添加鼠标悬停事件

可以通过 folium.LatLngPopup 插件来添加鼠标悬停事件:

import folium
from folium.plugins import LatLngPopup

m = folium.Map(location=[39.9042, 116.4074], zoom_start=10)

# 添加鼠标悬停事件
LatLngPopup().add_to(m)

m

13. 地图导出

13.1 导出为 HTML 文件

可以将地图导出为 HTML 文件:

import folium

m = folium.Map(location=[39.9042, 116.4074], zoom_start=10)

# 导出为 HTML 文件
m.save('map.html')

13.2 导出为图片

Folium 本身不支持直接导出为图片,但可以通过结合其他工具(如 selenium)来实现:

from selenium import webdriver
import time

# 创建地图
m = folium.Map(location=[39.9042, 116.4074], zoom_start=10)
m.save('map.html')

# 使用 selenium 打开 HTML 文件并截图
driver = webdriver.Chrome()
driver.get('file:///path/to/map.html')
time.sleep(5)  # 等待地图加载
driver.save_screenshot('map.png')
driver.quit()

14. 高级功能

14.1 使用 GeoJSON 数据

可以使用 folium.GeoJson 来加载和显示 GeoJSON 数据:

import folium

m = folium.Map(location=[39.9042, 116.4074], zoom_start=10)

# 加载 GeoJSON 数据
geojson_data = {
    "type": "FeatureCollection",
    "features": [
        {
            "type": "Feature",
            "properties": {},
            "geometry": {
                "type": "Point",
                "coordinates": [116.4074, 39.9042]
            }
        }
    ]
}

folium.GeoJson(geojson_data).add_to(m)

m

14.2 使用 TopoJSON 数据

可以使用 folium.TopoJson 来加载和显示 TopoJSON 数据:

import folium

m = folium.Map(location=[39.9042, 116.4074], zoom_start=10)

# 加载 TopoJSON 数据
topojson_data = {
    "type": "Topology",
    "objects": {
        "example": {
            "type": "GeometryCollection",
            "geometries": [
                {
                    "type": "Point",
                    "coordinates": [116.4074, 39.9042]
                }
            ]
        }
    },
    "arcs": []
}

folium.TopoJson(topojson_data, 'objects.example').add_to(m)

m

14.3 使用 Choropleth 地图

可以使用 folium.Choropleth 来创建 Choropleth 地图:

import folium
import pandas as pd

m = folium.Map(location=[39.9042, 116.4074], zoom_start=10)

# 创建数据
data = pd.DataFrame({
    'region': ['北京', '上海', '广州'],
    'value': [10, 20, 30]
})

# 创建 Choropleth 地图
folium.Choropleth(
    geo_data='path/to/geojson/file',
    name='choropleth',
    data=data,
    columns=['region', 'value'],
    key_on='feature.properties.name',
    fill_color='YlGn',
    fill_opacity=0.7,
    line_opacity=0.2,
    legend_name='Value'
).add_to(m)

m

15. 常见问题与解决方案

15.1 地图无法显示

如果地图无法显示,可能是由于网络问题或底图服务不可用。可以尝试更换底图或检查网络连接。

15.2 标记无法显示

如果标记无法显示,可能是由于坐标错误或图标路径错误。可以检查坐标和图标路径是否正确。

15.

推荐阅读:
  1. Aptana中怎么构建一个Python开发环境
  2. 如何以Windows Service的方式运行Python程序

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python folium

上一篇:Spring bean加载控制如何实现

下一篇:python元组的可变与不可变问题怎么解决

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》