feat(workbench): add runtime GIS and sample integrations
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
"""Generate one reproducible Fengxian water-quality monitoring-point dataset."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import json
|
||||
from pathlib import Path
|
||||
import sys
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
sys.path.insert(0, str(ROOT))
|
||||
|
||||
from app.native.wndb.core.connection import project_connection
|
||||
from app.services.sensor_placement import optimize_sensor_placement_by_sensitivity
|
||||
|
||||
|
||||
def find_existing_run(
|
||||
project: str,
|
||||
*,
|
||||
sensor_count: int,
|
||||
min_diameter: int,
|
||||
) -> dict[str, object] | None:
|
||||
with project_connection(project) as conn:
|
||||
return conn.execute(
|
||||
"""
|
||||
SELECT run.run_id::text AS run_id, run.name, run.created_at,
|
||||
result.payload
|
||||
FROM analysis.runs AS run
|
||||
JOIN LATERAL (
|
||||
SELECT stored.payload
|
||||
FROM analysis.results AS stored
|
||||
WHERE stored.run_id = run.run_id
|
||||
AND stored.result_type = 'sensor_placement'
|
||||
ORDER BY stored.created_at DESC, stored.result_id DESC
|
||||
LIMIT 1
|
||||
) AS result ON true
|
||||
WHERE run.run_type = 'sensor_placement'
|
||||
AND run.status = 'completed'
|
||||
AND result.payload->>'sensor_type' = 'water_quality'
|
||||
AND result.payload->>'method' = 'sensitivity'
|
||||
AND (result.payload->>'sensor_number')::integer = %s
|
||||
AND (result.payload->>'minimum_diameter')::integer = %s
|
||||
ORDER BY run.created_at DESC, run.run_id DESC
|
||||
LIMIT 1
|
||||
""",
|
||||
(sensor_count, min_diameter),
|
||||
).fetchone()
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument("--project", default="tjwater_v2")
|
||||
parser.add_argument("--sensor-count", type=int, default=50)
|
||||
parser.add_argument("--min-diameter", type=int, default=100)
|
||||
parser.add_argument("--run-name", default="奉贤水质监测点灵敏度分析(50点)")
|
||||
parser.add_argument("--created-by", default="tjwater")
|
||||
parser.add_argument("--force", action="store_true")
|
||||
args = parser.parse_args()
|
||||
|
||||
existing = find_existing_run(
|
||||
args.project,
|
||||
sensor_count=args.sensor_count,
|
||||
min_diameter=args.min_diameter,
|
||||
)
|
||||
if existing is not None and not args.force:
|
||||
print(json.dumps(dict(existing), ensure_ascii=False, default=str, indent=2))
|
||||
return
|
||||
|
||||
created = optimize_sensor_placement_by_sensitivity(
|
||||
project_code=args.project,
|
||||
run_name=args.run_name,
|
||||
sensor_count=args.sensor_count,
|
||||
min_diameter=args.min_diameter,
|
||||
created_by=args.created_by,
|
||||
sensor_type="water_quality",
|
||||
)
|
||||
print(json.dumps(created, ensure_ascii=False, default=str, indent=2))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user