| 
					
				 | 
			
			
				@@ -0,0 +1,45 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import json 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from typing import Any, Union 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import requests 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from core.tools.entities.tool_entities import ToolInvokeMessage 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from core.tools.tool.builtin_tool import BuiltinTool 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+class PoiSearchTool(BuiltinTool): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def _invoke(self, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                user_id: str, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                tool_parameters: dict[str, Any], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ) -> Union[ToolInvokeMessage, list[ToolInvokeMessage]]: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            invoke tools 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        geocoder_base_url = 'http://api.tianditu.gov.cn/geocoder' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        base_url = 'http://api.tianditu.gov.cn/v2/search' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        keyword = tool_parameters.get('keyword', '') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if not keyword: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return self.create_text_message('Invalid parameter keyword') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        baseAddress = tool_parameters.get('baseAddress', '') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if not baseAddress: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return self.create_text_message('Invalid parameter baseAddress') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tk = self.runtime.credentials['tianditu_api_key'] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        base_coords = requests.get(geocoder_base_url + '?ds=' + json.dumps({'keyWord': baseAddress,}, ensure_ascii=False) + '&tk=' + tk).json() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        params = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'keyWord': keyword, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'queryRadius': 5000, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'queryType': 3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'pointLonlat': base_coords['location']['lon'] + ',' + base_coords['location']['lat'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'start': 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'count': 100, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        result = requests.get(base_url + '?postStr=' + json.dumps(params, ensure_ascii=False) + '&type=query&tk=' + tk).json() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return self.create_json_message(result) 
			 |