可視區

可視區域操做

可視區域的位置(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 ));
     }
}
相關文章
相關標籤/搜索