fix: query persisted work area geometry
GeoIntel CI / docs-smoke (push) Canceled after 0s
GeoIntel CI / contract-smoke (push) Canceled after 0s

This commit is contained in:
Codex
2026-07-14 19:38:41 +02:00
parent a879c74b12
commit 616424e2a2
9 changed files with 179 additions and 46 deletions
+25 -12
View File
@@ -237,19 +237,32 @@ def select_vector_features(
raise HTTPException(status_code=404, detail="Dataset not found")
if dataset.dataset_type not in {"vector", "geojson"}:
raise AppError(code="DATASET_NOT_VECTOR", message="Area selection requires a vector dataset", status_code=400)
result = VectorFeatureService.select_features_by_bbox(
db,
dataset_id=dataset_id,
bbox=payload.bbox.model_dump(),
limit=payload.limit,
)
if isinstance(dataset.source_metadata, dict) and dataset.source_metadata.get("selection_aggregation"):
result["summary"] = VectorFeatureService.summarize_features_by_bbox(
db,
dataset=dataset,
bbox=payload.bbox.model_dump(),
total_feature_count=result.get("total_feature_count"),
selection_area = None
if payload.area_id is not None:
selection_area = db.get(Area, payload.area_id)
if selection_area is None or selection_area.project_id != project_id:
raise AppError(code="AREA_NOT_FOUND", message="Area not found", status_code=404)
selection_kwargs = {
"dataset_id": dataset_id,
"bbox": payload.bbox.model_dump(),
"limit": payload.limit,
}
if selection_area is not None:
selection_kwargs.update(
selection_geometry=selection_area.geometry,
selection_area_id=selection_area.id,
)
result = VectorFeatureService.select_features_by_bbox(db, **selection_kwargs)
if isinstance(dataset.source_metadata, dict) and dataset.source_metadata.get("selection_aggregation"):
summary_kwargs = {
"dataset": dataset,
"bbox": payload.bbox.model_dump(),
"total_feature_count": result.get("total_feature_count"),
}
if selection_area is not None:
summary_kwargs["selection_geometry"] = selection_area.geometry
result["summary"] = VectorFeatureService.summarize_features_by_bbox(db, **summary_kwargs)
return envelope(VectorSelectionResponse(**result).model_dump(exclude_none=True))