zoukankan      html  css  js  c++  java
  • PictureShare开发(二)地图Mark(标记)的处理(1)

    问题一:采用哪种覆盖物

    本来想用百度地图的图片覆盖物功能,图片覆盖物有一个很好的优点,就是图片的大小会随着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         }
  • 相关阅读:
    python 自定义去掉空行
    JavaScript 获取时间函数
    python 自定义ssh
    python 去掉空行
    python roboot解析 output.xml
    语音识别-windows
    python 自定义request模块调试
    python 自定义装饰器
    python 自定义Server酱模块编写
    python 自定义exception模块
  • 原文地址:https://www.cnblogs.com/hezijian/p/3721876.html
Copyright © 2011-2022 走看看