百度地图Android Sdk的Api里面,没有现成的直接获取两个坐标点之间距离的方法,但是,在jsapi里面,有直接计算距离的方法。
所以,根据上面的方法,我们把计算距离的方法用java语言实现如下:
获取了Location实例,就可以从中获取关心的地理信息了:
getSpeed():获取速度信息,单位米/秒
getTime():获取时间信息,返回从到现在的毫秒数。
以上,只能获取一次地理位置信息,如何动态实时地获取地理位置信息呢?
该方法有多重重载形式,这里只简单试用下这种重载形式,参数说明:
provider:指定获取地理位置的方式;
minTime:指定监听位置变化的时间间隔,单位毫秒;
minDistance:指定监听位置变化的最小距离间隔,单位米;
listener:指定监听器,设置不同事件的回调处理。
每隔5秒监测下位置的变化情况,一旦距离变化超过1米,就会回调onLocationChanged()方法,并将新的Location实例作为参数传入该方法。
以上,就是简单的获取地理位置的方法,帮助文档中关于LocationManager还有其他一些可能也会用到的方法,如临近警告,测距等,在用到的时候可以再查阅。
2.百度地图控制器的简单使用,设置地图的旋转,缩放,及视角变化:
跟2.x版本不同,之前在控制器中直接就可以调用各个方法进行旋转、缩放等操作,新版的控制器类名为BaiduMap,这里要用到的是它的animateMapStatus()方法:
所有要执行的旋转、缩放等动作没有直接对应的方法,而是把这些地图状态变化的动作封装到MapStatusUpdate对象中,然后传递给BaiduMap的animateMapStatus()以动画的方式执行动作。
所以,这里的关键是获取MapStatusUpdate对象,封装要执行的动作。
但是,查看帮助文档中,MapStatusUpdate类没有任何实际的帮助信息……
有这么几个字段,用于存放地图状态信息,注意文档中说明zoom的取值范围为3-20,overlook的取值是-45-0。但是没有对应的设置方法,所以猜测应该在其内部类Builder中存在相关设置方法
构造方法,第二个带参的构造应该会比较有用,要进行地图状态变化,肯定要有一个参照,是在当前状态基础之上进行旋转缩放等。
build()方法返回一个MapStatus对象,如同之前常用到的android中的Builder内部类一样,在进行完一连串的设置之后,最后调用该方法得到一个需要的MapStatus对象。
rotate()方法,设置逆时针旋转角度
target()方法,设置地图中心店
targetScreen()方法设置地图中心点在屏幕的坐标
zoom()方法,设置地图的缩放级别。
下面根据这几个类,试着进行地图的旋转、缩放、设置中心点及视角变化:
修改布局文件,在MapView下方添加几个控件,用于控制地图缩放:
修改布局文件,添加一个旋转按钮: