Riku
2025-10-15 53857f42f777e2b9753b8f00cce1a60ce3dcb8fd
src/main/kotlin/com/flightfeather/uav/common/net/AMapService.kt
@@ -1,13 +1,11 @@
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
@@ -29,7 +27,9 @@
        val adcode: String,
        val township: String,
        val towncode: String,
        val street: String,
        val address: String,
        val streetNumber: String,
        val roadinter: String,
    )
    data class AMapDirection(
@@ -86,17 +86,21 @@
     * @return 所在街道
     */
    fun reGeo(location:Pair<Double, Double>):AMapAddress {
        val res = httpMethod.get("/v3/geocode/regeo", listOf(
        val res = httpMethod.get(
            "/v3/geocode/regeo", listOf(
            "key" to KEY,
            "location" to "${location.first},${location.second}",
            "extensions" to "all"
        ))
            )
        )
        val obj = handleRes(res)
        try {
            val regeocode = obj["regeocode"].asJsonObject
            val a = regeocode["addressComponent"].asJsonObject
            val streetNumber = a["streetNumber"].asJsonObject
            val roads = regeocode["roads"].asJsonArray
            val roadinters = regeocode["roadinters"].asJsonArray
            val roadinter = if (roadinters.size() > 0) roadinters.get(0).asJsonObject else null
            return AMapAddress(
                a["country"].asString,
                a["province"].asString,
@@ -106,7 +110,11 @@
                a["adcode"].asString,
                a["township"].asString,
                a["towncode"].asString,
                a["streetNumber"].asJsonObject["street"].asString,
                regeocode["formatted_address"].asString,
                streetNumber["street"].asString + streetNumber["number"].asString
                        + streetNumber["direction"].asString + streetNumber["distance"].asDouble.toInt() + "米",
                if(roadinter == null) "" else roadinter.get("first_name")?.asString +"和" + roadinter.get("second_name")?.asString + "交叉口"
                        + roadinter.get("direction")?.asString + roadinter.get("distance")?.asDouble?.toInt() + "米",
            )
        } catch (e: Exception) {
            throw BizException("高德API坐标转换错误,${e.message}", e.cause)
@@ -120,11 +128,13 @@
     */
    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(
        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 {