在地图上绘制经度和纬度并为每个子集创建线(DataFrame 中的每一行)
Plotting longitude and latitude on a map and create line for each subset (every row in 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))
我不确定我是否完全理解你的问题。我的理解是,你有一个 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])
有关详细信息,请参阅 this page。
此外,我认为您做出了一些有问题的设计选择。讨论这些并不是这个答案的重点,但我建议您永远不要使用名称 lan
作为纬度,这没有任何意义。
我在我的数据集上做了很多工作,让它像下面这样。 我知道如何在 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))
我不确定我是否完全理解你的问题。我的理解是,你有一个 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])
有关详细信息,请参阅 this page。
此外,我认为您做出了一些有问题的设计选择。讨论这些并不是这个答案的重点,但我建议您永远不要使用名称 lan
作为纬度,这没有任何意义。