2014-10-30 65 views
0

我有一組集合中的對象具有作爲屬性的經度和地位。現在我想要得到所有那些距離一定距離的物體,例如輸入經度和緯度的50英里半徑。我應該使用什麼樣的數據結構和搜索所有這些點的算法。Java - 從位置集合中獲取基於距離的位置

+0

沒有任何gps特定算法,sqrt((x-a)^ 2 +(y-b)^ 2)呢? – 2014-10-30 11:43:53

+0

我使用geodatasource.com(http://www.geodatasource.com/developers/java)中的方法來計算兩個GPS位置之間的距離。我需要一個有效的搜索算法來給我列出我的集合中距離該距離範圍內的點。我也打開了爲我的java對象創建一個新的數據結構。 – 2014-10-30 12:00:50

回答

0

藉助下面的代碼解決了我的問題。

package com.csc.banking.celeriti.cache.srv.utils; 

    public class GeoDistanceCalculator { 


     private static double distance(double lat1, double lon1, double lat2, double lon2, char unit) { 
      double theta = lon1 - lon2; 
      double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta)); 
      dist = Math.acos(dist); 
      dist = rad2deg(dist); 
      dist = dist * 60 * 1.1515; 
      if (unit == 'K') { 
      dist = dist * 1.609344; 
      } else if (unit == 'N') { 
      dist = dist * 0.8684; 
      } 
      return (dist); 
     } 


     public static double distanceKms(double lat1, double lon1, double lat2, double lon2){ 
      return distance(lat1, lon1, lat2, lon2, 'K'); 
     } 

     public static double distanceNauticalMiles(double lat1, double lon1, double lat2, double lon2){ 
      return distance(lat1, lon1, lat2, lon2, 'N'); 
     } 

     public static double distanceMiles(double lat1, double lon1, double lat2, double lon2){ 
      return distance(lat1, lon1, lat2, lon2, 'M'); 
     } 

     private static double deg2rad(double deg) { 
      return (deg * Math.PI/180.0); 
     } 

     private static double rad2deg(double rad) { 
      return (rad * 180/Math.PI); 
     } 

     public static void main(String[] args) { 
      System.out.println(distance(32.9697, -96.80322, 29.46786, -98.53506, 'M') + " Miles\n"); 
      System.out.println(distance(32.9697, -96.80322, 29.46786, -98.53506, 'K') + " Kilometers\n"); 
      System.out.println(distance(32.9697, -96.80322, 29.46786, -98.53506, 'N') + " Nautical Miles\n"); 

      System.out.println(distance(28.6207641, 77.36392920000003, 28.6314512, 77.21666720000007, 'K') + " Connaught Place Delhi to Noida 62\n"); 


     } 

    } 
相關問題