高德地圖入門(三)——地圖圖層


地圖是由多個圖層組成,每一個圖層會顯示一部分的地理或交通訊息。開發者能夠經過設置 AMap 類,靈活控制圖層的顯示狀態。例如,用戶所看到包括街道、興趣點、學校、公園等內容的地圖展示就是一個圖層。實時路況等的展示也是經過圖層來實現的。java

基本地圖

2D地圖SDK提供兩種地圖類型:MAP_TYPE_NORMAL 和 MAP_TYPE_SATELLITE。android

3D地圖SDK提供三種地圖類型:MAP_TYPE_NORMAL 、 MAP_TYPE_SATELLITE 和 MAP_TYPE_NIGHT。web

  • MAP_TYPE_NORMAL:標準地圖。地圖包含道路、建築,以及重要的天然風光(如河流)等。道路和功能標籤爲可見的。api

  • MAP_TYPE_SATELLITE:衛星地圖。3D地圖道路和功能標籤爲可見的,2D地圖道路和功能標籤不可見。app

  • MAP_TYPE_NIGHT:夜景地圖(僅3D地圖)。道路和功能標籤可見。ide

 

layers_activity.xml代碼以下:this

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <com.amap.api.maps.MapView
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignTop="@id/map"
        android:background="#D000"
        android:minWidth="130dip"
        android:orientation="vertical"
        android:padding="6dp" >
        <Spinner
            android:id="@+id/layers_spinner"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
        <CheckBox
            android:id="@+id/traffic"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/traffic" />
    </LinearLayout>
</RelativeLayout>

   LayersActivity.Activity代碼以下:spa

 /**
 * 基礎地圖——高德地圖中介紹基本圖層的使用
 * @author jiatao
 * @date 2015-4-29
 * @version 1.0
 */
package com.jt1024.mapgd;
import com.amap.api.maps.AMap;
import com.amap.api.maps.MapView;
import com.amap.api.maps.model.MyTrafficStyle;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.Spinner;
public class LayersActivity extends Activity implements OnItemSelectedListener,OnClickListener{
 
 private MapView mapView;
 private AMap aMap;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.layers_activity);
  mapView = (MapView) findViewById(R.id.map);
  mapView.onCreate(savedInstanceState);
  init();
 } 
 
 /**
  * 初始化AMap對象
  */
 private void init(){
  
  if(aMap == null){
   aMap = mapView.getMap();
  }
  
  //是否顯示交通情況的複選框及其監聽器
  CheckBox traffic = (CheckBox) findViewById(R.id.traffic);
  traffic.setOnClickListener(this);
  
  //選擇矢量地圖/衛星地圖/夜景地圖的下拉框及其適配器、監聽器
  Spinner spinner = (Spinner) findViewById(R.id.layers_spinner);
  ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
    this, R.array.layers_array,
    android.R.layout.simple_spinner_item);
  adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  spinner.setAdapter(adapter);
  spinner.setOnItemSelectedListener(this);
  
  /**
   * MyTrafficStyle 在地圖上添加自定義擁堵暢通顏色的實時交通圖層。
   * 默認實時交通的顏色爲暢通(#00a209)、緩慢(#ff7508)、擁堵(#ea0312)、極度擁堵(#92000a)。
   * 目前可根據喜愛自定義其顏色。
   */
  MyTrafficStyle myTrafficStyle = new MyTrafficStyle();
  
  /**
   * public void setSeriousCongestedColor(int seriousCongestedColor)
   * 設置行駛嚴重擁堵路段的標記顏色。
   * 參數:seriousCongestedColor - 顏色值。
   */
  myTrafficStyle.setSeriousCongestedColor(0xff92000a);
  
  /**
   * public void setCongestedColor(int congestedColor)
   * 設置行駛擁堵路段的標記顏色。
   * 參數:congestedColor - 顏色值。
   */
  myTrafficStyle.setCongestedColor(0xffea0312);
  
  /**
   * public void setSlowColor(int slowColor)
   * 設置行駛緩慢路段的標記顏色。
   * 參數:slowColor - 顏色值。
   */
  myTrafficStyle.setSlowColor(0xffff7508);
  
  /**
   * public void setSmoothColor(int smoothColor)
   * 設置行駛暢通路段的標記顏色。
   * 參數:smoothColor - 顏色值。
   */
  myTrafficStyle.setSmoothColor(0xff00a209);
  
  aMap.setMyTrafficStyle(myTrafficStyle);
 }
 
 /**
  * 方法必須重寫
  */
 @Override
 protected void onResume() {
  super.onResume();
  mapView.onResume();
 }
 /**
  * 方法必須重寫
  */
 @Override
 protected void onPause() {
  super.onPause();
  mapView.onPause();
 }
 /**
  * 方法必須重寫
  */
 @Override
 protected void onSaveInstanceState(Bundle outState) {
  super.onSaveInstanceState(outState);
  mapView.onSaveInstanceState(outState);
 }
 /**
  * 方法必須重寫
  */
 @Override
 protected void onDestroy() {
  super.onDestroy();
  mapView.onDestroy();
 }

 /**
  * 對選擇是否顯示交通情況事件的響應
  */
 @Override
 public void onClick(View v) {
  // TODO Auto-generated method stub
  if (v.getId() == R.id.traffic) {
   
   /**
    * public final boolean isTrafficEnabled()
    * 返回當前地圖是否有實時交通數據。
    * 返回:若是返回true 則說明當前地圖有實時交通數據,不然返回false。
    * 
    * public void setTrafficEnabled(boolean enabled)
    * 設置是否顯示交通。默認不顯示。
    * 參數:enabled - true 表示顯示,false 表示不顯示。
    * 拋出:RemoteException
    */   
   aMap.setTrafficEnabled(((CheckBox) v).isChecked());// 顯示實時交通情況
  }
 }

 @Override
 public void onItemSelected(AdapterView<?> parent, View view, int position,
   long id) {
  // TODO Auto-generated method stub
  if (aMap != null) {
   setLayer((String) parent.getItemAtPosition(position));
  }
 }
 
 /**
  * 選擇矢量地圖/衛星地圖/夜景地圖事件的響應
  */
 private void setLayer(String layerName) {
  if (layerName.equals(getString(R.string.normal))) {
   aMap.setMapType(AMap.MAP_TYPE_NORMAL);// 矢量地圖模式
  } else if (layerName.equals(getString(R.string.satellite))) {
   aMap.setMapType(AMap.MAP_TYPE_SATELLITE);// 衛星地圖模式
  } else if (layerName.equals(getString(R.string.night_mode))) {
   aMap.setMapType(AMap.MAP_TYPE_NIGHT);// 夜景地圖模式
  }
 }

 @Override
 public void onNothingSelected(AdapterView<?> parent) {
  // TODO Auto-generated method stub
  
 }
}
相關文章
相關標籤/搜索