首页 > 解决方案 > 如何将 ID 分配给坐标集?-Python

问题描述

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

    id_road speed   geometry
0   1       50.00   LINESTRING (a_lon a_lat, b_lon b_lat)
1   2       50.00   LINESTRING (b_lon b_lat, c_lon c_lat)
2   3       48.00   LINESTRING (b_lon b_lat, e_lon e_lat)
3   4       50.00   LINESTRING (c_lon c_lat, d_lon d_lat)
4   5       51.00   LINESTRING (c_lon c_lat, f_lon f_lat)
...

这是网络的简化图:

在此处输入图像描述

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

但后来我希望end_roadRoad_1 成为begin_roadRoad_2。

我考虑过将坐标值与 id 值相关联,这样gdf我会得到:

    id_road speed   begin_road end_road geometry
0   1       50.00   1          2        LINESTRING (a_lon a_lat, b_lon b_lat)
1   2       50.00   2          3        LINESTRING (b_lon b_lat, c_lon c_lat)
2   3       48.00   2          5        LINESTRING (b_lon b_lat, e_lon e_lat)
3   4       50.00   3          4        LINESTRING (c_lon c_lat, d_lon d_lat)
4   5       51.00   3          6        LINESTRING (c_lon c_lat, f_lon f_lat)
...

我不确定如何编写代码,以及这种方法是否最适合我想要做的事情。对此有什么想法吗?

标签: pythongeopandas

解决方案


这是一个杂乱无章的实现,但如果它有帮助,请告诉我:

首先,您可能需要某种方式将坐标对转换为可以索引的对列表:

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]))

推荐阅读