地图是由多个图层组成,每个图层会显示一部分的地理或交通信息。开发者可以通过设置 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
}
}