• 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         }
  • 相关阅读:
    Word 转换为 PDf 的技术方案
    [转载]sql server 常用存储过程
    Redmine 初体验
    Quartz.net Tutorial Lesson 1
    [转载]sql server TSQL 区分字符串大小写 的两种方法
    [原创]sql server inner join 效率测试
    java实现树的一般操作
    【转】Mybatis中进行批量更新
    【转载】单例模式的7种写法(整合自两篇文章)
    mybtis批量insert传入参数为list
  • 原文地址:https://www.cnblogs.com/hezijian/p/3721876.html
Copyright © 2020-2023  润新知