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

时间:2021-10-29 22:43:39
 
(根据老罗视频整理)
如何在地图上标注多个建筑物
当某个类型的覆盖物,包含多个类型相同、显示方式相同、处理方式相同的项时可以使用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; 
} 
  
  
}