Android distanceTo()方法返回0.0km。为什么?

Android distanceTo()方法返回0.0km。为什么?,android,map,distance,Android,Map,Distance,我想用distanceTo()方法计算android中两个位置(地理点)之间的距离,但当我运行程序时,该方法返回0.0,程序显示0.0KM。为什么?有什么问题 public class MyLocation extends MapActivity { GeoPoint mylocation; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceS

我想用distanceTo()方法计算android中两个位置(地理点)之间的距离,但当我运行程序时,该方法返回0.0,程序显示0.0KM。为什么?有什么问题

public class MyLocation extends MapActivity {
    GeoPoint mylocation;
    @Override
    public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
          setContentView(R.layout.location);
        text_location.setOnKeyListener(new OnKeyListener(){
  public boolean onKey(View view, int keyCode,KeyEvent event){
      if(keyCode==KeyEvent.KEYCODE_ENTER){
                // The map should shows a location that user writes in edittex.
    Geocoder geo=new Geocoder(getApplicationContext(),Locale.getDefault());
    List<Address> address;
    try {
      address = geo.getFromLocationName(text_location.getText().toString(),3);
      if(address.size()>0){
      searchLocation=new GeoPoint((int)(address.get(0).getLatitude()*1e6),(int)(address.get(0).getLongitude()*1e6));
       float distance=0;
       distance=Distance(searchLocation);
        OverlayItem overlayItem=new OverlayIte(searchLocation,textLocation,"Distance:"+distance+"km");
      itemizedOverlay.addOverlay(overlayItem);                  mapOverlays.add(itemizedOverlay);
                        //
}
} catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
}   
        return true;
   }
   return false;
  }
 });
 }
   private void initMyLocation() {
    final MyLocationOverlay overlay = new MyLocationOverlay(this, map);
    overlay.enableMyLocation();
    overlay.enableCompass(); 
    //
    mylocation=overlay.getMyLocation();
    overlay.runOnFirstFix(new Runnable() {
        public void run() {
            controller.setZoom(13);
            controller.animateTo(overlay.getMyLocation());
        }
    });

}
    private float Distance(GeoPoint searchLoc){
    Location a=new Location("locA");
    Location b=new Location("locB");
    if(mylocation!=null){
        a.setLatitude(mylocation.getLatitudeE6()/1e6);
        a.setLongitude(mylocation.getLongitudeE6()/1e6);
        b.setLatitude(searchLoc.getLatitudeE6()/1e6);
        b.setLongitude(searchLoc.getLongitudeE6()/1e6);
    }
               if(a.getLatitude()!=0)
        Log.i("this", "is not zero");
    else
        Log.i("this", "is zero");

    float distance=a.distanceTo(b);
    return distance;
}   
 }
公共类MyLocation扩展了MapActivity{
地质点定位;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.location);
text_location.setOnKeyListener(新的OnKeyListener(){
公共布尔onKey(视图、int keyCode、KeyEvent事件){
if(keyCode==KeyEvent.keyCode\u输入){
//地图应显示用户在edittex中写入的位置。
Geocoder geo=新的地理编码器(getApplicationContext(),Locale.getDefault());
名单地址;
试一试{
address=geo.getFromLocationName(text\u location.getText().toString(),3);
if(address.size()>0){
searchLocation=新的地理点((int)(address.get(0.getLatitude()*1e6),(int)(address.get(0.getLatitude()*1e6));
浮动距离=0;
距离=距离(搜索位置);
OverlayItem OverlayItem=新的OverlayItem(搜索位置,文本位置,“距离:”+距离+“公里”);
itemizedOverlay.addOverlay(overlayItem);mapOverlays.add(itemizedOverlay);
//
}
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}   
返回true;
}
返回false;
}
});
}
私有void initMyLocation(){
最终MyLocationOverlay覆盖=新MyLocationOverlay(此,地图);
overlay.enableMyLocation();
overlay.enableCompus();
//
mylocation=overlay.getMyLocation();
overlay.runOnFirstFix(新的Runnable(){
公开募捐{
控制器。设置缩放(13);
controller.animateTo(overlay.getMyLocation());
}
});
}
专用浮动距离(地质点搜索位置){
位置a=新位置(“locA”);
位置b=新位置(“locB”);
if(mylocation!=null){
a、 setLatitude(mylocation.getLatitudeE6()/1e6);
a、 设置经度(mylocation.getLongitudeE6()/1e6);
b、 设置纬度(searchLoc.getLatitudeE6()/1e6);
b、 设置经度(searchLoc.getLongitudeE6()/1e6);
}
如果(a.getLatitude()!=0)
Log.i(“这”、“不是零”);
其他的
Log.i(“此”、“为零”);
浮动距离=a.距离到(b);
返回距离;
}   
}
我编辑post并添加初始化myLocation变量的initMyLocation()方法,并为a或b的检查值向Distance()方法添加日志

谢谢。干杯,你能试一下吗

public double distance(float lata, float longa, float latb, float longb) {
    double d2r = Math.PI / 180;
    double dlong = (longa - longb) * d2r;
    double dlat = (lata - latb) * d2r;
    double a = Math.pow(Math.sin(dlat / 2.0), 2) + Math.cos(latb * d2r)
            * Math.cos(lata * d2r) * Math.pow(Math.sin(dlong / 2.0), 2);
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    double d = 6367 * c;
    return d;

}

是否检查了a和b的值?如何初始化
mylocation
?它在哪里声明?您是否检查过地址是否真的有纬度和经度?地理编码器不能保证这一点。我编辑了第一篇文章。请阅读我的第一篇文章,回答你的问题。登录距离方法显示“这是零”。为什么a.getLatitude()是零?MarvinLabs你说没有地理编码器的保证是什么意思?这里没有人回答我的问题?请帮助我:(谢谢,但我想使用distanceTo()方法,我想找到问题所在并解决它?