问题一:采用哪种覆盖物
本来想用百度地图的图片覆盖物功能,图片覆盖物有一个很好的优点,就是图片的大小会随着MapView的ZoomLevel变化而变化,非常的方便,但是利用图片覆盖物的话有一个致命的缺点:就是很难获取到点击事件。
所以,我接下来想到用自定义View作为覆盖物。这样就可以很方便地获取触摸事件。可是问题又来了,自定义View的话效果很一般(移动地图的时候自定义View会出现严重的漂移,严重影响视觉效果)
最后,采用自定义图层的办法(ItemizdOverlay)
自定义图层的话,每次只需要往图层上面加入OverlayItem,当点击item时,可以获取item的标识,而overly可以通过标识获取相应的item
问题二:怎么防止mark过多
如果发布一张图片就在地图上插上一个mark,这样将会使得地图的mark变得密密麻麻。
所以采取以下策略:
1)判断ZOOMLevel。
2)ZoomLevel在某个范围内就显示该范围对应的mark(例如:14<ZoomLevel<16,显示最小的mark)
实现方法:给地图添加一个状态监听器,获取得到zoom,转换为zoomLevel,如果zoomLevel改变,就改变overlay上面的OverItem
核心代码如下:
1 if(zoomLevel != NowZoomLevel || zoomLevel == 0){
2 NowZoomLevel = zoomLevel;
3 switch(zoomLevel){
4 case 0:
5 Log.e("MapStatusListener","zoomLevel=0");
6 mMapController.setZoom(MapViewUtil.ZOOM_MIN_LEVEL);
7 mMapController.setCenter(GeoPointUtil.centerGeoPoint);
8 overlay.removeAll();
9 overlay.addItem(new SmallMarkItems(TestGeoPointSmall.getSmallGeoPointList()).createSmallMarkItemsList());
10 break;
11 case 1:
12 Log.e("MapStatusListener","zoomLevel=1");
13 overlay.removeAll();
14 overlay.addItem(new SmallMarkItems(TestGeoPointSmall.getSmallGeoPointList()).createSmallMarkItemsList());
15 break;
16 case 2:
17 Log.e("MapStatusListener","zoomLevel=2");
18 overlay.removeAll();
19 overlay.addItem(new MiddleMarkItems(TestGeoPointMiddle.getMiddleGeoPointList()).createMiddleMarkItemsList());
20 break;
21 case 3:
22 overlay.removeAll();
23 overlay.addItem(new BigMarkItems(TestGeoPointMiddle.getMiddleGeoPointList()).createMiddleMarkItemsList());
24 Log.e("MapStatusListener","zoomLevel=3");
25 break;
26 default:
27 Log.e("MapStatusListener","zoomLevelDefault");
28 break;
29 }
30 mMapView.refresh();
31 }
PictureShare开发(二)地图Mark(标记)的处理(1),布布扣,bubuko.com
时间: 2024-10-21 23:35:02