geocoder_tdt.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import json
  2. import requests
  3. from shapely import geometry, Point
  4. from qwen_agent.config.gis_config import tdt_config
  5. from qwen_agent.tools.gis.turf_util import proj_transform
  6. # http://api.tianditu.gov.cn/geocoder?ds={"keyWord":"北京市延庆区延庆镇莲花池村前街50夕阳红养老院"}&tk=您的密钥
  7. class GeocoderTDT:
  8. def __init__(self, keywords=None):
  9. self.keywords = keywords
  10. self.url = tdt_config.get("geocoder_url")
  11. self.tk = tdt_config.get("tk")
  12. def decoder_address(self, address=None) -> geometry:
  13. print(f"query address: {address}")
  14. if address is None:
  15. address = self.keywords
  16. response = requests.get(self.url, params={
  17. "ds": json.dumps({"keyWord": address}, ensure_ascii=False),
  18. "tk": self.tk,
  19. })
  20. try:
  21. location = response.json().get('location')
  22. lon = location["lon"]
  23. lat = location["lat"]
  24. # 查询出来的是4326坐标系
  25. x, y = proj_transform(lon, lat, 4326, 4490)
  26. return Point(y, x).wkt
  27. except Exception as e:
  28. print(f"地理编码发生错误:{e}")
  29. return None, None
  30. def getsf(str):
  31. if str is None: return 'F'
  32. if 'G' in str or 'S' in str:
  33. return 'S'
  34. else:
  35. return 'F'
  36. def get_way_level(ref):
  37. if str is None:
  38. return None
  39. if 'G' in ref:
  40. return '国道'
  41. elif 'S' in ref:
  42. return '省道'
  43. elif 'X' in ref:
  44. return '县道'
  45. elif 'Y' in ref:
  46. return '乡道'
  47. if __name__ == '__main__':
  48. # print(GeocoderTDT().decoder_address("杭州市滨江区正泰大厦"))
  49. a = 'G20'
  50. print(get_way_level('Y01'))