|
13 | 13 | """ |
14 | 14 |
|
15 | 15 | from argparse import ArgumentParser |
| 16 | +import ast |
16 | 17 | import logging |
17 | 18 | import osmnx as ox |
18 | 19 |
|
19 | | -__version__ = "2025.1.16" |
| 20 | +__version__ = "2025.1.24" |
20 | 21 |
|
21 | 22 | RGBA_RED = (1, 0, 0, 1) |
22 | 23 | RGBA_WHITE = (1, 1, 1, 1) |
|
70 | 71 | default=20, |
71 | 72 | help="Radius in meters to merge intersections. For more info, see osmnx documentation.", |
72 | 73 | ) |
| 74 | + parser.add_argument( |
| 75 | + "--use-original-ids", action="store_true", help="Use the original ids from OSM." |
| 76 | + ) |
73 | 77 | parser = parser.parse_args() |
74 | 78 | logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") |
75 | 79 | # set up colored logging |
|
123 | 127 | gdf_nodes.reset_index(inplace=True) |
124 | 128 | gdf_edges.reset_index(inplace=True) |
125 | 129 |
|
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 | + ] |
129 | 166 |
|
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 | | - ] |
134 | 167 | if parser.allow_duplicates: |
135 | 168 | N_DUPLICATES = 0 |
136 | 169 | else: |
137 | 170 | # 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"]) |
139 | 175 | N_DUPLICATES = duplicated_mask.sum() |
140 | 176 |
|
141 | 177 | if N_DUPLICATES > 0: |
|
152 | 188 | ox.plot_graph(GRAPH, edge_color=edge_colors) |
153 | 189 |
|
154 | 190 | # 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 | + |
156 | 196 | # Save the data |
157 | 197 | place = parser.place.split(",")[0].strip().lower() |
158 | 198 | gdf_nodes.to_csv(f"{place}_nodes.csv", sep=";", index=False) |
|
0 commit comments