可视区

可视区域操做

可视区域的位置(CameraPosition)java

移动可视区域android

示例代码api

设置可视区域边界ide

高德地图的 Android SDK 容许您经过修改地图可视区域,改变用户的观看视角。函数

可视区域的位置(CameraPosition)

可视区域的位置由如下属性组成:动画

  • 目的地(target)
  • 缩放级别(zoom)
  • 方向(bearing)
  • 倾斜角度(tilt)

屏幕当前可视区域的位置能够经过 AMap.getCameraPosition() 方法获取。ui

目的地(target)

地图的中心位置。位置使用经度和纬度说明。this

?
1
2
// 获取当前地图中心点的坐标
LatLng mTarget = aMap.getCameraPosition().target;

缩放级别(zoom)

可视区域的缩放级别决定了地图的比例。地图缩放级别为4-20级,缩放级别没必要是一个整数。spa

缩放级别较低时,您能够看到更多地区的地图;缩放级别高时,您能够查看地区更加详细的地图。3d

下面的图像显示出不一样的缩放级别:

高德地图缩放级别 高德地图缩放级别

?
1
2
// 获取当前地图的缩放级别
float  mZoom = aMap.getCameraPosition().zoom;

方向(bearing)

默认状况下,地图的方向为0度,屏幕正上方指向北方。当您逆时针旋转地图时,地图正北方向与屏幕正上方的夹角度数为地图方向,范围是从0度到360度。例如,一个90度的查询结果,在地图上的向上的方向指向正东。

?
1
2
// 获取当前地图的旋转角度
float  mBearing = aMap.getCameraPosition().bearing;

倾斜角度(tilt)

可视区域的位置在地图的中心位置和地球的表面之间的圆弧上,从最低点以度测量(方向直接指向下方的可视区域)。当您改变视角,地图显示的角度来看,远方的建筑变小,附近的建筑则变大,产生立体效果。

地图倾角范围为0-45度。

高德地图倾斜角度

?
1
2
// 获取当前地图的倾斜角度
float  mTilt = aMap.getCameraPosition().tilt;

移动可视区域

高德地图 Android SDK 容许您在屏幕上切换显示的地图区域。这是经过改变可视区域的位置实现的。改变可视区域的位置,须要您明确想要把可视区域移动到哪里。您可以使用 CameraUpdateFactory 建立不一样类型的 CameraUpdate。如下的选项可供使用。

仅更改缩放级别

CameraUpdateFactory.zoomIn() 和 CameraUpdateFactory.zoomOut() 能够改变缩放级别放大或缩小1,同时保持其余相同的属性。

CameraUpdateFactory.zoomTo(float) 改变缩放级别为一个定值,同时保持其余相同的属性。

CameraUpdateFactory.zoomBy(float x) 和 CameraUpdateFactory.zoomBy(float, Point) 经过定值,增长或下降x(若是值为负数)缩放级别。后者根据地图上指定坐标点,放大或缩小地图,为了实现这一点,因此它可能会改变可视区域的中心位置。

这些方法返回一个 CameraUpdate 对象,使用 AMap.moveCamera(CameraUpdate update) 方法更新可视区域显示在地图上。

仅更改视图中心点

有三个简便的方法能够改变位置:

  • CameraUpdateFactory.changeLatLng(LatLng),仅改变可视区域中心点的坐标,其余属性不变。
  • CameraUpdateFactory.newLatLng(LatLng),能够改变可视区域的经纬度,缩放级别默认为固定值4,保留其余属性。
  • CameraUpdateFactory.newLatLngZoom(LatLng, float),能够改变可视区域的经纬度、缩放级别,而且保留其余属性。

返回一个 CameraUpdate 对象,使用 AMap.moveCamera(CameraUpdate update) 方法更新可视区域显示在地图上。

仅更改旋转角度

使用 CameraUpdateFactory.changeBearing(float bearing) 方法能够改变可视区域的方向而且保留其余属性。返回一个 CameraUpdate 对象,使用 AMap.moveCamera(CameraUpdate update) 方法更新可视区域显示在地图上。

仅更改倾斜角度

使用 CameraUpdateFactory.changeTilt(float tilt) 方法能够改变可视区域的倾斜角度而且保留其余属性。返回一个 CameraUpdate 对象,使用 AMap.moveCamera(CameraUpdate update) 方法更新可视区域显示在地图上。

更改可视区域

为了改变可视区域的位置更加灵活,可使用 CameraUpdateFactory.newCameraPosition(CameraPosition) 移动可视区域到指定位置。CameraPosition 能够用如下方法直接获取:使用 new CameraPosition() 或使用 new CameraPosition.Builder()。

返回一个 CameraUpdate 对象,使用 AMap.moveCamera(CameraUpdate update) 方法更新可视区域显示在地图上。

示例代码以下(详细信息,请参考示例工程“Camera 功能”案例 / com.amapv2.apis.basic.CameraActivity.java):

示例代码

详细信息,请参考示例工程“Camera 功能”案例 / com.amapv2.apis.basic.CameraActivity.java 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
public  class  CameraActivity  extends  Activity  implements  OnClickListener,
         CancelableCallback {
 
     /**
      * 根据动画按钮状态,调用函数animateCamera或moveCamera来改变可视区域
      */
     private  void  changeCamera(CameraUpdate update, CancelableCallback callback) {
         boolean  animated = ((CompoundButton) findViewById(R.id.animate))
                 .isChecked();
         if  (animated) {
             aMap.animateCamera(update,  1000 , callback);
         else  {
             aMap.moveCamera(update);
         }
     }
 
     @Override
     public  void  onClick(View v) {
         switch  (v.getId()) {
         /**
          * 点击中止动画按钮响应事件
          */
         case  R.id.stop_animation:
             aMap.stopAnimation();
             break ;
         /**
          * 点击“去中关村”按钮响应事件
          */
         case  R.id.Zhongguancun:
             changeCamera(
                     CameraUpdateFactory.newCameraPosition( new  CameraPosition(
                             Constants.ZHONGGUANCUN,  18 0 30 )),  null );
             break ;
 
         /**
          * 点击“去陆家嘴”按钮响应事件
          */
         case  R.id.Lujiazui:
             changeCamera(
                     CameraUpdateFactory.newCameraPosition( new  CameraPosition(
                             Constants.SHANGHAI,  18 30 0 )),  this );
             break ;
         /**
          * 点击向左移动按钮响应事件,camera将向左边移动
          */
         case  R.id.scroll_left:
             changeCamera(CameraUpdateFactory.scrollBy(-SCROLL_BY_PX,  0 ),  null );
             break ;
         /**
          * 点击向右移动按钮响应事件,camera将向右边移动
          */
         case  R.id.scroll_right:
             changeCamera(CameraUpdateFactory.scrollBy(SCROLL_BY_PX,  0 ),  null );
             break ;
         /**
          * 点击向上移动按钮响应事件,camera将向上边移动
          */
         case  R.id.scroll_up:
             changeCamera(CameraUpdateFactory.scrollBy( 0 , -SCROLL_BY_PX),  null );
             break ;
         /**
          * 点击向下移动按钮响应事件,camera将向下边移动
          */
         case  R.id.scroll_down:
             changeCamera(CameraUpdateFactory.scrollBy( 0 , SCROLL_BY_PX),  null );
             break ;
         /**
          * 点击地图缩小按钮响应事件
          */
         case  R.id.zoom_in:
             changeCamera(CameraUpdateFactory.zoomIn(),  null );
             break ;
         /**
          * 点击地图放大按钮响应事件
          */
         case  R.id.zoom_out:
             changeCamera(CameraUpdateFactory.zoomOut(),  null );
             break ;
         default :
             break ;
         }
     }
 
     @Override
     public  void  onCancel() {
         ToastUtil.show(CameraActivity. this "Animation to 陆家嘴 canceled" );
     }
 
     @Override
     public  void  onFinish() {
         ToastUtil.show(CameraActivity. this "Animation to 陆家嘴 complete" );
     }
}

设置可视区域边界

在最大可能缩放级别下,移动可视区域保证全部兴趣点都是可见的,这种状况下,就须要设置可视区域边界。例如:显示用户当前位置5千米范围内的全部加油站,您想要移动可视区域保证全部的加油站均可以在屏幕上显示。

使用 CameraUpdateFactory.newLatLngBounds(LatLngBounds bounds, int padding) 获取一个 CameraUpdate 对象,改变可视区域(使用 Projection.getVisibleRegion() 方法能够计算屏幕区域 LatLngBounds 的大小)。注意:地图的方向和倾斜角都应该为0度。

重载方法 CameraUpdateFactory.newLatLngBounds(LatLngBounds bounds, int width, int height, int padding) 容许您指定矩形区域的长和宽(像素为单位)。

说明

1.newLatLngBounds(LatLngBounds bounds, int padding) 方法须要在地图初始化完成以后使用。

2.在 onCreate 时设置可视区域边界,须要使用接口 AMap.OnMapLoadedListener。当地图载入成功后回调 onMapLoaded() 方法。

示例代码以下(详细信息,请参考示例工程“Markers 功能”案例 / com.amapv2.apis.overlay.MarkerActivity.java):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public  class  MarkerActivity  extends  FragmentActivity  implements
     OnMapLoadedListener {
 
     /**
      * 监听amap地图加载成功事件回调
      */
     @Override
     public  void  onMapLoaded() {
         // 设置全部maker显示在View中
         LatLngBounds bounds =  new  LatLngBounds.Builder()
                 .include(Constants.XIAN).include(Constants.CHENGDU)
                 .include(marker1).include(marker2).include(marker3)
                 .include(marker4).include(marker5).include(marker6)
                 .include(marker7).include(marker8).include(marker9)
                 .include(marker10).build();
         // 移动地图,全部marker自适应显示。LatLngBounds与地图边缘10像素的填充区域
         aMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds,  10 ));
     }
}
相关文章
相关标签/搜索