什么是地图图层
地图可以包含一个或多个图层,每个图层在每个级别都是由若干个图块组成的,它们覆盖了地图的整个表面。例如您所看到包括街道、兴趣点、学校、公园等内容的地图展现就是一个图层,另外交通流量的展现也是通过图层来实现的。
图层分类
1、底图
基本的地图图层,包括若干个缩放级别,显示基本的地图信息,包括道路、街道、学校、公园等内容。
2、实时交通信息图: MapView.setTraffic(true)
3、卫星图: MapView.setSatellite(true)
卫星地图是卫星拍摄的真实的地理面貌,所以卫星地图可用来检测地面的信息,你可以了解到地理位置,地形等。
布置一个MainActivity来装这些加强篇,即各个图形实现效果;
实现目的:MainActivity用一个ListView,文本方式采用自制的item样式,然后通过intent跳转到LayerDemo这个activity中,这个activity主要还是需要实现KEY的校验、底图的实现,另外增加的是交通图和卫星图,只要通过MapView.xxx调用即可。
实现效果:
当键盘点击1、2、3数字时,分别出现底图、交通图和卫星图。
MainActivity.java
package huaxa.it.map;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends Activity
{
private static String[] objects = new String[]
{ "hello world", "图层", "几何图形元素",
"展示文字", "多条目绘制", "矩形范围内搜索", "圆形区域", "全城搜索", "驾车路线", "步行路线", "公交换乘",
"我的位置" };
private static Class[] clazzs = new Class[]
{ HelloWorld.class,
LayerDemo.class};
private ListView list;
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list = (ListView) findViewById(R.id.list);
adapter = new ArrayAdapter<String>(getApplicationContext(),
R.layout.item, objects);// Context context, int resource, int
// textViewResourceId, List<T> objects)<--objects代表listView
list.setAdapter(adapter);
list.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id)
{
Intent intent = new Intent(getApplicationContext(),
clazzs[position]);
startActivity(intent);
}
});
}
}
LayerDemo.java
package huaxa.it.map;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.map.MKEvent;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapView;
import com.baidu.platform.comapi.basestruct.GeoPoint;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.Toast;
/**
* @项目名: BaiduMap
* @包名: huaxa.it.map
* @类名: LayerDemo
* @创建者: 黄夏莲
* @创建时间: 2016年11月29日 ,上午10:14:15
*
* @描述:地图图层(底图、实时交通、卫星图)
*/
public class LayerDemo extends Activity
{
private BMapManager manager;
private MapController controller;
private MapView mapView;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// KEY的校验
initManager();
setContentView(R.layout.common);
init();
}
private void init()
{
mapView = (MapView) findViewById(R.id.MapView);
controller = mapView.getController();
controller.setZoom(12);// 设置地图的缩放级别。 这个值的取值范围是[3,19]。
mapView.setBuiltInZoomControls(true);// 设置是否启用内置的缩放控件。
// 如果启用,MapView将自动显示这些缩放控件。
}
/**
* 初始化地图引擎
*/
private void initManager()
{
manager = new BMapManager(getApplicationContext());
/**
* public boolean init(String strKey, MKGeneralListener listener) 参数:
* strKey - 申请的授权验证码 listener -
* 注册回调事件,该接口返回网络状态,授权验证等结果,用户需要实现该接口以处理相应事件
*/
// KEY的校验
manager.init(CanstantValue.KEY,null);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
//地图图层(底图、实时交通、卫星图)
switch (keyCode)
{
case KeyEvent.KEYCODE_1:
// 底图
mapView.setSatellite(false);
mapView.setTraffic(false);
break;
case KeyEvent.KEYCODE_2:
// 实时交通
mapView.setTraffic(true);
mapView.setSatellite(false);
break;
case KeyEvent.KEYCODE_3:
// 卫星图
mapView.setSatellite(true);
mapView.setTraffic(false);
break;
default:
break;
}
return super.onKeyDown(keyCode, event);
}
@Override
protected void onResume()
{
// TODO Auto-generated method stub
super.onResume();
mapView.onResume();
}
@Override
protected void onPause()
{
// TODO Auto-generated method stub
super.onPause();
mapView.onPause();
}
@Override
protected void onDestroy()
{
// TODO Auto-generated method stub
super.onDestroy();
mapView.destroy();
}
}
item.xml
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="50dip"
android:textColor="@android:color/black"
android:textSize="20sp"
android:gravity="center_vertical"
/>
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</RelativeLayout>
Manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="huaxa.it.map"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="16" />
<!-- gps -->
<!-- 这个权限用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >
</uses-permission>
<!-- 这个权限用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >
</uses-permission>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >
</uses-permission>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
</uses-permission>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
</uses-permission>
<!-- 用于读取手机当前的状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" >
</uses-permission>
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
</uses-permission>
<!-- 访问网络,网络定位需要上网 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- SD卡读取权限,用户写入离线定位数据 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" >
</uses-permission>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".HelloWorld"
android:label="@string/app_name" >
</activity>
<activity
android:name=".LayerDemo"
android:label="@string/app_name" >
</activity>
</application>
</manifest>
作者:u014299265 发表于2016/11/30 23:21:25 原文链接
阅读:19 评论:0 查看评论