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