Java 通过地址获取经纬度 - 高德地图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 通过地址获取经纬度 - 高德地图相关的知识,希望对你有一定的参考价值。

一、添加依赖

 

            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-validator</artifactId>
                <version>6.0</version>
            </dependency>

 

二、请求工具类

 

import com.github.kevinsawicki.http.HttpRequest;

/**
 * 请求工具类
 */
public class RequestUtils {

    private static final String DEFAULT_CHARSET = "utf-8";
    private static final int CONNECT_TIMEOUT_IN_MIS_SECOND = 10000;
    private static final int READ_TIMEOUT_IN_MIS_SECOND = 30000;

    public static RequestResult getJsonText(String url, String charset) {
        if (charset == null) charset = DEFAULT_CHARSET;
        HttpRequest request = HttpRequest.get(url).connectTimeout(CONNECT_TIMEOUT_IN_MIS_SECOND).readTimeout(READ_TIMEOUT_IN_MIS_SECOND);
        String body = request.body(charset);
        int code = request.code();
        request.disconnect();
        return new RequestResult(code, body);
    }

}

 

三、返回接收类

 

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;

/**
 *  高德地图返回工具类
 */
@Getter
@Setter
@AllArgsConstructor
public class RequestResult {

    /** 状态码 */
    private int code;

    /** 返回body */
    private  String body;

}

 

四、高德地图工具类

 

import java.net.URLEncoder;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 获取高德地图经纬度
 *
 * @author lixin.saho
 */
public class MapUtils {
    private static String API = "http://restapi.amap.com/v3/geocode/geo?key=<key>&s=rsv3&address=<address>";

    private static String KEY = "key";

    private static Pattern pattern = Pattern.compile(""location":"(\d+\.\d+),(\d+\.\d+)"");

    static {
        init();
    }

    private static void init() {
//        System.out.println("高德地图工具类初始化");
//        System.out.println("api: {}"+API);
//        System.out.println("key: {}"+KEY);
        API = API.replaceAll("<key>", KEY);
    }

    private static double[] getLatAndLonByAddress(String address) {
        try {
            String requestUrl = API.replaceAll("<address>", URLEncoder.encode(address, "UTF-8"));
            RequestResult requestResult = RequestUtils.getJsonText(requestUrl, null);
            if (200 != requestResult.getCode()) {
                return null;
            }
            requestUrl = requestResult.getBody();
            if (requestUrl != null) {
                Matcher matcher = pattern.matcher(requestUrl);
                if (matcher.find() && matcher.groupCount() == 2) {
                    double[] gps = new double[2];
                    gps[0] = Double.valueOf(matcher.group(1));
                    gps[1] = Double.valueOf(matcher.group(2));
                    return gps;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        double[] aaa = MapUtils.getLatAndLonByAddress("广东省深圳市福田区天安数码城创业科技大厦一期");
        for (double cccc : aaa) {
            System.out.println(cccc);
        }
        System.out.println(MapUtils.getLatAndLonByAddress("广东省深圳市福田区天安数码城创业科技大厦一期"));

    }

 

五、高德地图的秘钥,及高德地图工具类里的key需要自己申请

 

以上是关于Java 通过地址获取经纬度 - 高德地图的主要内容,如果未能解决你的问题,请参考以下文章

Android高德通过经纬度获取地理位置

代码笔记:使用高德地图API创建地图以及获取当前地址经纬度

怎么用程序通过百度地图API批量获取具体地址的经纬度

JS爬取高德地图地址信息(周边设施经纬度)

地域数据标准化

uniapp高德经纬度限制个球?