技术开发 频道

使用Android Google Map开发LBS应用

  步骤6 显示距离各个标识点的距离信息

  现在,当我们点地图上的各个位置点时,会显示出该位置点的简要信息,但我们要设计得更深入点,希望当点这些位置点时,显示出这些点距离用户当前位置点有多远的距离,这样能给用户更直观良好的用户体验。下面我们开始动手进行改造。

  首先,打开MallOverlay.java文件,增加如下的方法。该方法的作用是接受GeoPoint类型作为参数并且返回的是Location类型的结果,因为在Android Google Map中,如果要使用distanceTo方法去计算距离,必须使用Location类型的变量。

public Location convertGpToLoc(GeoPoint gp){
    Location convertedLocation
= new Location("");
    convertedLocation.setLatitude(gp.getLatitudeE6()
/ 1e6);
    convertedLocation.setLongitude(gp.getLongitudeE6()
/ 1e6);
    return convertedLocation;
}

  接下来,我们在onBalloonTop事件中,修改代码如下,计算出用户当前点跟指定其他商店位置的距离。

protected boolean onBalloonTap(int index, OverlayItem item) {
    
String tmp = malls.get(index).getTitle();
    GeoPoint mallPoint
= malls.get(index).getPoint();
    Location tmpLoc
= convertGpToLoc(mallPoint);
    
double distance = ((currentLocation).distanceTo(tmpLoc))*(0.000621371192);
    DecimalFormat df
= new DecimalFormat("#.##");
    tmp
= tmp + " is " + String.valueOf(df.format(distance)) + " miles away.";
    Toast.makeText(mContext,tmp,Toast.LENGTH_LONG).show();
    return
true;
}

  上面的代码中,通过tmp变量获得了某个商店的名称,然后mallPoint是获得这个商店所在位置的GeoPoint是多少,然后通过convertGpToLoc方法转为Location对象的实例。然后调用distanceTo方法计算当前位置跟商店所在位置的距离,最后通过Toast的方式显示出来,如下图:

步骤6 显示距离各个标识点的距离信息

  到此,我们完成了一个基于Google Map的简单LBS的位置应用。本文的代码可以在如下地址下载:

  http://mobiletuts.s3.amazonaws.com/Android-SDK_Mall-Locations/2/MallFinderP2.zip

  小结

  在本系列的两篇教程中,我们学习了如何使用Google Map API的一些基本用法,包括如何注册使用Google Map API KEY,如何使用MapView控件,以及如何充分利用第三方的地理信息位置标识库,显示需要显示的地理位置信息。读者可以在本教程的基础上进行适当的扩展,以编写优秀的LBS手机应用。

0
相关文章