如何为坐标集分配ID-python

如何为坐标集分配ID-python,python,geopandas,Python,Geopandas,我正在使用一个GeoDataFrame(gdf),其中包含一个道路网络(线),如下所示: id\u道路速度几何图形 0 1 50.00线串(a_lon a_lat,b_lon b_lat) 1 2 50.00线串(b_-lon b_-lat,c_-lon c_-lat) 2 3 48.00线串(b_lon b_lat,e_lon e_lat) 3 4 50.00线串(c_lon c_lat,d_lon d_lat) 4 5 51.00线串(c_-lon c_-lat,f_-lon f_-lat)

我正在使用一个
GeoDataFrame(gdf)
,其中包含一个道路网络(线),如下所示:

id\u道路速度几何图形
0 1 50.00线串(a_lon a_lat,b_lon b_lat)
1 2 50.00线串(b_-lon b_-lat,c_-lon c_-lat)
2 3 48.00线串(b_lon b_lat,e_lon e_lat)
3 4 50.00线串(c_lon c_lat,d_lon d_lat)
4 5 51.00线串(c_-lon c_-lat,f_-lon f_-lat)
...
这是网络的简化图:

我想向
gdf
添加一组两个id。如果我们以上图中给出的示例为例:

  • 第一个id将是道路的起点(例如,对于道路1,该id将是
    begin\u road
    ,它将等于1)
  • 第二个id将是道路的终点(例如,对于道路1
    end\u道路
    =2)
但是我想把路1的尽头变成路2的起点

我考虑将坐标值与id值相关联,以便在
gdf
中获得:

  • (a_lon,a_lat)=1
  • (b_lon,b_lat)=2
  • (c_lon,c_lat)=3
  • (d_lon,d_lat)=4
  • (e_lon,e_lat)=5
  • (f_lon,f_lat)=6
id\u道路速度开始\u道路结束\u道路几何
0 1 50.00 1 2线串(a_lon a_lat,b_lon b_lat)
1 2 50.00 2 3线串(b_lon b_lat,c_lon c_lat)
2 3 48.00 2 5线串(b_lon b_lat,e_lon e_lat)
3 4 50.00 3 4线串(c_lon c_lat,d_lon d_lat)
4 5 51.00 3 6线串(c_lon c_lat,f_lon f_lat)
...

我不知道该如何编写代码,也不知道这个方法是否适合我所要做的事情。对此有何想法?

这是一个零碎的实现,但请告诉我它是否有帮助:

首先,您可能需要某种方法将坐标对转换为一组对,从中可以索引:

coordinate_pairs = df['geometry'].apply(lambda g: [g.coords[0], g.coords[-1]])
coordinates = [p for pair in coordinate_pairs for p in pair]
coordinates_to_index = {tuple(coordinates[i]): i for i in range(len(coordinates))}
之后,您可以检索索引以创建新列:

df['begin_road'] = df['geometry'].apply(lambda g: coordinates_to_index.get(g.coords[0]))
df['end_road'] = df['geometry'].apply(lambda g: coordinates_to_index.get(g.coords[-1]))

哇,这帮了大忙,非常感谢!其实很清楚!