地圖是由多個圖層組成,每一個圖層會顯示一部分的地理或交通訊息。開發者能夠經過設置 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 } }