通过Folium模块使用Leaflet.js在Python中进行空间热图绘制

在之前的文章中,我演示了如何使用Python中的Geopy和Folium对数据进行地理编码和标记。我还演示了使用Leaflet之类的R中的热映射工作流程。

在本文中,我想使用Leaflet.js库通过Python的Folium模块创建热图。

我在下面提供了这样做的脚本。该脚本读取带有位置名称和地址的csv文件。使用Geopy和Nominatim地理编码服务,可以对位置列表进行地理编码,并按经度和纬度返回坐标。 csv文件包含每个位置的指标值。此度量标准定义热图的颜色强度。

下面的代码行用于读取csv文件,并将其位置条目地理编码为纬度和经度。提供了最终熊猫DataFrame的概览:

#导入相关的包/模块
import pandas
import folium
from folium.plugins import HeatMap
#读取包含位置数据的csv文件
data = pandas.read_csv("heatmap.csv")
#将国家,城市和街道合并为一个地址字符串
data["addresses"] = data["country"] + ", " + data["city"] + ", " + data["street "]
#导入geopy模块
import geopy
#创建一个服务对象
service = geopy.Nominatim(user_agent = "myGeocoder")
#对熊猫人DataFrame使用.apply()方法对每个地址进行地址解析
from geopy.extra.rate_limiter import RateLimiter
data["coordinates"] = data["addresses"].apply(RateLimiter(service.geocode,min_delay_seconds=1))
#显示经过地理编码的熊猫DataFrame表
data.head()
国家城市街道公制地址座标
0GermanyBerlinAlexanderplatz 110Germany, Berlin, Alexanderplatz 1(Alexanderstraße, Spandauer Vorstadt, Mitte, B…
1GermanyBerlinDircksenstrasse 25Germany, Berlin, Dircksenstrasse 2(2, Dircksenstraße, Luisenstadt, Mitte, Berlin…
2GermanyBerlinRathausstrasse 116Germany, Berlin, Rathausstrasse 1(1-14, Rathausstraße, Spandauer Vorstadt, Mitt…
3GermanyBerlinRosa-Luxemburg-Strasse 211Germany, Berlin, Rosa-Luxemburg-Strasse 2(2, Rosa-Luxemburg-Straße, Scheunenviertel, Mi…
4GermanyBerlinMemhardstrasse 88Germany, Berlin, Memhardstrasse 8(8, Memhardstraße, Scheunenviertel, Mitte, Ber…

使用经过地理处理的DataFrame,我创建了一个叶子热图:

#提取经度和纬度值以分离列表
longs = [coord.longitude for coord in data["coordinates"]]
lats = [coord.latitude for coord in data["coordinates"]]
#计算平均经度和纬度值
import statistics
meanLong = statistics.mean(longs)
meanLat = statistics.mean(lats)
#使用Map()创建基础地图对象
mapObj = folium.Map(location=[meanLat, meanLong], zoom_start = 14.5)
#创建热图图层
heatmap = HeatMap( list(zip(lats, longs, data["metric "])),
                   min_opacity=0.2,
                   max_val=data["metric "].max(),
                   radius=50, blur=50, 
                   max_zoom=1)
#将热图图层添加到基本地图
heatmap.add_to(mapObj)
mapObj

Leave a Reply

发表回复

您的电子邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

Close

其他操作