百度地图开发(三)之地图控制 + 定位

转载请注明出处:

前两篇关于百度地图的blog写的是,一些基本图层的展示和覆盖物的添加+地理编码和反地理编码。

接下来,这篇blog主要说一些关于地图控制方面的内容和定位功能。

百度地图提供的关于地图的操作主要有:单击、双击、长按、缩放、旋转、俯视等。

地图控制

我们现在已经知道,想要显示一个地图,只需要在xml文件中添加一个MapView控件即可,,但是想要对其进行一些控制,就需要通过这个控件返回一个BaiduMap对象。

从API中先看一下MapView的方法:

对于MapView这个类,官方解释是一个显示地图的视图,负责从服务器端获取地图数据,并且会捕捉到屏幕触控手势事件。使用这个类必须按照它的生命周期进行操作,从上图可以看到,它包括一些类似于activity生命周期的方法:onResume()、onPause()、onDestory()。所以我们需要在activity的各个生命周期中,把MapView的各个生命周期函数添加进去。

在使用地图控件之前必须调用SDKInitializer.initialize(Context)函数用以提供全局Context信息。

默认情况下,地图显示的时候会带着原生的缩放控件:

。还有比例尺控件:

通过showZoomControls(boolean show)和showScaleControl(boolean show)这两个方法可以设置显示或者不显示两个控件。还可以通过设置setxxxPosition(Point p)方法来设置控件的位置。

mapView.showZoomControls(false);// 不显示默认的缩放控件mapView.showScaleControl(false);// 不显示默认比例尺控件 要想实现地图的一些控制,就需要使用到BaiduMap,这个类是专门用来操作地图控件的。

上面的四个接口就是用来对地图添加相应的事件的。我们主要看一下下面的两个方法,它们都是以动画的方式更新地图状态。不同的是一个可以指定时长,另一个有默认的动画耗时。

参数MapStatusUpdate描述的是地图状态将要发生的变化。也就是说,要想改变地图的某些状态,需要构造出一个MapStatusUpdate对象,然后使用animateMapStatus()方法来更新地图状态。但是并没有在API中找到它的相关的构造方法。但是在com.baidu.mapapi.map包下面找到了对应的"工厂类"。

打开MapStatusUpdateFactory可以看到很多静态的方法:

通过这些静态的方法能够构造出各种类型的MapStatusUpdate对象。

zoomIn()和zoomOut()分别是放大和缩小地图,分别是在当前基础上增加或较少1个级别。zoomTo()可以自己设置某一个缩放级别。百度地图将地图的级别定义为【3~19】。

放大:msu = msuFactory.zoomIn();bdMap.animateMapStatus(msu);缩小:msu = msuFactory.zoomOut();bdMap.animateMapStatus(msu);设置地图中心点:msu = msuFactory.newLatLng(arg0);bdMap.animateMapStatus(msu); 其他的方法就不一一叙述了。 关于地图控制状态的还有两个类:MapStatus和MapStatus.Builder。Builder是MapStatus的一个内部类,用于构造它,我们在API中可以看到MapStatus中是没有构造函数的。

使用这两个类可以对地图进行旋转、俯视、设置中心点、设置缩放级别等操作。通过这些方法构造出MapStatus方法之后,怎么让BaiduMap调用它呢?

查阅BaiduMap的所有方法之后也没有找到参数是MapStatus的方法。那么,猜想可能是通过把MapStatus转换成一个其他的对象,然后在由BaiduMap调用。而BaiduMap只有animateMapStatus()方法来更新地图状态。所以很定是MapStatus—>MapStatusUpdate。在MSU的工厂类中有这样一个方法:newMapStatus(MapStatus mapStatus)。OK,通过这个方法,可以把构造的MapStatus对象转成MapStatusUpdate,然后在通过animateMapStatus()调用就行了。

旋转:mapStatus = new MapStatus.Builder(bdMap.getMapStatus()).rotate(rotateAngle += 30).build();msu = msuFactory.newMapStatus(mapStatus);bdMap.animateMapStatus(msu);俯视(-45°~0):mapStatus = new MapStatus.Builder(bdMap.getMapStatus()).overlook(overlookAngle -= 10).build();msu = msuFactory.newMapStatus(mapStatus);bdMap.animateMapStatus(msu); 这里,lz有一个疑问:MapStaus.Builder中有一个设置地图中心点的方法:

,在MapStatusUpdateFactory中也有一个设置中心点的方法:

。连个都是设置中心点,不知道区别是什么?希望知道的给我留个言,告知一下!!谢谢!~~截屏:

在BaiduMap中有一个截屏的回调接口和一个截图的请求方法:

你挤进地铁时,西藏的山鹰一直盘旋云端,

百度地图开发(三)之地图控制 + 定位

相关文章:

你感兴趣的文章:

标签云: