用 Folium 绘制起点和终点集群

Plotting Origin and Destination clusters with Folium

我有一个起点和终点坐标数据集,基本上如下所示:

import pandas as pd
import numpy as np

index = [1, 2, 3, 4, 5]
o_lt = pd.Series([19.285423, 19.285423, 19.639463, 19.631464, 19.631464], index = index)
o_lg = pd.Series([-99.126699, -99.126699, -99.094227, -99.123784, -99.123784], index = index)
d_lt = pd.Series([19.359331, 19.368288, 19.443874, 19.443874, 19.443874], index = index)
d_lg = pd.Series([-99.270102, -99.259745, -99.153412, -99.153412, -99.153412], index = index)
cluster = pd.Series([33, 33, 33, 33, 33], index = index)

cdmx_df = pd.DataFrame(np.c_[o_lt, o_lg, d_lt, d_lg, cluster], columns = ["origin_latitude", 'origin_longitude', 'destination_latitude', 'destination_longitude', 'cluster'])

print(cdmx_df)

我的数据集包含 1,600,000 个观察值。所以我所做的是一个 k-means 聚类,这就是我如何得到列 cluster.

现在我接下来要做的是在 folium 的地图上绘制我的观察结果。 我想同时观察始发地和目的地,看看哪些路线需求量最大。

我正在用 folium 做这个:

cdmx_map = folium.map.FeatureGroup()

for lat1, lng1, lat2, lng2, cluster in zip(cdmx_df['origin_latitude'],
                                                 cdmx_df['origin_longitude'],
                                                 cdmx_df['destination_latitude'],
                                                 cdmx_df['destination_longitude'],
                                                 cdmx_df['cluster'],):
    cdmx_map.add_child(
        folium.vector_layers.CircleMarker(
            [lat1, lng1, lat2, lng2],
            
            color = 'green',
            fill = True,
            fill_color = 'blue',
            fill_opacity = 0.6,
            tooltip = str(lng1) + ',' + str(lat1) + ',' + str(lat2) + ',' + str(lng2)
        )
    )

此代码的问题在于它只允许我使用一个坐标进行绘图:´( 所以它不是 运行。

有没有办法在一张 folium 地图上绘制我的目的地坐标和原点坐标?

你的目的有点不明确。我的理解是如何在一张地图上画出起点和终点。因此,创建一个组并将起点的圆圈标记和终点的圆圈标记添加到组中。最后,将组与地图相关联。这段代码对应一个cluster,但是如果需要多个cluster,在当前循环过程之外增加一个cluster creation loop过程。

在你的代码中,圆圈标记用于设置定位起点的经纬度和定位的目的地点的经纬度,但圆圈标记设置为单个纬度和经度,如果需要标记折线,则将它们设置为 two-dimensional 列表。

import folium
from folium import FeatureGroup, LayerControl

cdmx_map = folium.map.FeatureGroup(name='Origin to destination')

m = folium.Map(location=[cdmx_df['origin_latitude'].mean(), cdmx_df['origin_longitude'].mean()], zoom_start=10)

for lat1, lng1, lat2, lng2, cluster in zip(cdmx_df['origin_latitude'],
                                                 cdmx_df['origin_longitude'],
                                                 cdmx_df['destination_latitude'],
                                                 cdmx_df['destination_longitude'],
                                                 cdmx_df['cluster'],):

    origin = folium.vector_layers.CircleMarker(
        [lat1, lng1],
        radius=10,
        color = 'green',
        fill = True,
        fill_color = 'green',
        fill_opacity = 0.6,
        tooltip = str(lng1) + ',' + str(lat1)
        ).add_to(cdmx_map)

    destination = folium.vector_layers.CircleMarker(
        [lat2, lng2],
        radius=10,
        color = 'red',
        fill = True,
        fill_color = 'red',
        fill_opacity = 0.6,
        tooltip = str(lat2) + ',' + str(lng2)
        ).add_to(cdmx_map)
    
cdmx_map.add_to(m)
LayerControl().add_to(m)
m