From 9ed0b1847912221197697791d69e01ccae17f5b9 Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期二, 27 八月 2024 17:36:11 +0800
Subject: [PATCH] 1. 新增NO监测因子 2. 新增第三方数据接口数据获取相关模块

---
 src/main/kotlin/com/flightfeather/uav/common/net/AMapService.kt |   94 +++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 90 insertions(+), 4 deletions(-)

diff --git a/src/main/kotlin/com/flightfeather/uav/common/net/AMapService.kt b/src/main/kotlin/com/flightfeather/uav/common/net/AMapService.kt
index f4aa432..615bc8f 100644
--- a/src/main/kotlin/com/flightfeather/uav/common/net/AMapService.kt
+++ b/src/main/kotlin/com/flightfeather/uav/common/net/AMapService.kt
@@ -1,19 +1,105 @@
 package com.flightfeather.uav.common.net
 
+import com.flightfeather.uav.common.exception.BizException
+import com.google.gson.Gson
+import com.google.gson.JsonElement
+import com.google.gson.JsonObject
+import com.google.gson.JsonParser
+import org.apache.http.util.EntityUtils
+import java.net.URLEncoder
+import java.nio.charset.Charset
+
 /**
  * 楂樺痉鍦板浘Web鏈嶅姟API
+ * Date: 2024/07/14
  */
 object AMapService {
 
+    private const val TAG = "AMapService"
+    private const val KEY = "b36a93bac8950d3d7c6c06f21133de51"
+
     private val httpMethod = HttpMethod("restapi.amap.com", 443, true)
-    private val KEY = ""
+
+    data class AMapAddress(
+        val country: String,
+        val province: String,
+        val city: String,
+        val citycode: String,
+        val district: String,
+        val adcode: String,
+        val township: String,
+        val towncode: String,
+        val street: String,
+    )
 
     /**
      * 鍦扮悊閫嗙紪鐮�
+     * @param location 鍧愭爣鐐�
+     * @return 鎵�鍦ㄨ閬�
      */
-    fun reGeo(location:List<Pair<Double, Double>>) {
-        httpMethod.get("v3/geocode/regeo", listOf(
-
+    fun reGeo(location:Pair<Double, Double>):AMapAddress {
+        val res = httpMethod.get("/v3/geocode/regeo", listOf(
+            "key" to KEY,
+            "location" to "${location.first},${location.second}"
         ))
+        val obj = handleRes(res)
+        try {
+            val a = obj["regeocode"].asJsonObject["addressComponent"].asJsonObject
+            return AMapAddress(
+                a["country"].asString,
+                a["province"].asString,
+                "",
+                a["citycode"].asString,
+                a["district"].asString,
+                a["adcode"].asString,
+                a["township"].asString,
+                a["towncode"].asString,
+                a["streetNumber"].asJsonObject["street"].asString,
+            )
+        } catch (e: Exception) {
+            throw BizException("楂樺痉API鍧愭爣杞崲閿欒锛�${e.message}")
+        }
+    }
+
+    /**
+     * 鍧愭爣杞崲
+     * @param locations 鍘熷鍧愭爣
+     * @param coordsys 鍘熷潗鏍囩郴锛屽彲閫夊�硷細gps;mapbar;baidu;autonavi(涓嶈繘琛岃浆鎹�)
+     */
+    fun coordinateConvert(locations: List<Pair<Double, Double>>, coordsys:String="gps"): List<Pair<Double, Double>> {
+        val locationsStr = URLEncoder.encode(locations.joinToString("|") { "${it.first},${it.second}" }, "UTF-8")
+        val res = httpMethod.get("/v3/assistant/coordinate/convert", listOf(
+            "key" to KEY,
+            "locations" to locationsStr,
+            "coordsys" to coordsys
+        ))
+        val obj = handleRes(res)
+        try {
+            return obj["locations"].asString.split(";").map {
+                val l = it.split(",")
+                l[0].toDouble() to l[1].toDouble()
+            }
+        } catch (e: Exception) {
+            throw BizException("楂樺痉API鍧愭爣杞崲閿欒锛�${e.message}")
+        }
+    }
+
+    private fun handleRes(res: HttpMethod.MyResponse):JsonObject {
+        if (res.success) {
+            val str = EntityUtils.toString(res.m.entity)
+            val json = JsonParser.parseString(str)
+            return resCheck(json)
+        } else {
+            throw BizException("楂樺痉API缃戣矾閾炬帴閿欒锛岀姸鎬佺爜锛�${res.m.statusLine.statusCode}")
+        }
+    }
+
+    private fun resCheck(json: JsonElement): JsonObject {
+        if (!json.isJsonObject) throw BizException("楂樺痉API澶辫触锛岃繑鍥炲�间笉鏄竴涓猳bject")
+
+        val jo = json.asJsonObject
+        if (jo["status"].asInt != 1) throw BizException("楂樺痉API澶辫触锛岄敊璇�${jo["info"]}")
+
+        return jo
     }
 }
\ No newline at end of file

--
Gitblit v1.9.3