高德Web服务Api,逆编码(通过经纬度获取地址)

该代码示例展示了如何在Java中利用高德地图的逆地理编码API,通过经纬度获取结构化地址。程序首先构造API请求URL,然后解析返回的JSON数据,提取地址信息。如果找到匹配的地址,会提供详细的位置描述,包括街道和距离信息。
摘要由CSDN通过智能技术生成

 获取key:获取Key-创建工程-开发指南-Web服务 API|高德地图API (amap.com)

package org.example;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

public class GaoDeTest {
    /**
     * 逆地理编码
     * 通过经纬度获取结构化地址
     */

    public static void main(String[] args) {
        String gaodeResult = GetLocationMsg(114.065240, 25.189741);
        System.out.println("高德地址-------->" + gaodeResult);
    }

    /**
     * <p>
     * Title: GetLocationMsg
     * Description:高德地图API
     * @param longitude
     * @param latitude
     * @return
     */
    public static String GetLocationMsg(double longitude, double latitude) {

        String message = "";

        String address = "";

        // 高德地图逆地理编码API

        String url = String.format(
                "https://restapi.amap.com/v3/geocode/regeo?output=JSON&key=你申请的key&radius=1000&extensions=all&batch=false&roadlevel=0&location=%s,%s",
                longitude, latitude);

        URL myURL = null;

        URLConnection httpsConn = null;

        try {

            myURL = new URL(url);

        } catch (MalformedURLException e) {

            e.printStackTrace();

        }

        try {

            httpsConn = (URLConnection) myURL.openConnection();
            httpsConn.setConnectTimeout(100000);
            if (httpsConn != null) {

                InputStreamReader insr = new InputStreamReader(

                        httpsConn.getInputStream(), "UTF-8");

                BufferedReader br = new BufferedReader(insr);

                String data = null;

                while ((data = br.readLine()) != null) {

                    message = message + data;
                }

                JsonParser jp = new JsonParser();
                //将json字符串转化成json对象
                JsonObject jo = jp.parse(message).getAsJsonObject();

                String status = jo.get("status").getAsString();

                String addressJsonEle = jo.get("regeocode").getAsJsonObject().get("formatted_address").toString();

                if (addressJsonEle.equals("[]")) {
                    address = null;

                } else {


                    if (jo.get("regeocode").getAsJsonObject().get("pois").getAsJsonArray().size() <= 0) {
                        String detail = jo.get("regeocode").getAsJsonObject().get("addressComponent").getAsJsonObject().get("streetNumber").getAsJsonObject().get("street").getAsString() + jo.get("regeocode").getAsJsonObject().get("addressComponent").getAsJsonObject().get("streetNumber").getAsJsonObject().get("number").getAsString();

                        if (status.equals("1") && !addressJsonEle.equals("[]")) {
                            address = addressJsonEle + " " + detail;

                        }

                    } else {
                        String detail = jo.get("regeocode").getAsJsonObject().get("pois").getAsJsonArray().get(0).getAsJsonObject().get("name").getAsString();

                        String detailDistance = jo.get("regeocode").getAsJsonObject().get("pois").getAsJsonArray().get(0).getAsJsonObject().get("distance").getAsString();


                        if (status.equals("1") && !addressJsonEle.equals("[]")) {
                            address = addressJsonEle + " " + detail + " " + detailDistance.substring(0, detailDistance.lastIndexOf(".")) + "米";

                        }
                    }
                }

                insr.close();

            }

        } catch (

                IOException e) {

            e.printStackTrace();

        }

        return address;

    }

}

请查看以下代码示例,这是使用高德地图API获取两个经纬度之间的路线公里数的示例代码: ```java import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public class AmapApiExample { public static void main(String[] args) throws UnsupportedEncodingException { // 高德地图APIWeb服务Key String apiKey = "你的高德地图API Web服务Key"; // 出发点的经纬度 String origin = "116.481028,39.989643"; // 目的地的经纬度 String destination = "116.434446,39.90816"; // 根据高德地图API的规定,将参数进行URL编码 String encodedOrigin = URLEncoder.encode(origin, "UTF-8"); String encodedDestination = URLEncoder.encode(destination, "UTF-8"); // 构造请求URL String url = "https://restapi.amap.com/v3/distance?origins=" + encodedOrigin + "&destination=" + encodedDestination + "&key=" + apiKey; // 发送HTTP请求,获取响应内容 OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder().url(url).build(); Response response = null; try { response = client.newCall(request).execute(); } catch (IOException e) { e.printStackTrace(); } // 解析响应内容,获取路线距离 if (response != null && response.isSuccessful()) { try { String responseString = response.body().string(); JSONObject responseJson = JSON.parseObject(responseString); JSONArray results = responseJson.getJSONArray("results"); if (results != null && !results.isEmpty()) { JSONObject result = results.getJSONObject(0); if (result != null) { int distance = result.getInteger("distance"); System.out.println("路线距离为:" + distance + "米"); } } } catch (IOException e) { e.printStackTrace(); } } } } ``` 请将代码中的`apiKey`替换为你自己申请的高德地图API Web服务Key,`origin`和`destination`替换为你要计算路线的两个经纬度,然后运行程序即可获取路线的公里数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值