美文网首页Java
地址转换为经纬度,经纬度距离计算

地址转换为经纬度,经纬度距离计算

作者: 一觉睡到丶小时候 | 来源:发表于2019-11-25 15:06 被阅读0次

    根据已知地址,将地址经纬度计算出来,不多说直接上代码

    import org.apache.commons.lang.StringUtils;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.URL;
    import java.net.URLEncoder;
    import java.util.HashMap;
    import java.util.Map;
    
    public class LatitudeUtils {
    
        public static final String KEY_1 = "7d9fbeb43e975cd1e9477a7e5d5e192a";
    
        /**
         * 返回输入地址的经纬度坐标
         * key lng(经度),lat(纬度)
         */
        public static Map<String,String> getGeocoderLatitude(String address){
            BufferedReader in = null;
            try {
                //将地址转换成utf-8的16进制
                address = URLEncoder.encode(address, "UTF-8");
                URL tirc = new URL("http://api.map.baidu.com/geocoder?address="
                                   + address +"&output=json&key="+ KEY_1);
    
                in = new BufferedReader(new InputStreamReader(tirc.openStream(),"UTF-8"));
                String res;
                StringBuilder sb = new StringBuilder("");
                while((res = in.readLine())!=null){
                    sb.append(res.trim());
                }
                String str = sb.toString();
                Map<String,String> map = null;
                if(StringUtils.isNotEmpty(str)){
                    int lngStart = str.indexOf("lng\":");
                    int lngEnd = str.indexOf(",\"lat");
                    int latEnd = str.indexOf("},\"precise");
                    if(lngStart > 0 && lngEnd > 0 && latEnd > 0){
                        String lng = str.substring(lngStart+5, lngEnd);
                        String lat = str.substring(lngEnd+7, latEnd);
                        map = new HashMap<String,String>();
                        map.put("lng", lng);
                        map.put("lat", lat);
                        return map;
                    }
                }
            }catch (Exception e) {
                e.printStackTrace();
            }finally{
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return null;
        }
    }
    
    
    public static void main(String args[]){
            try {
                Map<String, String> json = LatitudeUtils.getGeocoderLatitude("北京市百子湾路29号");
                System.out.println("lng : " + json.get("lng"));
                System.out.println("lat : " + json.get("lat"));
            }catch (Exception e ){
                e.printStackTrace();
            }
        }
    

    根据经纬度计算两点之间的距离

    /**
         * 依据经纬度计算两点之间的距离 GetDistance:(). <br/>
         *
         * @param lat1 1点的纬度
         * @param lng1 1点的经度
         * @param lat2 2点的纬度
         * @param lng2 2点的经度
         * @return 距离 单位 米
         * @since JDK 1.6
         */
        private static double getDistance(double lat1, double lng1, double lat2, double lng2) {
            double radLat1 = getRadian(lat1);
            double radLat2 = getRadian(lat2);
            double a = radLat1 - radLat2;// 两点纬度差
            double b = getRadian(lng1) - getRadian(lng2);// 两点的经度差
            double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1)
                    * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
            s = s * EARTH_RADIUS;
            return s ;
        }
    
        /**
         * 角度弧度计算公式 rad:(). <br/>
         * <p>
         * 360度=2π π=Math.PI
         * <p>
         * x度 = x*π/360 弧度
         *
         * @param degree
         * @return
         * @since JDK 1.6
         */
        private static double getRadian(double degree) {
            return degree * Math.PI / 180.0;
        }
    

    相关文章

      网友评论

        本文标题:地址转换为经纬度,经纬度距离计算

        本文链接:https://www.haomeiwen.com/subject/ovfjwctx.html