diff --git a/skais/ais/ais_trajectory.py b/skais/ais/ais_trajectory.py index 6289cabc532fcc6e63384a5b76090e85bb2788b0..9ce6082197096898c856ac87f27287fbb723ca7e 100644 --- a/skais/ais/ais_trajectory.py +++ b/skais/ais/ais_trajectory.py @@ -5,7 +5,7 @@ import numpy as np from numba import jit from scipy.interpolate import interp1d -from skais.utils.geography import great_circle, position_from_distance +from skais.utils.geography import great_circle, position_from_distance, get_coord from skais.ais.ais_points import AISPoints @@ -229,16 +229,13 @@ class AISTrajectory(AISPoints): if features is not None: nb_channels = len(features) data = np.zeros((height, width, nb_channels), dtype=np.uint8) - if link: - raise ValueError("feature not implemented") if bounding_box != 'fit': raise ValueError("feature not implemented") positions = self.df[['longitude', 'latitude']].to_numpy() - range_longitude = (min(positions[:, 0]), max(positions[:, 0])) - range_latitude = (min(positions[:, 1]), max(positions[:, 1])) + min_lon, max_lon = (min(positions[:, 0]), max(positions[:, 0])) + min_lat, max_lat = (min(positions[:, 1]), max(positions[:, 1])) for longitude, latitude in positions: - x_coord = max(min(height - int(height * (latitude - range_latitude[0]) / (range_latitude[1] - range_latitude[0])) - 1, height - 1), 0) - y_coord = max(min(int((width - 1) * (longitude - range_longitude[0]) / (range_longitude[1] - range_longitude[0])), width - 1), 0) + x_coord, y_coord = get_coord(latitude, longitude, height, width, min_lat, max_lat, min_lon, max_lon) x_lower_bound = max(0, x_coord - node_size) x_upper_bound = min(height - 1, x_coord + node_size) @@ -249,4 +246,7 @@ class AISTrajectory(AISPoints): for x in range(x_lower_bound, x_upper_bound + 1): for y in range(y_lower_bound, y_upper_bound + 1): data[x, y] = [1] + + if link: + raise ValueError("feature not implemented") return data diff --git a/skais/utils/geography.py b/skais/utils/geography.py index 79b110194c7da6bd332b310c1e46a70beb93a2dd..de21a9aed417ba8e959aa0bb5a5780f9b879634f 100644 --- a/skais/utils/geography.py +++ b/skais/utils/geography.py @@ -23,6 +23,13 @@ def great_circle(lat1, lat2, long1, long2): return d +def get_coord(lat, lon, height, width, min_lat, max_lat, min_lon, max_lon): + x_coord = max(min(height - int(height * (lat - min_lat) / (max_lat - min_lat)) - 1, height - 1), 0) + y_coord = max(min(int((width - 1) * (lon - min_lon) / (max_lon - min_lon)), width - 1), 0) + + return x_coord, y_coord + + def position_from_distance(position, distances): lat = np.arcsin( np.sin(np.radians(position[0])) * np.cos(distances[0] / R) + np.cos(np.radians(position[0])) * np.sin(