2011-06-28 64 views
2

我在嘗試計算一個位置和其他位置之間的距離(以獲得最近的位置)時遇到一些問題。 我嘗試通過使用Location.distanceBetween(...)和location.distanceTo(...),這兩種方法正在工作,但他們都給我不同的數據,並沒有任何人看起來是正確的。Android Location.distanceBetween和Location.distanceTo區別

我的數據來自Class ConcessionDistance,它是包含位置數據的HashMap的基本擴展(作爲整數轉換爲字符串)以及其他我們在此不需要的東西。

private ArrayList<ConcessionDistance> getMapsConcessionsDistancesFromPoint(ArrayList<ConcessionDistance> al, Location currentLocation) { 
    Location dest; 
    float distance1,distance2; 
    float[] curDist = new float[1]; 
    double lati,longi; 
    Log.i("DBTableConcessions","getMapsConcessionsDistancesFromPoint: Generation d'une map de donnée de concession"); 
    for(ConcessionDistance curConc : al){ 
     //Distance by method 1 
     dest = new Location(LOCATION_PROVIDER); 
     lati = new Double((new Integer(curConc.get("concession_latitude"))) /1e6); 
     longi = new Double((new Integer(curConc.get("concession_longitude"))) /1e6); 
     dest.setLatitude(lati); 
     dest.setLongitude(longi); 
     distance1 = currentLocation.distanceTo(dest); 
     //Distance by method2 
     Location.distanceBetween(
      currentLocation.getLatitude(), 
      currentLocation.getLongitude(), 
      (double) ((new Integer(curConc.get("concession_latitude"))) /1000000), 
      (double) ((new Integer(curConc.get("concession_longitude"))) /1000000), 
      curDist); 
     distance2 = curDist[0]; 
     Log.i("DBTableConcessions","distance :"+distance1+" ou "+distance2);//+" ,lat :"+lati+" ,long "+longi); //+"curDist{0="+curDist[0]+",1="+curDist[1]+",2="+curDist[2]+"}" 
     //Saving one of the distance 
     curConc.put("distance",String.valueOf(distance1)); 
    } 
    return al; 
} 

有人可以幫助我,找出問題出在哪裏? 我想轉換問題,但我對深的問題,通過提前解決它自己:(

任何幫助將受到歡迎謝謝

編輯:。這是我的logcat的一部分:我發送到模擬器的GPS位置「斯特拉斯堡」的(這些都是從東,法國城市)和工藝距離到所有這些城市:

06-29 06:37:37.215: INFO/DBTableConcessions(809): distance from EVRY :346254.66 ou 373061.38 
06-29 06:37:37.235: INFO/DBTableConcessions(809): distance from HAGUENAU CEDEX :105491.984 ou 0.0 
06-29 06:37:37.235: INFO/DBTableConcessions(809): distance from BESANCON CEDEX :110127.08 ou 134302.03 
06-29 06:37:37.265: INFO/DBTableConcessions(809): distance from BREST CEDEX 9 :852829.1 ou 820181.7 
06-29 06:37:37.295: INFO/DBTableConcessions(809): distance from HOENHEIM :87783.39 ou 0.0 
06-29 06:37:37.326: INFO/DBTableConcessions(809): distance from COLMAR :28067.428 ou 0.0 
06-29 06:37:37.355: INFO/DBTableConcessions(809): distance from BELFORT :40919.13 ou 134302.03 
06-29 06:37:37.446: INFO/DBTableConcessions(809): distance from SARREBOURG :81606.31 ou 0.0 

這些城市之間的實際距離(由谷歌地圖提供) 「斯特拉斯堡」是:
埃夫:520公里(方法一:小姐175公里,方法二:小姐145公里)
阿格諾:30公里(方法一:加70公里,方法二:返回0)
貝桑鬆:250公里(方法一:小姐140公里,方法2 :想念120公里)
佈雷斯特:1070公里(方法一:小姐200公里,方法二:小姐230公里)
奧埃南:5公里(方法一:加80公里,方法二:返回0)
科爾馬:75公里(方法一:錯過50公里,方法2:返回0)
貝爾福:155公里(方法一:小姐110公里,方法2:懷念20公里)
薩伯格:75公里(方法一:錯過5km的方法2:返回0)

因此,我們可以看到,第二個方法返回0當真正的距離低於〜100km,其中方法1我看不到任何邏輯inhere:/

+0

小心分享什麼結果,你期待什麼投入,以及你實際收到什麼結果? – Travis

+1

我編輯了我的第一篇文章,以便添加 –

+0

此外,問題並非來自列表中的初始數據,因爲它們在我的MapView中顯示得很好...... –

回答

1

好吧,所以糾正這個問題是: 首先我需要輸入正確的值在我的lati,longi。這可以通過:

lati = Double.valueOf(curConc.get("concession_latitude"))/1000000; 

這樣,所有的方法給我相同的距離,所以計算方法工作正常。

之後,參數中給出的位置也不正確。 事實上,它們不包含部分數據。所以我知道是這個問題,但我不知道如何解決它。事實上,誰給了我不好的數據線這裏

final LocationManager manag = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
      //Choix du service de localisation en fonction de critères 
      Criteria crit = new Criteria(); 
      crit.setCostAllowed(false); 
      crit.setAccuracy(100); //précis à 1km pret 
      String choix_source = manag.getBestProvider(crit, true); 
      //demander la position courante 
      manag.requestLocationUpdates(choix_source, 10000, 0, new LocationListener(){ //toutes les 10 secondes 
       //Lors de la capture de la position 
       public void onLocationChanged(Location location) { 
       .... 
相關問題