首页 > 解决方案 > 在地图上绘制经度和​​纬度并为每个子集创建线(DataFarame 中的每一行)

问题描述

我在我的数据集上做了很多工作,使它像下面这样。我知道如何在 folium 中绘制每个纬度和经度,如下所示。我不知道如何在每行中我的数据集的每对纬度和经度之间绘制线(多边形)。正如我们所见,每一行都是纬度和经度的组合。

该代码用于显示地图上的每个点(纬度和经度)。

注意:我没有为提供的 DataFrame 编写此代码。它用于具有名为“start_station_latitude”的列和其他列 start_station_longitude 的数据框。

 
import matplotlib.pyplot as plt

#installation
# Create a world map to show distributions of users 
import folium
from folium.plugins import MarkerCluster
#empty map
world_map= folium.Map(tiles="CartoDB dark_matter")
marker_cluster = MarkerCluster().add_to(world_map)
#for each coordinate, create circlemarker of user percent
for i in range(len(trip_counts_10)):
        lat = trip_counts_10.iloc[i]['start_station_latitude']
        long = trip_counts_10.iloc[i]['start_station_longitude']
           
        
        radius=5
        popup_text = """Users : {}<br>"""
        popup_text = popup_text.format(trip_counts_10.iloc[i]['start_station_name'])


        folium.CircleMarker(location = [lat, long], radius=radius, popup= popup_text, fill =True).add_to(marker_cluster)

plt.savefig('x', dpi=300)
#show the map
world_map
#tiles="CartoDB dark_matter"
#cartodbpositron

        lan0     lan1       lan2           long0      long1      long2
    59.915667   59.913796   59.922539   10.777567   10.735802   10.704541
    59.929853   59.919463   59.910356   10.711515   10.743829   10.705106
    ....

我还编写了下面的代码来获取每一行的列表,但我不知道接下来我应该做什么。

import geopandas as gpd
from shapely.geometry import Polygon

Row_list = []
for index, rows in indices_df.iterrows():
    my_list =[rows.lan0, rows.lan1, rows.lan2,rows.long0, rows.long1, rows.long2]
    Row_list.append(my_list)
print(Row_list)
    #polygon_geom = Polygon(zip(lon_point_list, lat_point_list))
    

标签: pythongeospatialgeopandasfolium

解决方案


我不确定我是否完全理解你的问题。我的理解是,你有一个每行有三个纬度和三个经度的df,你想通过这三个点画一条线。如果这就是你的意思,你可以试试这个:

folium.PolyLine(points).add_to(world_map)

points是具有纬度和经度的元组列表。你可以像这样制作这个列表:

mid_i = int(len(my_list)/2)
points = [(my_list[i], my_list(mid_i + i]) for i in range(mid_i)]

如果您希望关闭该行,只需将第一个点添加到此列表的末尾即可。

points.append(points[0])

有关更多信息,请参阅此页面

另外,我认为你做了一些有问题的设计选择。讨论这些并不是这个答案的真正重点,但我建议你永远不要使用lan纬度的名称,这是没有意义的。


推荐阅读