• 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需要自己申请

  • 相关阅读:
    基于STM32F103C8T6的超声波测距示例
    ST-LINK 到 SWD接线图
    MDK破解版下载
    CompletableFuture Quasar 等并发编程
    c++中参数传递和函数返回简析
    c++中冒号(:)和双冒号(::)的用法
    c++中,size_typt, size_t, ptrdiff_t 简介
    c++中,保证头文件只被编译一次,避免多重包含的方法
    时间序列分析之一次指数平滑法
    Openv2.1基本数据类型
  • 原文地址:https://www.cnblogs.com/shaolixin/p/10203246.html
Copyright © 2020-2023  润新知