From fda1ccca16e9471dc025a67dda1ea35e4cdcc914 Mon Sep 17 00:00:00 2001 From: syhwawa Date: Tue, 6 Aug 2024 12:03:41 +0100 Subject: [PATCH] Update the code to address the comment --- src/pam/operations/snap.py | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/src/pam/operations/snap.py b/src/pam/operations/snap.py index c9e03606..d3bb340f 100644 --- a/src/pam/operations/snap.py +++ b/src/pam/operations/snap.py @@ -4,11 +4,11 @@ import geopandas as gp import numpy as np +from scipy.spatial import cKDTree from pam.core import Population from pam.read import read_matsim from pam.write import write_matsim -from scipy.spatial import cKDTree def snap_facilities_to_network( @@ -21,7 +21,7 @@ def snap_facilities_to_network( network (gp.GeoDataFrame): A network geometry shapefile. link_id_field (str, optional): The link ID field to use in the network shapefile. Defaults to "id". """ - if network.geometry.geom_type[0] == 'Point': + if network.geometry.geom_type[0] == "Point": coordinates = np.array(list(zip(network.geometry.x, network.geometry.y))) else: coordinates = np.array(list(zip(network.geometry.centroid.x, network.geometry.centroid.y))) @@ -29,21 +29,11 @@ def snap_facilities_to_network( tree = cKDTree(coordinates) link_ids = network[link_id_field].values - activity_points = [] - activities_info = [] for _, _, person in population.people(): for act in person.activities: point = act.location.loc - if not hasattr(point, 'x') or not hasattr(point, 'y'): - point = point.centroid - activity_points.append((point.x, point.y)) - activities_info.append(act) - - activity_points = np.array(activity_points) - distances, indices = tree.query(activity_points) - - for act, index in zip(activities_info, indices): - act.location.link = link_ids[index] + distance, index = tree.query([(point.x, point.y)]) + act.location.link = link_ids[index[0]] def run_facility_link_snapping(