步骤6 显示距离各个标识点的距离信息
现在,当我们点地图上的各个位置点时,会显示出该位置点的简要信息,但我们要设计得更深入点,希望当点这些位置点时,显示出这些点距离用户当前位置点有多远的距离,这样能给用户更直观良好的用户体验。下面我们开始动手进行改造。
首先,打开MallOverlay.java文件,增加如下的方法。该方法的作用是接受GeoPoint类型作为参数并且返回的是Location类型的结果,因为在Android Google Map中,如果要使用distanceTo方法去计算距离,必须使用Location类型的变量。
Location convertedLocation = new Location("");
convertedLocation.setLatitude(gp.getLatitudeE6() / 1e6);
convertedLocation.setLongitude(gp.getLongitudeE6() / 1e6);
return convertedLocation;
}
接下来,我们在onBalloonTop事件中,修改代码如下,计算出用户当前点跟指定其他商店位置的距离。
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的方式显示出来,如下图:
到此,我们完成了一个基于Google Map的简单LBS的位置应用。本文的代码可以在如下地址下载:
http://mobiletuts.s3.amazonaws.com/Android-SDK_Mall-Locations/2/MallFinderP2.zip
小结
在本系列的两篇教程中,我们学习了如何使用Google Map API的一些基本用法,包括如何注册使用Google Map API KEY,如何使用MapView控件,以及如何充分利用第三方的地理信息位置标识库,显示需要显示的地理位置信息。读者可以在本教程的基础上进行适当的扩展,以编写优秀的LBS手机应用。