fix: clarify population evolution semantics
This commit is contained in:
@@ -209,8 +209,8 @@ class VectorFeatureService:
|
||||
intersection_area = func.ST_Area(
|
||||
func.ST_Transform(func.ST_Intersection(VectorFeature.geometry, envelope), 31370)
|
||||
)
|
||||
value_expression = numeric_value * intersection_area / func.nullif(source_area, 0.0)
|
||||
is_estimate = True
|
||||
coverage_ratio = intersection_area / func.nullif(source_area, 0.0)
|
||||
value_expression = numeric_value * coverage_ratio
|
||||
aggregate_value = (
|
||||
db.query(func.coalesce(func.sum(value_expression), 0.0))
|
||||
.filter(*selection_filter)
|
||||
@@ -218,6 +218,16 @@ class VectorFeatureService:
|
||||
.scalar()
|
||||
)
|
||||
metric_value = float(aggregate_value or 0.0)
|
||||
if method == "area_weighted_sum":
|
||||
partial_feature_count = (
|
||||
db.query(func.count(VectorFeature.id))
|
||||
.filter(*selection_filter)
|
||||
.filter(coverage_ratio < 0.999999)
|
||||
.scalar()
|
||||
)
|
||||
is_estimate = bool(partial_feature_count)
|
||||
if not is_estimate and config.get("warning_only_when_estimate", True):
|
||||
warning = None
|
||||
elif method != "feature_count":
|
||||
raise AppError(
|
||||
code="INVALID_SELECTION_AGGREGATION",
|
||||
|
||||
Reference in New Issue
Block a user