python - 尝试制作网络节点的 GeoDataFrame 时出错
问题描述
我需要在道路网络上制作一些节点的 GeoDataFrame(使用 OSMnx 从 OpenStreetMap 中提取)。在下面的代码中,graph_proj
是我正在使用其节点的图,点是start_point
和end_point
:
import osmnx as ox
import geopandas as gpd
nodes_proj, edges_proj = ox.graph_to_gdfs(graph_proj, nodes=True, edges=True)
# Finding the nodes on the graph nearest to the points
start_node = ox.nearest_nodes(graph_proj, start_point.geometry.x, start_point.geometry.y, return_dist=False)
end_node = ox.nearest_nodes(graph_proj, end_point.geometry.x, end_point.geometry.y, return_dist=False)
start_closest = nodes_proj.loc[start_node]
end_closest = nodes_proj.loc[end_node]
# Create a GeoDataBase from the start and end nodes
od_nodes = gpd.GeoDataFrame([start_closest, end_closest], geometry='geometry', crs=nodes_proj.crs)
在最后一步(“# Create a GeoDataBase...”等)中,会引发错误。显然,它与传递给 GeoDataFrame 函数的 3 维数组有关。我传入位置([start_closest, end_closest]
)的方式会导致 3D 数组,这对吗?(错误消息显示,'必须通过二维输入。shape=(2, 1, 7)')我尝试转置此数组,但 GeoPandas 无法找到“几何”列。我如何以一种可以接受的方式传递这个论点?
解决方案
好的,所以我能够通过将每个节点写入其自己的 GeoDataFrame 然后合并两个 GeoDataFrame 来解决这个问题,如下所示:
od_nodes1 = gpd.GeoDataFrame(start_closest, geometry='geometry', crs=nodes_proj.crs)
od_nodes2 = gpd.GeoDataFrame(end_closest, geometry='geometry', crs=nodes_proj.crs)
od_nodes = od_nodes1.append(od_nodes2)
但是,肯定有一种更优雅的方式可以将多个特征写入 GeoDataFrame 吗?
推荐阅读
- azure - 管理员如何仅为应用注册授予特定用户的访问权限?
- python - Clustermap Seaborn 掩盖了矩阵的上对角线,固定每个“单元格”的大小并删除连接每个单元格的线
- java - 我们可以合并两个安卓源并使用产品风格吗?
- azure-keyvault - 如何仅在 ARM 模板中更改或检查它是否存在时更新 Azure Key Vault 中的机密
- java - 将 url 定义为值时 Spring Boot 返回 null
- git - 如何限制每页 git log 中显示的提交数量,但在按空格键时继续分页?
- jquery - jquery中的方法链音频属性
- c++ - CUDA 内核 printf 的语言环境
- java - LWJGL 3 窗口调整大小
- cuda - cudaOccupancyMaxPotentialBlockSize API 模板使用