百度地图之三百度地图多个覆盖物的描述

 
(根据老罗视频整理)
如何在地图上标注多个建筑物
当某个类型的覆盖物,包含多个类型相同、显示方式相同、处理方式相同的项时可以使用ItemizedOverlay类进行处理。
ItemizedOverlay类,是一个抽象类,是Overlay的一个子类,包含了一个OverlayItem列表。从南到北的处理item,用于绘制、创建平移边界、为每一个点绘制标记点,和维护一个焦点选中的item,同时也负责把一个屏幕点击匹配到item上去,分发焦点改变事件给备选的监听器。
          draw(...):在每一个item上绘制一个标记点。
         getCenter():默认情况下,返回第一个item的坐标点
         getLatSpanE6()
         getLonSpanE6()
         onTap(GeoPoint p,MapView mapView):点击某个建筑物时的点击事件
         size():OverlayItem数量。

实战项案例:在地图上标注多个建筑物

 
import java.util.ArrayList; 

import java.util.List; 

  

import com.android.android_baidu_muloverlayitem.R; 

import com.baidu.mapapi.BMapManager; 

import com.baidu.mapapi.GeoPoint; 

import com.baidu.mapapi.ItemizedOverlay; 

import com.baidu.mapapi.MKGeneralListener; 

import com.baidu.mapapi.MapActivity; 

import com.baidu.mapapi.MapController; 

import com.baidu.mapapi.MapView; 

import com.baidu.mapapi.OverlayItem; 

  

import android.graphics.drawable.Drawable; 

import android.os.Bundle; 

import android.widget.Toast; 

  

public class MainActivity extends MapActivity { 

  

//添加百度地图的相关控件 

private MapView mapView; 

//加载地图的引擎 

private BMapManager bMapManager; 

//百度地图的key 

private String KeyString = "8C426377B3526B6BF3672C9BA3BB544D1E8289CD"; 

//在百度地图上添加一些控件,比如是放大或者缩小的控件 

private MapController mapController; 

  

@Override

public void onCreate(Bundle savedInstanceState) { 

super.onCreate(savedInstanceState); 

setContentView(R.layout.main); 

mapView = (MapView) this.findViewById(R.id.bmapView); 

bMapManager = new BMapManager(MainActivity.this ); 

//必须要加载key 

bMapManager.init(KeyString, new MKGeneralListener() { 

  

public void onGetPermissionState(int arg0) { 

if(arg0==300){ 

Toast.makeText(MainActivity.this, "输入的key有错,请核实!!", 1).show(); 

} 

} 

  

public void onGetNetworkState(int arg0) { 

  

} 

}); 

this.initMapActivity(bMapManager); 

//表示可以设置缩放功能 

mapView.setBuiltInZoomControls(true); 

mapController = mapView.getController(); 

//设置缩放级别是12个级别 

mapController.setZoom(12); 

  

Drawable drawable = getResources().getDrawable(R.drawable.icon_marka); 

mapView.getOverlays().add(new MyOverLayItem(drawable)); 

  

} 

  

public class MyOverLayItem extends ItemizedOverlay<OverlayItem>{ 

  

private List<OverlayItem> list = new ArrayList<OverlayItem>(); 

//以double类型定义一组坐标 

private double mLat1 = 39.90923;//表示为纬度 

private double mLon1 = 116.397428;//表示经度 

  

private double mLat2 = 39.9022;//表示为纬度 

private double mLon2 = 116.3922;//表示经度 

  

private double mLat3 = 39.9033;//表示为纬度 

private double mLon3 = 116.3933;//表示经度 

  

//用于在地图上标识坐标,用一个图片标注 

public MyOverLayItem(Drawable arg0) { 

super(arg0); 

//第一组数据在地图上的标注点 

GeoPoint geoPoint1 = new GeoPoint((int)(mLat1*1E6),(int)(mLon1*1E6)); 

//第二组数据在地图上的标注点 

GeoPoint geoPoint2 = new GeoPoint((int)(mLat2*1E6),(int)(mLon2*1E6)); 

//第三组数据在地图上的标注点 

GeoPoint geoPoint3 = new GeoPoint((int)(mLat3*1E6),(int)(mLon3*1E6)); 

//标注点,标题,片段 

list.add(new OverlayItem(geoPoint1,"point1","point1")); 

list.add(new OverlayItem(geoPoint2,"point2","point2")); 

list.add(new OverlayItem(geoPoint3,"point3","point3")); 

populate();//实现了地图刷新的功能 

  

} 

  

//返回指定的list集合中每一个坐标 

@Override

protected OverlayItem createItem(int arg0) { 

return list.get(arg0); 

} 

  

//返回list集合中坐标的个数 

@Override

public int size() { 

return list.size(); 

} 

  

@Override

public boolean onTap(int i) { 

Toast.makeText(MainActivity.this, list.get(i).getSnippet(), 1).show(); 

return true; 

} 

  

} 

  

  

@Override

protected void onDestroy() { 

super.onDestroy(); 

if(bMapManager!=null){ 

bMapManager.destroy(); 

bMapManager = null; 

} 

} 

  

@Override

protected void onResume() { 

super.onResume(); 

if(bMapManager!=null){ 

bMapManager.start(); 

} 

} 

  

@Override

protected void onPause() { 

super.onPause(); 

if(bMapManager!=null){ 

bMapManager.stop(); 

} 

} 

  

@Override

protected boolean isRouteDisplayed() { 

return false; 

} 

  

  

}

 

你可能感兴趣的:(百度地图)