rainfall_util.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from fastapi import APIRouter, Request, Depends, Query, HTTPException, status
  4. from common.security import valid_access_token
  5. from fastapi.responses import JSONResponse
  6. from sqlalchemy.orm import Session
  7. from sqlalchemy import and_, or_,text
  8. from sqlalchemy.sql import func
  9. from sqlalchemy.future import select
  10. from common.auth_user import *
  11. from pydantic import BaseModel
  12. from database import get_db
  13. from typing import List
  14. from models import *
  15. from utils import *
  16. from utils.ry_system_util import *
  17. from utils.video_util import *
  18. from collections import defaultdict
  19. import traceback
  20. from concurrent.futures import ThreadPoolExecutor, as_completed
  21. from jobs.rainfall_conditions_job import get_stcd_data
  22. from multiprocessing import Pool, cpu_count
  23. import json
  24. import time
  25. import math
  26. def get_real_code(db,longitude,latitude):
  27. sql = text("""
  28. SELECT area_name, `code`, longitude, latitude, distance FROM (
  29. SELECT
  30. area_name,
  31. `code`,
  32. longitude,
  33. latitude,
  34. ST_Distance_Sphere(
  35. ST_GeomFromText(CONCAT('POINT(', longitude, ' ', latitude, ')')),
  36. ST_GeomFromText(:point)
  37. ) AS distance
  38. FROM govdata_real_time_address
  39. WHERE longitude IS NOT NULL AND latitude IS NOT NULL
  40. ORDER BY distance ASC
  41. LIMIT 1
  42. ) T
  43. """).bindparams(point=f"POINT({longitude} {latitude})")
  44. # 执行查询
  45. result = db.execute(sql).fetchone()
  46. # 处理结果
  47. if result:
  48. return dict(result)['code']
  49. else:
  50. return None
  51. def get_rainfall(
  52. code: str,num:int,
  53. db: Session = Depends(get_db)
  54. ):
  55. value=0
  56. rainfulldata = get_stcd_data(code,num+1)
  57. for i in rainfulldata:
  58. value += i['F3070220000034_000018005']
  59. return value