【问题标题】:Android Location.distanceBetween and Location.distanceTo differenceAndroid Location.distanceBetween 和 Location.distanceTo 的区别
【发布时间】:2011-06-28 16:44:25
【问题描述】:

我在尝试计算一个位置与其他位置列表之间的距离时遇到了一些问题(以便获得最近的位置)。 我尝试使用 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

这些城市和“斯特拉斯堡”之间的实际距离(由谷歌地图给出)是:
Evry:520km(方法1:错过175公里,方法2:错过145km)
Haguenau:30km(方法1:增加70km,方法2:返回0)
贝桑松:250km(方法1:错过140km,方法2:错过120km)
布雷斯特:1070km(方法1:错过200km,方法2:错过230km)
霍恩海姆:5km(方法1:增加80km,方法2:返回0)
Colmar:75km(方法1:错过50km,方法2:返回0)
Belfort:155km(方法1:错过110km,方法2:错过20km)
萨尔堡:75km(方法1:错过5km,方法2:返回0)

所以我们可以注意到,当实际距离低于~100km 时,第二种方法返回 0,而对于方法 1,我在这里看不到任何逻辑:/

【问题讨论】:

  • 愿意分享您对哪些输入的期望结果,以及您实际收到的结果?
  • 我已经编辑了我的第一篇文章以添加它
  • 此外,问题不在于我列表中的初始数据,因为它们很好地显示在我的 MapView...

标签: java android geolocation


【解决方案1】:

好的,所以这个问题的更正是: 首先,我需要在我的纬度、经度中输入正确的值。这可以通过以下方式完成:

 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) {
                ....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 2013-04-12
    • 1970-01-01
    • 2011-09-25
    • 2014-09-25
    • 2012-02-25
    • 2020-04-10
    相关资源
    最近更新 更多