From 88cb2040ec89a5da181ada79dbd590eee287cee4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20L=2E=20Magalh=C3=A3es?= <pmlpm@posteo.de> Date: Mon, 6 May 2024 11:40:45 +0200 Subject: [PATCH] Added a method for creating edge geometries. --- src/topupopt/data/gis/utils.py | 14 +++++++++- src/topupopt/problems/esipp/utils.py | 41 ---------------------------- tests/test_gis_utils.py | 20 +++++++++++++- 3 files changed, 32 insertions(+), 43 deletions(-) diff --git a/src/topupopt/data/gis/utils.py b/src/topupopt/data/gis/utils.py index 39fafe6..0c21992 100644 --- a/src/topupopt/data/gis/utils.py +++ b/src/topupopt/data/gis/utils.py @@ -11,7 +11,7 @@ from networkx import MultiDiGraph, MultiGraph from pandas import MultiIndex, Series from numpy import float64, int64 from geopandas import GeoDataFrame, read_file -from shapely.geometry import Point +from shapely.geometry import Point, LineString import contextily as cx # local, internal @@ -1229,6 +1229,18 @@ def convert_edge_path( # return statement return node_path +# ***************************************************************************** +# ***************************************************************************** + +def create_edge_geometry(network: MultiDiGraph, edge_key) -> LineString: + "Returns a newly-created geometry for a given edge." + + return LineString( + [(network.nodes[edge_key[0]][osm.KEY_OSMNX_X], + network.nodes[edge_key[0]][osm.KEY_OSMNX_Y]), + (network.nodes[edge_key[1]][osm.KEY_OSMNX_X], + network.nodes[edge_key[1]][osm.KEY_OSMNX_Y])] + ) # ***************************************************************************** # ***************************************************************************** diff --git a/src/topupopt/problems/esipp/utils.py b/src/topupopt/problems/esipp/utils.py index db692f8..ebfacf8 100644 --- a/src/topupopt/problems/esipp/utils.py +++ b/src/topupopt/problems/esipp/utils.py @@ -14,47 +14,6 @@ from matplotlib import pyplot as plt # local, internal from .problem import InfrastructurePlanningProblem from .network import Network - -# ***************************************************************************** -# ***************************************************************************** - -def review_final_network(network: Network): - # check that the network topology is a tree - if network.has_tree_topology(): - print("The network has a tree topology.") - else: - print("The network does not have a tree topology.") - - # check the existence of forward and reverse arcs between the same nodes - has_forward_reverse_arcs(network, print_result=True) - - -# ***************************************************************************** -# ***************************************************************************** - - -def has_forward_reverse_arcs(network: Network, print_result: bool = True) -> bool: - """Returns True if there are simultaneous forward and reverse arcs.""" - - # check the existence of forward and reverse arcs in the same segment - forward_reverse_arcs = [ # get the arcs selected - arc_key[0:2] - for arc_key in network.edges(keys=True) - if True in network.edges[arc_key][Network.KEY_ARC_TECH].options_selected - ] - forward_reverse_arcs = [ # get the selected arcs that exist both ways - arc_key - for arc_key in forward_reverse_arcs - if (arc_key[1], arc_key[0]) in forward_reverse_arcs - ] - if print_result: - if len(forward_reverse_arcs) == 0: - print( - "The network has no forward and reverse arcs in" + " the same segment." - ) - else: - print("The network has forward and reverse arcs in" + " the same segment.") - # ***************************************************************************** # ***************************************************************************** diff --git a/tests/test_gis_utils.py b/tests/test_gis_utils.py index 41e6509..d2edd78 100644 --- a/tests/test_gis_utils.py +++ b/tests/test_gis_utils.py @@ -12,6 +12,7 @@ from pandas import concat, MultiIndex, Series import networkx as nx import osmnx as ox from shapely.geometry import Point, LineString +from shapely import intersects # local, internal @@ -2642,7 +2643,24 @@ class TestGisUtils: # ************************************************************************* # ************************************************************************* - + + def test_create_edge_geometry(self): + + G = nx.MultiDiGraph() + edge_key = (0, 1) + G.add_node(0, x=0, y=0) + G.add_node(1, x=1, y=1) + G.add_edge(0, 1, length=2**0.5) + first_geo = gis_utils.create_edge_geometry(G, edge_key) + edge_key = (2, 3) + G.add_node(2, x=0, y=1) + G.add_node(3, x=1, y=0) + G.add_edge(2, 3, length=2**0.5) + second_geo = gis_utils.create_edge_geometry(G, edge_key) + assert intersects(first_geo, second_geo) + + # ************************************************************************* + # ************************************************************************* # ***************************************************************************** # ***************************************************************************** -- GitLab