python - 如何将 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。如果我们以上图中给出的示例为例:
- 第一个 id 将是道路的起点(例如,对于 Road_1,此 id 将是
begin_road
并且它将等于 1)。 - 第二个 id 将是道路的尽头(例如,对于 Road_1
end_road
= 2)。
但后来我希望end_road
Road_1 成为begin_road
Road_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_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)
...
我不确定如何编写代码,以及这种方法是否最适合我想要做的事情。对此有什么想法吗?
解决方案
这是一个杂乱无章的实现,但如果它有帮助,请告诉我:
首先,您可能需要某种方式将坐标对转换为可以索引的对列表:
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]))
推荐阅读
- php - Laravel 管理仪表板
- javascript - fs.open 没有在 nodejs 中打开所需的文件
- regex - 正则表达式:排除 5 位数字
- javascript - 循环调用 api 中的 React 功能组件仅返回通过 api 传递的最后一个元素的响应
- sql - BigQuery SQL - 将1列中的多行与另一个表中的行相匹配?
- reactjs - 如何更改 NextJS 根路径页面
- python - 硒没有加载页面
- oracle-apex - 识别页面调用模态页面
- c - 如何在 FFmpeg 代码 (C) 中设置帧速率/FPS?
- reactjs - 浏览器未在 React 应用程序中维护正确的历史记录