Skip to content

Commit

Permalink
Quelques astuces pour que le traitement ne plante plus lorsqu'un bate…
Browse files Browse the repository at this point in the history
…au n'a pas de position en base.
  • Loading branch information
Nicolas committed Mar 9, 2024
1 parent f9e91b2 commit a8b5639
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 15 deletions.
15 changes: 8 additions & 7 deletions src/bloom/domain/vessels/vessel_trajectory.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,14 @@ def __init__(self, metadata: pd.DataFrame, positions: gpd.GeoDataFrame) -> None:

self.chunk_data(24)

# Warning in CRS 4326 - the order is longitude,latitude
self.positions["lat"] = self.positions["geometry"].map(lambda pos: pos.y)
self.positions["lon"] = self.positions["geometry"].map(lambda pos: pos.x)
self.positions = self.compute_angle(self.positions)
self.positions = self.compute_change_direction_flag(self.positions, 50)
self.positions = self.compute_change_direction_flag(self.positions, 150)
self.positions = self.compute_rolling_deviation(self.positions, "3H")
if not self.positions.empty:
# Warning in CRS 4326 - the order is longitude,latitude
self.positions["lat"] = self.positions["geometry"].map(lambda pos: pos.y)
self.positions["lon"] = self.positions["geometry"].map(lambda pos: pos.x)
self.positions = self.compute_angle(self.positions)
self.positions = self.compute_change_direction_flag(self.positions, 50)
self.positions = self.compute_change_direction_flag(self.positions, 150)
self.positions = self.compute_rolling_deviation(self.positions, "3H")

# def __init__(self, data: pd.DataFrame,vessel_id = None,crs = "EPSG:3857"):

Expand Down
38 changes: 30 additions & 8 deletions src/bloom/infra/repositories/repository_vessel.py
Original file line number Diff line number Diff line change
Expand Up @@ -194,14 +194,36 @@ def convert_wkb_to_point(x: Any) -> Union[ Point, None ]:
self.get_all_positions(mmsi, session) if vessel is not None else []
)

df = (
pd.DataFrame([p.__dict__ for p in positions])
.drop(columns=["_sa_instance_state"])
.sort_values("timestamp")
.drop_duplicates(subset=["mmsi", "timestamp"])
.reset_index(drop=True)
)

if not positions:
# Create empty dataframe with expected columns when vessel has no trajectory
df = pd.DataFrame(columns=["timestamp",
"ship_name",
"IMO",
"vessel_id",
"mmsi",
"last_position_time",
"position",
"speed",
"navigation_status",
"vessel_length",
"vessel_width",
"voyage_destination",
"voyage_draught",
"voyage_eta",
"accuracy",
"position_sensors",
"course",
"heading",
"rot"])
df = df.astype({"timestamp": 'datetime64'})
else:
df = (
pd.DataFrame([p.__dict__ for p in positions])
.drop(columns=["_sa_instance_state"])
.sort_values("timestamp")
.drop_duplicates(subset=["mmsi", "timestamp"])
.reset_index(drop=True)
)
df["geometry"] = df["position"].map(convert_wkb_to_point)

# With CRS 4326, the coordinates are reversed
Expand Down

0 comments on commit a8b5639

Please sign in to comment.