我可以在 OSMNX 中手动在边上添加随机节点吗?

Can I add random nodes on edges manually in OSMNX?

我是 python 中的 OSMnx 和 NetworkX 包的新手。

假设我有以下示例:

import numpy as np
import osmnx as ox
import geopandas as gpd
import networkx as nx


place_name = 'Fefan'
graph = ox.graph_from_place(place_name, network_type='drive')
graph_proj = ox.project_graph(graph)
nodes_proj= ox.graph_to_gdfs(graph_proj, nodes=True, edges=False)
ox.plot_graph(graph_proj)

如您所见,我只获取了这个地方的两个节点。我想这就是 OSM 中的情况。有什么方法可以在此图中手动添加随机节点,尤其是在它的边缘?

更广阔的视野。我需要节点来计算一些建筑物之间的一些距离矩阵,这里没有显示。

最佳,

您可以通过以下方式完成此操作。

将节点和边导入为地理数据框。

import numpy as np
import osmnx as ox
import geopandas as gpd
import networkx as nx


place_name = 'Fefan'
graph = ox.graph_from_place(place_name, network_type='drive')
nodes= ox.graph_to_gdfs(graph, nodes=True, edges=False)
edges= ox.graph_to_gdfs(graph, edges=True, nodes=False)
ox.plot_graph(graph)

为新节点创建字典。在这种情况下,我刚刚添加了一个新节点。

import geopandas as gpd
from shapely.geometry import  Point

my_dict = {
  '001': {
    'y': 7.367210, 
    'x': 151.838487,
    'street_count': 1
  }
}

为新节点创建一个新的地理数据框。

tmp_list = []
for item_key, item_value in my_dict.items() :
  tmp_list.append({
    'geometry' : Point(item_value['x'], item_value['y']),
    'osmid': item_key,
    'y' : item_value['y'],
      'x' : item_value['x'],
    'street_count': item_value ['street_count']
   })
my_nodes = gpd.GeoDataFrame(tmp_list)

将新地理数据框 (my_nodes) 附加到旧地理数据框 (nodes) 以修改旧地理数据框并绘图。

nodes = nodes.append(my_nodes, ignore_index = True)
graph2 = ox.graph_from_gdfs(nodes, edges)
ox.plot_graph(graph2)