• 根据经纬度和半径计算经纬度范围


    根据经纬度和半径计算经纬度范围 (转)

    一共有两个方法:

    第一个是 根据提供的经度和纬度、以及半径,取得此半径内的最大最小经纬度

    第二个就是根据提供的两个经纬度计算距离

    public class LatLonUtil {   
           
        private static final double PI = 3.14159265;   
        private static final double EARTH_RADIUS = 6378137;   
        private static final double RAD = Math.PI / 180.0;   
      
        //@see http://snipperize.todayclose.com/snippet/php/SQL-Query-to-Find-All-Retailers-Within-a-Given-Radius-of-a-Latitude-and-Longitude--65095/    
        //The circumference of the earth is 24,901 miles.   
        //24,901/360 = 69.17 miles / degree     
        /**  
         * @param raidus 单位米  
         * return minLat,minLng,maxLat,maxLng  
         */  
        public static double[] getAround(double lat,double lon,int raidus){   
               
            Double latitude = lat;   
            Double longitude = lon;   
               
            Double degree = (24901*1609)/360.0;   
            double raidusMile = raidus;   
               
            Double dpmLat = 1/degree;   
            Double radiusLat = dpmLat*raidusMile;   
            Double minLat = latitude - radiusLat;   
            Double maxLat = latitude + radiusLat;   
               
            Double mpdLng = degree*Math.cos(latitude * (PI/180));   
            Double dpmLng = 1 / mpdLng;   
            Double radiusLng = dpmLng*raidusMile;   
            Double minLng = longitude - radiusLng;   
            Double maxLng = longitude + radiusLng;   
            //System.out.println("["+minLat+","+minLng+","+maxLat+","+maxLng+"]");   
            return new double[]{minLat,minLng,maxLat,maxLng};   
        }   
           
        /**  
         * 根据两点间经纬度坐标(double值),计算两点间距离,单位为米  
         * @param lng1  
         * @param lat1  
         * @param lng2  
         * @param lat2  
         * @return  
         */  
        public static double getDistance(double lng1, double lat1, double lng2, double lat2)   
       {   
          double radLat1 = lat1*RAD;   
           double radLat2 = lat2*RAD;   
           double a = radLat1 - radLat2;   
           double b = (lng1 - lng2)*RAD;   
           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;   
           s = Math.round(s * 10000) / 10000;   
           return s;   
        }   
           
        public static void main(String[] args){   
            Double lat1 = 34.264648;   
            Double lon1 = 108.952736;   
               
           int radius = 1000;   
            //[34.25566276027792,108.94186385411045,34.27363323972208,108.96360814588955]   
            getAround(lat1,lon1,radius);   
               
            //911717.0   34.264648,108.952736,39.904549,116.407288   
            double dis = getDistance(108.952736,34.264648,116.407288,39.904549);    
            System.out.println(dis);   
        }   
    }  

    原文地址:http://314858770.iteye.com/blog/939834

  • 相关阅读:
    多线程---同步函数的锁是this(转载)
    函数
    流程控制
    基本语句和运算
    基本数据库类型
    迷宫问题
    Dungeon Master(逃脱大师)-BFS
    HTML元素常用属性整理
    Java_hutool 发起请求
    jQuery Autocomplete
  • 原文地址:https://www.cnblogs.com/weiying/p/weiying_20140522.html
Copyright © 2020-2023  润新知