我在尝试计算一个位置和其他位置之间的距离时遇到了一些问题(为了获得最接近的位置)。 我尝试使用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公里(方法1:小姐175公里,方法2:小姐145公里)
Haguenau :30km(方法1:加70km,方法2:返回0)
贝桑松:250公里(方法1:小姐140公里,方法2:小姐120公里)
Brest :1070km(方法1:小姐200km,方法2:小姐230km)
Hoenheim :5km(方法1:加80km,方法2:返回0)
Colmar :75km(方法1:小姐50km,方法2:返回0)
贝尔福:155km(方法1:小姐110km,方法2:小姐20km)
Sarrebourg :75km(方法1:错过5km,方法2:返回0)
所以我们可以注意到,当实际距离低于~100km时,第二种方法返回0,而对于method1,我看不到任何逻辑:/
答案 0 :(得分: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) {
....