Skip to content

Commit 70afd6b

Browse files
committed
Add option to use original OSM ids
1 parent 9fcb609 commit 70afd6b

File tree

1 file changed

+50
-10
lines changed

1 file changed

+50
-10
lines changed

utils/get_osm_data.py

Lines changed: 50 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,11 @@
1313
"""
1414

1515
from argparse import ArgumentParser
16+
import ast
1617
import logging
1718
import osmnx as ox
1819

19-
__version__ = "2025.1.16"
20+
__version__ = "2025.1.24"
2021

2122
RGBA_RED = (1, 0, 0, 1)
2223
RGBA_WHITE = (1, 1, 1, 1)
@@ -70,6 +71,9 @@
7071
default=20,
7172
help="Radius in meters to merge intersections. For more info, see osmnx documentation.",
7273
)
74+
parser.add_argument(
75+
"--use-original-ids", action="store_true", help="Use the original ids from OSM."
76+
)
7377
parser = parser.parse_args()
7478
logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s")
7579
# set up colored logging
@@ -123,19 +127,51 @@
123127
gdf_nodes.reset_index(inplace=True)
124128
gdf_edges.reset_index(inplace=True)
125129

126-
# Prepare node dataframe
127-
gdf_nodes = gdf_nodes[["osmid", "x", "y", "highway"]]
128-
# Prepare edge dataframe
130+
if parser.use_original_ids:
131+
for index, row in gdf_nodes.iterrows():
132+
# if "osmid_original" is a list, keep the first element
133+
old_list = ast.literal_eval(str(row["osmid_original"]))
134+
if isinstance(old_list, list):
135+
new_id = old_list[0]
136+
# update the edges with u_original or v_original in old_list, with new_id
137+
gdf_edges.loc[gdf_edges["u_original"].isin(old_list), "u_original"] = (
138+
new_id
139+
)
140+
gdf_edges.loc[gdf_edges["v_original"].isin(old_list), "v_original"] = (
141+
new_id
142+
)
143+
# update the node with new_id
144+
gdf_nodes.loc[index, "osmid_original"] = new_id
145+
146+
gdf_nodes = gdf_nodes[["osmid_original", "x", "y", "highway"]]
147+
gdf_edges = gdf_edges[
148+
[
149+
"u_original",
150+
"v_original",
151+
"length",
152+
"oneway",
153+
"lanes",
154+
"highway",
155+
"maxspeed",
156+
"name",
157+
]
158+
]
159+
160+
else:
161+
gdf_nodes = gdf_nodes[["osmid", "x", "y", "highway"]]
162+
163+
gdf_edges = gdf_edges[
164+
["u", "v", "length", "oneway", "lanes", "highway", "maxspeed", "name"]
165+
]
129166

130-
gdf_edges.to_csv("edges_ALL.csv", sep=";", index=False)
131-
gdf_edges = gdf_edges[
132-
["u", "v", "length", "oneway", "lanes", "highway", "maxspeed", "name"]
133-
]
134167
if parser.allow_duplicates:
135168
N_DUPLICATES = 0
136169
else:
137170
# Check for duplicate edges
138-
duplicated_mask = gdf_edges.duplicated(subset=["u", "v"])
171+
if parser.use_original_ids:
172+
duplicated_mask = gdf_edges.duplicated(subset=["u_original", "v_original"])
173+
else:
174+
duplicated_mask = gdf_edges.duplicated(subset=["u", "v"])
139175
N_DUPLICATES = duplicated_mask.sum()
140176

141177
if N_DUPLICATES > 0:
@@ -152,7 +188,11 @@
152188
ox.plot_graph(GRAPH, edge_color=edge_colors)
153189

154190
# Remove duplicated edges
155-
gdf_edges = gdf_edges.drop_duplicates(subset=["u", "v"])
191+
if parser.use_original_ids:
192+
gdf_edges = gdf_edges.drop_duplicates(subset=["u_original", "v_original"])
193+
else:
194+
gdf_edges = gdf_edges.drop_duplicates(subset=["u", "v"])
195+
156196
# Save the data
157197
place = parser.place.split(",")[0].strip().lower()
158198
gdf_nodes.to_csv(f"{place}_nodes.csv", sep=";", index=False)

0 commit comments

Comments
 (0)