GeoIntel release gates / Compile, test, contracts and builds (push) Successful in 1m49s
GeoIntel release gates / Python and npm vulnerability policy (push) Successful in 21s
GeoIntel release gates / Production AI image, SBOM and container scan (push) Successful in 5m39s
GeoIntel release gates / Deploy exact gated revision to Unraid (push) Failing after 58m43s
47 lines
1.7 KiB
Python
47 lines
1.7 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
from uuid import UUID
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
from app.schemas.operations import VectorSelectionBBox
|
|
|
|
|
|
class ChangeDetectionRequest(BaseModel):
|
|
source_dataset_id: UUID
|
|
target_dataset_id: UUID
|
|
iou_threshold: float = Field(default=0.8, ge=0.0, le=1.0)
|
|
# Below this the two footprints are separate objects rather than one that
|
|
# was redrawn; between the two thresholds the change class is "modified".
|
|
modified_threshold: float = Field(default=0.3, ge=0.0, le=1.0)
|
|
include_unchanged: bool = True
|
|
# Without a selection the comparison covers both datasets in full, which is
|
|
# rarely the question and never a response a map can draw.
|
|
bbox: VectorSelectionBBox | None = None
|
|
area_id: UUID | None = None
|
|
preview_limit: int = Field(default=2_000, ge=1, le=20_000)
|
|
|
|
|
|
class ChangeDetectionSummary(BaseModel):
|
|
source_dataset_id: UUID
|
|
target_dataset_id: UUID
|
|
source_feature_count: int
|
|
target_feature_count: int
|
|
added_count: int
|
|
removed_count: int
|
|
# A footprint that was redrawn rather than demolished and rebuilt. Without
|
|
# this class it appeared as one removal plus one addition.
|
|
modified_count: int = 0
|
|
unchanged_count: int
|
|
iou_threshold: float
|
|
modified_iou_threshold: float | None = None
|
|
selection_area_id: UUID | None = None
|
|
# Counts describe the whole selection; the GeoJSON is capped so a regional
|
|
# comparison does not return both datasets in one response.
|
|
preview_limit: int | None = None
|
|
preview_truncated: bool = False
|
|
warnings: list[str] = Field(default_factory=list)
|
|
generated_at: datetime
|
|
geojson: dict
|