• Java高德地图两点间距离、地理编码、逆地理编码


    请注意编码方式一定要是UTF-8,否则地理编码返回count为0,并且报错:

    Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.6.0:exec (default-cli) on project education: Command execution failed.

    若遇到这个问题参考:https://www.cnblogs.com/shoose/p/15241828.html

    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLConnection;
    
    
    /**
     * @program: 
     * @description: 高德地图工具类
     * @author: SaffiChan
     * @create: 2021-09-07 14:18
     **/
    public class GaodeUtil {
    
        static String key = ""; //在高德地图控制台我的应用添加应用获取key
    
    
        /**
         * 获取两点间距离,单位米
         *
         * @param startLonLat
         * @param endLonLat
         * @return
         */
        public static Long getDistance(String startLonLat, String endLonLat) {
            //返回起始地startAddr与目的地endAddr之间的距离,单位:米
            Long result = 0L;
            String queryUrl = "http://restapi.amap.com/v3/distance?key=" + key + "&origins=" + startLonLat + "&destination=" + endLonLat;
            String queryResult = getResponse(queryUrl);
            JSONObject jo = JSONObject.parseObject(queryResult);
            JSONArray ja = jo.getJSONArray("results");
            Object obj = JSONObject.parseObject(ja.getString(0)).get("distance");
            if (obj == null) {
                return result;
            }
            result = Long.parseLong(obj.toString());
            return result;
        }
    
        /**
         * 地理编码,根据地址获取经纬度
         *
         * @param address
         * @return
         */
        public static String getLonLat(String address) {
    
            String lonLat = "";
    
            // 高德地图地理编码API
            String queryUrl = String.format("https://restapi.amap.com/v3/geocode/geo?address=" + address + "&output=json&key=" + key);
    
            String queryResult = getResponse(queryUrl);
            JSONObject jo = JSONObject.parseObject(queryResult);
            JSONArray ja = jo.getJSONArray("geocodes");
            Object obj = JSONObject.parseObject(ja.getString(0)).get("location");
            if (obj == null) {
                return lonLat;
            }
            lonLat = obj.toString();
            return lonLat;
    
        }
    
    
        /**
         * 逆地理编码,根据经纬度获取地址
         *
         * @param longitude
         * @param latitude
         * @return
         */
        public static String getAddress(double longitude, double latitude) {
    
            String address = "";
    
            // 高德地图地理编码API
            String queryUrl = String.format("https://restapi.amap.com/v3/geocode/regeo?output=json&key=" + key + "&radius=1000&extensions=base&location=%s,%s", longitude, latitude);
    
            String queryResult = getResponse(queryUrl);
            JSONObject jo = JSONObject.parseObject(queryResult);
            JSONObject ja = jo.getJSONObject("regeocode");
            String obj = ja.getString("formatted_address");
            if (obj == null) {
                return address;
            }
            address = obj;
            return address;
    
        }
    
    
        /**
         * 用JAVA发起http请求,并返回json格式的结果
         * @param serverUrl
         * @return
         */
        private static String getResponse(String serverUrl) {
            //用JAVA发起http请求,并返回json格式的结果
            StringBuffer result = new StringBuffer();
            try {
                URL url = new URL(serverUrl);
                URLConnection conn = url.openConnection();
                BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
    
                String line;
                while ((line = in.readLine()) != null) {
                    result.append(line);
                }
                in.close();
    
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return result.toString();
        }
    
        public static void main(String[] args) {
    
    
            //获取地址1的经纬度
            String lonlat = getLonLat("广东省深圳市龙华区观湖街道澜景路");
            System.out.println(lonlat);
    
            //获取地址2的经纬度
            String lonlat1 = getLonLat("广东省深圳市龙华区观湖街道河南新村");
            System.out.println(lonlat1);
    
            //逆地理编码
            double longitude = Double.valueOf(lonlat.substring(0,lonlat.indexOf(",")));
            double latitude = Double.valueOf(lonlat.substring(lonlat.indexOf(",")+1,lonlat.length()));
    
            String gaodeResult = getAddress(longitude, latitude);
    
            System.out.println(gaodeResult);
    
            //比较两地间距离
            String startLonLat = lonlat;
            String endLonLat = lonlat1;
    
            Long dis = getDistance(startLonLat, endLonLat);
            System.out.println(dis);
    
    
    
        }
    
    
    }
  • 相关阅读:
    Epplus 设置excel 页边距 及多文件合并
    datagridview 纵向 横向 合并单元格
    datagridview 单元格类型转换【备忘】
    C#中另类自定义公式计算 字符串转换为计算公式,并得出计算结果【转载】
    T-sql 根据bak文件恢复新建数据库
    python实现K-means 并进行演示
    PHP底层架构和运行流程
    go语言中的invalid character 'x00' after top-level value
    操作系统中线程的实现模型
    eclipse编译器配置Go开发环境
  • 原文地址:https://www.cnblogs.com/shoose/p/15241868.html
Copyright © 2020-2023  润新知