地图是由多个图层组成,每个图层会显示一部分的地理或交通信息。开发者可以通过设置 AMap 类,灵活控制图层的显示状态。例如,用户所看到包括街道、兴趣点、学校、公园等内容的地图展现就是一个图层。实时路况等的展现也是通过图层来实现的。


基本地图

2D地图SDK提供两种地图类型:MAP_TYPE_NORMAL 和 MAP_TYPE_SATELLITE。

3D地图SDK提供三种地图类型:MAP_TYPE_NORMAL 、 MAP_TYPE_SATELLITE 和 MAP_TYPE_NIGHT。

  • MAP_TYPE_NORMAL:标准地图。地图包含道路、建筑,以及重要的自然风光(如河流)等。道路和功能标签为可见的。
  • MAP_TYPE_SATELLITE:卫星地图。3D地图道路和功能标签为可见的,2D地图道路和功能标签不可见。
  • MAP_TYPE_NIGHT:夜景地图(仅3D地图)。道路和功能标签可见。

 

layers_activity.xml代码如下:

<?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代码如下:

/**
 * 基础地图——高德地图中介绍基本图层的使用
 * @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
  
 }
}
 /**
 * 基础地图——高德地图中介绍基本图层的使用
 * @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
  
 }
}