1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- import json
- from shapely import wkt
- from database import Database
- from typing import Any, List, Dict
- database = Database()
- async def _intersect_query(
- geom: str,
- distance: float,
- sql_template: str,
- srid: int = 4490
- ) -> List[Dict[str, Any]]:
- """
- 通用的空间相交查询函数。
- :param geom: WKT格式的几何对象字符串
- :param distance: 缓冲区距离(米)
- :param sql_template: SQL模板,需包含 {bufWkt} 占位符
- :param srid: 空间参考ID,默认为4490
- :return: 查询结果列表
- """
- geometry = wkt.loads(geom)
- buf = geometry.buffer(distance / 111194)
- bufWkt = buf.wkt
- if not bufWkt.startswith(f'SRID={srid}'):
- bufWkt = f'SRID={srid};' + bufWkt
- sql = sql_template.format(bufWkt=bufWkt)
- # logging.debug(sql)
- dataList = await database.execute_query(sql)
- # logging.debug(dataList)
- return dataList
- async def intersect_kfq(geom: str) -> List[Dict[str, Any]]:
- """
- 查询缓冲区内的开发区信息
- """
- sql_template = (
- "select kfqmc as name, gljgdz as address, zdcy as primaryIndustry, "
- "kfqjb1 as kfqjb, st_asgeojson(shape) as geom "
- "from sde.kfq where st_intersects(shape, '{bufWkt}')"
- )
- return await _intersect_query(geom, distance=5000, sql_template=sql_template)
- async def intersect_gyyd(geom: str) -> List[Dict[str, Any]]:
- """
- 查询缓冲区内的工业用地信息
- """
- sql_template = (
- "select tdqlr as name, tdzl as address, st_asgeojson(shape) as geom "
- "from sde.zjgyydc where st_intersects(shape, '{bufWkt}')"
- )
- return await _intersect_query(geom, distance=1000, sql_template=sql_template)
|