首先还是一贯作风,请大家先看一些图例:
在上一篇介绍了地图显示自己的位置,在这一篇呢,我简单介绍下在地图如何show出来一系列POI(兴趣点)
首先我们从服务器拉取要标记POI的信息如(lat,lon,Tag等信息)然后就是根据经纬度创建ItemizedOverlay.这个是用于显示一系列的POI.
代码片段:
在onLocationChanged调用:
/***
* Location 监听
*
* @param arg0
*/
@Override
public void onLocationChanged(Location location) {
if (location != null) {
// 获取自己的经纬度点
GeoPoint geoPoint = new GeoPoint(
(int) (location.getLatitude() * 1e6),
(int) (location.getLongitude() * 1e6));
mMapController.setCenter(geoPoint);
addItemizedOverlay(geoPoint.getLatitudeE6() / 1e6,
geoPoint.getLongitudeE6() / 1e6);// 定位一系列点
// addOverLay(geoPoint);
}
}
/***
* 添加一系列的overlay 范围在5000米内
*
* @param lat
* 纬度
* @param lon
* 经度
*/
void addItemizedOverlay(double lat, double lon) {
arrayList = new ArrayList<MarkInfo>();
// 获取服务器返回的一系列点
ArrayList<MarkInfo> markInfos = Constent.getArrayListPoint();
for (int i = 0; i < markInfos.size(); i++) {
MarkInfo markInfo = markInfos.get(i);
Double dis = MyUtil.getGeoPointDistance(lat, lon, markInfo.lat,
markInfo.lon);
if (dis <= distance)
arrayList.add(markInfo);
}
Drawable marker = getResources().getDrawable(R.drawable.item);
marker.setBounds(0, 0, marker.getIntrinsicWidth(),
marker.getIntrinsicHeight()); // 为maker定义位置和边界
overlays = mMapView.getOverlays();
myItemizedOverlay = new MyItemizedOverlay(marker, this, arrayList);
myItemizedOverlay.setMapView(mMapView);
overlays.add(myItemizedOverlay);
mPopView = createMarkView();// 获取冒泡view
myItemizedOverlay.setmPopView(mPopView);
// 将泡泡添加到mMapView上
mMapView.addView(mPopView, new MapView.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, null,
MapView.LayoutParams.WRAP_CONTENT));
mPopView.setVisibility(View.GONE);
}
/***
* 创建点击mark时的弹出泡泡
*/
public View createMarkView() {
layoutInflater = (LayoutInflater) getSystemSer