Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ data/
plots/
cache/
examples/*.gpkg
/*.gpkg

# Created by https://www.toptal.com/developers/gitignore/api/visualstudiocode,python,macos,windows
# Edit at https://www.toptal.com/developers/gitignore?templates=visualstudiocode,python,macos,windows
Expand Down
2 changes: 1 addition & 1 deletion examples/mwe.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.12"
"version": "3.12.13"
}
},
"nbformat": 4,
Expand Down
2 changes: 1 addition & 1 deletion examples/mwe.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import growbikenet as gbn

a_edges = gbn.growbikenet(
city_name="Bath",
city_name = "Bath",
proj_crs = '3857',
ranking = 'betweenness_centrality',
export_data = True,
Expand Down
1 change: 1 addition & 0 deletions growbikenet/functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import pandas as pd
import geopandas as gpd
import networkx as nx
import osmnx as ox
from shapely.prepared import prep
from shapely.geometry import Point, LineString, MultiLineString
from itertools import combinations
Expand Down
9 changes: 7 additions & 2 deletions growbikenet/growbikenet.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,9 @@ def growbikenet(
export_plots=False,
export_video=False,
):
"""
creates list of edges that form city network, ordered by specified ranking method
"""Creates a list of edges ordered by a specified ranking method.

The edges form a subnetwork of a city's street network, interpreted as a growing bicycle network following [1]_.

Parameters
----------
Expand Down Expand Up @@ -46,6 +47,10 @@ def growbikenet(
a_edges : geopandas.geodataframe.GeoDataFrame
ordered geodataframe of all edges in street network

References
----------
.. [1] M. Szell, S. Mimar, T. Perlman, G. Ghoshal, R. Sinatra, "Growing urban bicycle networks", Scientific Reports 12, 6765 (2022)

"""
# check if user input is valid
if type(city_name) != str:
Expand Down
Binary file added tests/test_data/oelde_grid.gpkg
Binary file not shown.
Binary file not shown.
Binary file added tests/test_data/oelde_streets.gpkg
Binary file not shown.
30 changes: 25 additions & 5 deletions tests/test_functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ def create_geom_2():
linestring = LineString([(3, 3), (4, 4), (5, 5)])
return linestring

def test_intersect(create_geom_1, create_geom_2):
def test_intersects_properly(create_geom_1, create_geom_2):
assert intersects_properly(create_geom_1, create_geom_2) is False

@pytest.fixture
Expand All @@ -29,7 +29,7 @@ def create_validation_data_rank(method):
def method():
return "betweenness_centrality"

def test_rank(create_test_data_rank, method, create_validation_data_rank):
def test_rank_df(create_test_data_rank, method, create_validation_data_rank):
assert_frame_equal(rank_df(create_test_data_rank, method), create_validation_data_rank, check_dtype=False)

@pytest.fixture
Expand All @@ -51,7 +51,7 @@ def create_filtered_seed_points():
gdf['osmid'] = gdf.index
return gdf

def test_seed_point_filter(create_snapped_seed_points, create_filtered_seed_points, define_seed_point_delta):
def test_filter_seed_points(create_snapped_seed_points, create_filtered_seed_points, define_seed_point_delta):
assert_frame_equal(filter_seed_points(create_snapped_seed_points, define_seed_point_delta), create_filtered_seed_points, check_dtype=False)

@pytest.fixture
Expand All @@ -62,7 +62,7 @@ def create_validation_triangulation():
df = pd.DataFrame(d)
return df

def test_triangulation_creation(create_validation_triangulation, create_filtered_seed_points):
def test_create_potential_triangulation(create_validation_triangulation, create_filtered_seed_points):
assert_frame_equal(create_potential_triangulation(create_filtered_seed_points), create_validation_triangulation, check_dtype=False)

@pytest.fixture
Expand All @@ -82,5 +82,25 @@ def create_validation_filtered_triangulation():
edge_list = [['1','3'],['1','2'], ['2','3']]
return edge_list

def test_triangulation_filter(create_unfiltered_triangulation, create_validation_filtered_triangulation):
def test_filter_triangulation(create_unfiltered_triangulation, create_validation_filtered_triangulation):
assert filter_triangulation(create_unfiltered_triangulation) == create_validation_filtered_triangulation


@pytest.fixture
def create_validation_streets():
streets_nodes = gpd.read_file("./tests/test_data/oelde_streets.gpkg", layer = 'nodes').set_index('osmid')
streets_edges = gpd.read_file("./tests/test_data/oelde_streets.gpkg", layer = 'edges').set_index(['u', 'v', 'key'])
streets = ox.convert.graph_from_gdfs(streets_nodes, streets_edges)
return streets

def test_get_principal_bearing(create_validation_streets):
assert get_principal_bearing(create_validation_streets) == 65.0

@pytest.fixture
def create_validation_grid():
grid = gpd.read_file("./tests/test_data/oelde_grid.gpkg")
return grid

def test_get_grid_seed_points(create_validation_grid,create_validation_streets):
edges = ox.convert.graph_to_gdfs(create_validation_streets, nodes=False, edges=True, node_geometry=False, fill_edge_geometry=False)
create_validation_grid.equals(get_grid_seed_points(edges, 1707, 65.0))
7 changes: 3 additions & 4 deletions tests/test_main.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,9 @@

@pytest.fixture
def create_validation_gdf():
gdf = gpd.read_file("./tests/test_data/a_edges.gpkg")
gdf = gpd.read_file("./tests/test_data/oelde_growbikenet.gpkg")
return gdf

def test_growbikenet_main(create_validation_gdf):
gdf = create_validation_gdf
gdf.equals(growbikenet(city_name='Oelde', proj_crs='3857', ranking='betweenness_centrality', export_plots=False,
def test_growbikenet(create_validation_gdf):
create_validation_gdf.equals(growbikenet(city_name="Oelde", proj_crs='3857', ranking='betweenness_centrality', export_data=False, export_plots=False,
export_video=False))