Browse Source

添加poi范围查询

gushoubang 7 months ago
parent
commit
c81471c747

BIN
app/__pycache__/__init__.cpython-310.pyc


BIN
app/__pycache__/routes.cpython-310.pyc


BIN
app/services/__pycache__/__init__.cpython-310.pyc


BIN
app/services/__pycache__/file_service.cpython-310.pyc


+ 31 - 21
app/services/chat_service.py

@@ -89,15 +89,14 @@ def clear_chat_history():
     return chat_history
 
 
-def create_chat(msg,type):
+def create_chat(msg, type):
     # msg = data['msg']
-    
 
     # type = data['type']
     if type == 'selectLand':
-        #同音字替换
+        # 同音字替换
         msg = replace_word(msg, target_word)
-        words_to_replace1 = ["爆破", "爆坡","鲍坡"]
+        words_to_replace1 = ["爆破", "爆坡", "鲍坡"]
         for word in words_to_replace1:
             msg = msg.replace(word, "抱坡")
         print(msg)
@@ -107,7 +106,7 @@ def create_chat(msg,type):
         res = update_chat_history(msg)
         print(res)  # 打印生成的回复
 
-        #未找到相关数据提示
+        # 未找到相关数据提示
         prompt = "根据提供的信息,您的表述不够清晰明确,为更好的达到您的选址需求,请重新描述您的选址条件。"
         addtress = ['抱坡区', '天涯区', '崖州区', '海棠区', '吉阳区']
         land = ['园地', '耕地', '林地', '草地', '湿地', '公共卫生用地', '老年人社会福利用地', '儿童社会福利用地', '残疾人社会福利用地', '其他社会福利用地', '零售商业用地', '批发市场用地', '餐饮用地', '旅馆用地', '公用设施营业网点用地', '娱乐用地', '康体用地', '一类工业用地', '二类工业用地', '广播电视设施用地', '环卫用地', '消防用地', '干渠', '水工设施用地', '其他公用设施用地', '公园绿地', '防护绿地', '广场用地', '军事设施用地', '使领馆用地', '宗教用地', '文物古迹用地', '监教场所用地', '殡葬用地', '其他特殊用地', '河流水面', '湖泊水面', '水库水面', '坑塘水面', '沟渠', '冰川及常年积雪', '渔业基础设施用海', '增养殖用海', '捕捞海域', '工业用海', '盐田用海', '固体矿产用海', '油气用海', '可再生能源用海', '海底电缆管道用海', '港口用海', '农业设施建设用地', '工矿用地', '畜禽养殖设施建设用地', '水产养殖设施建设用地', '城镇住宅用地', '特殊用地', '居住用地', '绿地与开敞空间用地', '水田', '水浇地', '旱地', '果园', '茶园', '橡胶园', '其他园地', '乔木林地', '竹林地', '城镇社区服务设施用地', '农村宅基地', '农村社区服务设施用地', '机关团体用地', '科研用地', '文化用地', '教育用地', '体育用地', '医疗卫生用地', '社会福利用地', '商业用地', '商务金融用地', '二类农村宅基地', '图书与展览用地',
@@ -121,20 +120,19 @@ def create_chat(msg,type):
                 landType = json_res["landType"]
                 poi = json_res["poi"]
                 # if landType != "未找到相关数据" and landType != "" and districtName  != "未找到相关数据"and districtName != "":
-                
 
                 if landType in land and districtName in addtress:
-                    json_res = jsonResToDict(json_res,poi)
+                    json_res = jsonResToDict(json_res, poi)
                     # print(json_res)
                 else:
                     json_res = prompt
-                    json_res = res_error(json_res, "selectLand","error")
+                    json_res = res_error(json_res, "selectLand", "error")
             except:
                 json_res = prompt
-                json_res = res_error(json_res, "selectLand","error")
+                json_res = res_error(json_res, "selectLand", "error")
         else:
             json_res = prompt
-            json_res = res_error(json_res, "selectLand","error")
+            json_res = res_error(json_res, "selectLand", "error")
         return json_res
     elif type == 'answer':
         # json_res = route_query(msg)
@@ -145,7 +143,7 @@ def create_chat(msg,type):
         json_res = res_success(json_res, "answer", "success")
         print(json_res)  # 打印生成的回复
         return json_res
-    
+
 
 # 智能选址
 
@@ -176,19 +174,17 @@ def update_chat_history(user_message):
 # 将大模型解析的结果转换为选址需要的数据格式
 
 
-def jsonResToDict(json_res,poi):
-    #位置点为空,利用行政区划选址
+def jsonResToDict(json_res, poi):
+    # 1.查询选址范围信息
+    # 位置点为空,利用行政区划选址
     if poi == "":
         print("位置点为空,利用行政区划选址")
-    
-
+        ewkt = getAiDistrict(json_res["districtName"])
     # 位置点不为空,利用位置点选址
     else:
+        ewkt = getPoiArea(json_res["poi"],json_res["buffer"])
         print("位置点不为空,利用位置点选址")
-[]
-    # 1.查询选址范围信息
-    districtName = json_res["districtName"]
-    ewkt = getAiDistrict(districtName)
+
     # 2.保存选址范围信息
     geomId = saveGeom(ewkt)
     # 3.获取用地类型信息
@@ -313,6 +309,19 @@ def getAiDistrict(name):
         res = cur.fetchone()
     return res["geom"]
 
+# 获取位置点信息区域
+
+
+def getPoiArea(name, buffer):
+    with conn.cursor(cursor_factory=DictCursor) as cur:
+        sql = "SELECT public.st_asewkt(geom) as geom FROM base.t_fzss_fzxz_ai_district WHERE name = %s"
+        sql="SELECT public.st_asewkt(public.st_buffer(geom::public.geography,%s)) FROM vector.poi WHERE name like '%%s%'"
+        complete_sql = cur.mogrify(sql, (name,buffer,)).decode('utf-8')
+        logger.info(f"Executing SQL: {complete_sql}")
+        cur.execute(sql, (name,buffer,))
+        res = cur.fetchone()
+    return res["geom"]
+
 # 保存选址范围信息
 
 
@@ -372,7 +381,7 @@ def update_chat_history_simple(user_message):
     )
 
     # 获取机器人回复
-    bot_message = res["response"] + "感谢您的提问,四维智能助手将竭诚为您解答。"    
+    bot_message = res["response"] + "感谢您的提问,四维智能助手将竭诚为您解答。"
 
     # 更新聊天历史
     chat_history += "\\n智能助手:" + bot_message
@@ -380,6 +389,7 @@ def update_chat_history_simple(user_message):
     # 返回机器人的回复
     return bot_message
 
+
 def route_query(msg):
     response = query(msg)
     # print(response)
@@ -390,4 +400,4 @@ def route_query(msg):
     #     resObj["type"] = "answer"
     #     return resObj
     # return {"error": "Something went wrong"}, 400
-    return response
+    return response

BIN
app/utils/__pycache__/__init__.cpython-310.pyc


BIN
app/utils/__pycache__/pinyin_utils.cpython-310.pyc