From 7268fdc6de2db63aaad5a0145e208315a96496c6 Mon Sep 17 00:00:00 2001 From: Michael Szell Date: Thu, 25 Jun 2026 08:53:58 +0200 Subject: [PATCH] Rename seed_point_delta to seed_point_snap_distance --- GrowBikeMVP.ipynb | 4 ++-- growbikenet/functions.py | 26 +++++++++++++------------- growbikenet/growbikenet.py | 14 +++++++------- tests/test_functions.py | 6 +++--- 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/GrowBikeMVP.ipynb b/GrowBikeMVP.ipynb index 7371bd4..3826f0e 100644 --- a/GrowBikeMVP.ipynb +++ b/GrowBikeMVP.ipynb @@ -66,7 +66,7 @@ "city_name = \"Bath\"\n", "seed_point_spacing = 1707 # distance between seed points, in meters\n", "crs_projected = \"3857\"\n", - "seed_point_delta = (\n", + "seed_point_snap_distance = (\n", " 500 # maximal distance between seed point and actual point in OSM data, in meters\n", ")\n", "method = \"betweenness_centrality\" # specify method via user input/config file later. Each method will need meta-information whether it is a node or an edge method." @@ -170,7 +170,7 @@ "outputs": [], "source": [ "seed_points_snapped = snap_seed_points(seed_points, nodes)\n", - "seed_points_snapped = filter_seed_points(seed_points_snapped, seed_point_delta)" + "seed_points_snapped = filter_seed_points(seed_points_snapped, seed_point_snap_distance)" ] }, { diff --git a/growbikenet/functions.py b/growbikenet/functions.py index 7c395af..278f82f 100644 --- a/growbikenet/functions.py +++ b/growbikenet/functions.py @@ -20,7 +20,7 @@ def validate_parameters( ranking, seed_point_type, seed_point_grid_spacing, - seed_point_delta, + seed_point_snap_distance, seed_point_linking, existing_network_spacing, export_data, @@ -69,10 +69,10 @@ def validate_parameters( raise ValueError("With seed_point_type 'file', a seed_point_file must be provided") if seed_point_type == 'tags' and type(seed_point_file) is None: raise ValueError("With seed_point_type 'tags', seed_point_tags must be provided") - if type(seed_point_delta) is not int and seed_point_delta != 'auto': - raise TypeError("seed_point_delta must be 'auto' or an integer") - if type(seed_point_delta) is int and seed_point_delta <= 0: - raise ValueError("seed_point_delta must be a positive integer") + if type(seed_point_snap_distance) is not int and seed_point_snap_distance != 'auto': + raise TypeError("seed_point_snap_distance must be 'auto' or an integer") + if type(seed_point_snap_distance) is int and seed_point_snap_distance <= 0: + raise ValueError("seed_point_snap_distance must be a positive integer") if seed_point_linking not in ['auto', 'triangulate_delaunay', 'quadrangulate']: raise ValueError("seed_point_linking must be 'auto' or 'triangulate_delaunay' or 'quadrangulate'") if seed_point_linking == 'quadrangulate' and (seed_point_type != 'grid_square' or existing_network_spacing is not None): @@ -141,7 +141,7 @@ def slugify(s): def resolve_auto_parameters( seed_point_type, seed_point_grid_spacing, - seed_point_delta, + seed_point_snap_distance, seed_point_linking, existing_network_spacing, phi, @@ -208,13 +208,13 @@ def resolve_auto_parameters( else: seed_point_grid_spacing = 1707 - if seed_point_delta == 'auto': - seed_point_delta = int(np.ceil(seed_point_grid_spacing/4)) + if seed_point_snap_distance == 'auto': + seed_point_snap_distance = int(np.ceil(seed_point_grid_spacing/4)) if existing_network_spacing == 'auto': existing_network_spacing = int(np.ceil(seed_point_grid_spacing/2)) - return seed_point_type, seed_point_grid_spacing, seed_point_delta, seed_point_linking, existing_network_spacing + return seed_point_type, seed_point_grid_spacing, seed_point_snap_distance, seed_point_linking, existing_network_spacing def import_network(street_network_file, crs_projected): """Import and project a street network from gpkg file @@ -252,7 +252,7 @@ def import_network(street_network_file, crs_projected): g_undir = g.to_undirected().copy() # convert to undirected (dropping OSMnx keys!) city_boundary_gdf = gpd.GeoDataFrame(gpd.GeoSeries(nodes.union_all().convex_hull), geometry=0, crs=nodes.crs) # We do this before the projection of nodes below - # To do: To be super-correct, the hull should be buffered by seed_point_delta (in degrees due to being unprojected) + # To do: To be super-correct, the hull should be buffered by seed_point_snap_distance (in degrees due to being unprojected) nodes, edges = prepare_nodes_edges(nodes, edges, crs_projected) @@ -842,14 +842,14 @@ def snap_seed_points(seed_points, nodes): return seed_points_snapped -def filter_seed_points(seed_points_snapped, seed_point_delta): +def filter_seed_points(seed_points_snapped, seed_point_snap_distance): """Remove seed_points that are further than delta away from an actual osm node Parameters ---------- seed_points_snapped: geopandas.geodataframe.GeoDataFrame seed_points with additional information about geometries of osm nodes that seed nodes were snapped to - seed_point_delta: int + seed_point_snap_distance: int maximum distance a seed_point may be removed from an actual osm node Returns @@ -863,7 +863,7 @@ def filter_seed_points(seed_points_snapped, seed_point_delta): gdf["snap_dist"] = gdf.geometry_generated.distance(gdf.geometry_osm) # Filter by threshold - gdf = gdf[gdf["snap_dist"] <= seed_point_delta].copy() + gdf = gdf[gdf["snap_dist"] <= seed_point_snap_distance].copy() # Drop duplicates: one row per osmid gdf = gdf.sort_values("snap_dist").drop_duplicates("osmid") diff --git a/growbikenet/growbikenet.py b/growbikenet/growbikenet.py index 71737a0..5096ac8 100644 --- a/growbikenet/growbikenet.py +++ b/growbikenet/growbikenet.py @@ -40,7 +40,7 @@ def growbikenet( ranking='betweenness_centrality', seed_point_type='auto', seed_point_grid_spacing='auto', - seed_point_delta='auto', + seed_point_snap_distance='auto', seed_point_linking='auto', existing_network_spacing=None, export_data=True, @@ -82,9 +82,9 @@ def growbikenet( Auto-value for seed_point_type 'grid_triangle': 1154 Auto-value otherwise: 1707 These values ensure that any point in the city is always within 500m of the network (under perfect conditions). For case 1707, see [1]_. - seed_point_delta : 'auto' | int, default 'auto' + seed_point_snap_distance : 'auto' | int, default 'auto' Maximum distance between raw seed points and osm nodes for snapping, in meters. - Auto-value is round(seed_point_grid_spacing/4). + Auto-value is round(seed_point_grid_spacing/4). If integer, must be positive. seed_point_linking : str ('auto' | 'triangulate_delaunay' | 'quadrangulate'), default 'auto' The algorithm for linking up the seed points into an unrouted, abstract network. If set to 'auto', selects 'triangulate_delaunay' or 'quadrangulate' automatically depending on the street network's orientation entropy, see [3]_. @@ -167,7 +167,7 @@ def growbikenet( ranking, seed_point_type, seed_point_grid_spacing, - seed_point_delta, + seed_point_snap_distance, seed_point_linking, existing_network_spacing, export_data, @@ -231,10 +231,10 @@ def growbikenet( # Now that the graph is ready, decide auto values ox.bearing.add_edge_bearings(g_undir) phi = orientation_order(g_undir) - seed_point_type, seed_point_grid_spacing, seed_point_delta, seed_point_linking, existing_network_spacing = resolve_auto_parameters( + seed_point_type, seed_point_grid_spacing, seed_point_snap_distance, seed_point_linking, existing_network_spacing = resolve_auto_parameters( seed_point_type, seed_point_grid_spacing, - seed_point_delta, + seed_point_snap_distance, seed_point_linking, existing_network_spacing, phi, @@ -275,7 +275,7 @@ def growbikenet( mapping = {row.geometry_generated: row.osmid for row in seed_points_snapped.itertuples()} nx.relabel_nodes(seed_network, mapping, copy=False) progress_bar.update(1) - seed_points_snapped_filtered = filter_seed_points(seed_points_snapped, seed_point_delta) + seed_points_snapped_filtered = filter_seed_points(seed_points_snapped, seed_point_snap_distance) if seed_point_linking == "quadrangulate": # Remove all filtered out nodes filtered_nodes = set(seed_points_snapped.osmid) - set(seed_points_snapped_filtered.osmid) seed_network.remove_nodes_from(filtered_nodes) diff --git a/tests/test_functions.py b/tests/test_functions.py index 35e1df2..59baaec 100644 --- a/tests/test_functions.py +++ b/tests/test_functions.py @@ -58,7 +58,7 @@ def test_rank_df(test_data_rank, method, validation_data_rank): @pytest.fixture -def seed_point_delta(): +def seed_point_snap_distance(): return 500 @@ -86,10 +86,10 @@ def filtered_seed_points(): def test_filter_seed_points( - snapped_seed_points, filtered_seed_points, seed_point_delta + snapped_seed_points, filtered_seed_points, seed_point_snap_distance ): assert_frame_equal( - filter_seed_points(snapped_seed_points, seed_point_delta), + filter_seed_points(snapped_seed_points, seed_point_snap_distance), filtered_seed_points, check_dtype=False, )