OSMNx : get coordinates of nodes using OSM id
G.node[38862848]['y'] for latitude and G.node[38862848]['x'] for longitude
you have all the attribute of each node and edge in the Graph. you can get node attributes using:
G.node[38862848]
#out: {'highway': nan,
# 'lat': 45.3210533,
# 'lon': -122.9790558,
# 'osmid': '38862848',
# 'ref': nan,
# 'x': 501641.47862882155,
# 'y': 5018616.5723966481}
G.node[38862848]['lat']
# out: 45.3210533
and to get edge attributes you can use G[u][v]
:
G[5035130880][4963510289]
# out:
#{0: {'bridge': 'yes',
# 'geometry': <shapely.geometry.linestring.LineString at 0x7f90ad7d5860>,
# 'highway': 'secondary',
# 'length': 671.332597496,
# 'name': 'Northwest 185th Avenue',
# 'oneway': False,
# 'osmid': [124454683, 24446714, 124454682]}}
All attributes are also in GeoDataFrame's of the graph. If you have list of nodes, the easiest way to get the geometry of all nodes is:
import osmnx as ox
import networkx as nx
gdf_nodes, gdf_edges = ox.graph_to_gdfs()
path = nx.shortest_path(G, G.nodes()[0], G.nodes()[1])
gdf_nodes.loc[path]
#out:
# highway lat lon osmid ref x y geometry traffic_signals
#5035130880 NaN 45.5637 -122.868 5035130880 NaN 510334 5.04558e+06 POINT (510334.0390091945 5045583.999886028) 0
#4963510289 NaN 45.5698 -122.868 4963510289 NaN 510329 5.04625e+06 POINT (510329.3114555664 5046254.728223645) 0
# ...
the output is a GeoDataFrame.
See also this on GitHub for more details:
The
x
andy
attributes are your node coordinates. If your graph is unprojected, then they are in lat-lon (degree units).If you've projected your graph, then
x
andy
are your projected node coordinates (in meters or whatever units your projected coordinate system uses) and the nodes will also have additionallat
andlon
attributes that contain the original unprojected coordinates.
import osmnx as ox
G = ox.graph_from_place('Piedmont, CA, USA', network_type='drive')
node_id = list(G.nodes)[0]
G.nodes[node_id]['x'] #lon
G.nodes[node_id]['y'] #lat