根據已知經緯度和指定的範圍求出最大及最小的經緯度

  1. public class LatLonUtil { 
  2.      
  3.     private static final double PI = 3.14159265
  4.     private static final double EARTH_RADIUS = 6378137
  5.     private static final double RAD = Math.PI / 180.0
  6.  
  7.     //@see http://snipperize.todayclose.com/snippet/php/SQL-Query-to-Find-All-Retailers-Within-a-Given-Radius-of-a-Latitude-and-Longitude--65095/  
  8.     //The circumference of the earth is 24,901 miles. 
  9.     //24,901/360 = 69.17 miles / degree   
  10.     /** 
  11.      * @param raidus 單位米 
  12.      * return minLat,minLng,maxLat,maxLng 
  13.      */ 
  14.     public static double[] getAround(double lat,double lon,int raidus){ 
  15.          
  16.         Double latitude = lat; 
  17.         Double longitude = lon; 
  18.          
  19.         Double degree = (24901*1609)/360.0
  20.         double raidusMile = raidus; 
  21.          
  22.         Double dpmLat = 1/degree; 
  23.         Double radiusLat = dpmLat*raidusMile; 
  24.         Double minLat = latitude - radiusLat; 
  25.         Double maxLat = latitude + radiusLat; 
  26.          
  27.         Double mpdLng = degree*Math.cos(latitude * (PI/180)); 
  28.         Double dpmLng = 1 / mpdLng; 
  29.         Double radiusLng = dpmLng*raidusMile; 
  30.         Double minLng = longitude - radiusLng; 
  31.         Double maxLng = longitude + radiusLng; 
  32.         //System.out.println("["+minLat+","+minLng+","+maxLat+","+maxLng+"]"); 
  33.         return new double[]{minLat,minLng,maxLat,maxLng}; 
  34.     } 
  35.      
  36.     /** 
  37.      * 根據兩點間經緯度座標(double值),計算兩點間距離,單位爲米 
  38.      * @param lng1 
  39.      * @param lat1 
  40.      * @param lng2 
  41.      * @param lat2 
  42.      * @return 
  43.      */ 
  44.     public static double getDistance(double lng1, double lat1, double lng2, double lat2) 
  45.     { 
  46.        double radLat1 = lat1*RAD; 
  47.        double radLat2 = lat2*RAD; 
  48.        double a = radLat1 - radLat2; 
  49.        double b = (lng1 - lng2)*RAD; 
  50.        double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) + 
  51.         Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2))); 
  52.        s = s * EARTH_RADIUS; 
  53.        s = Math.round(s * 10000) / 10000
  54.        return s; 
  55.     } 
  56.      
  57.     public static void main(String[] args){ 
  58.         Double lat1 = 34.264648
  59.         Double lon1 = 108.952736
  60.          
  61.         int radius = 1000
  62.         //[34.25566276027792,108.94186385411045,34.27363323972208,108.96360814588955] 
  63.         getAround(lat1,lon1,radius); 
  64.          
  65.         //911717.0   34.264648,108.952736,39.904549,116.407288 
  66.         double dis = getDistance(108.952736,34.264648,116.407288,39.904549);  
  67.         System.out.println(dis); 
  68.     } 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章