首页 > 其他分享 >百度地图之标注聚会

百度地图之标注聚会

时间:2022-11-29 14:38:04浏览次数:68  
标签:clusterMarker bound private 聚会 import android com 百度 标注


俗话说站在巨人的肩膀上将事半功倍,在写android的百度地图标注物聚合时,我在网上也进行了大量的查询,发现标注物聚合的算法很早就有人写了,不过他们是js或者是Google地图c#版的。借鉴他们的想法,我写了android的这版代码与大家一起分享。




一、牛人们的想法


下面是我参考的有关的博客,下面将一一列举


1.MarkerCluster之百度地图版  ​​http://hi.baidu.com/liongg/item/d8adece188fbfb11585dd89f​


2.Marker Cluster面面观 http://hi.baidu.com/liongg/item/a380cc95bd70c2bdcd80e581


3.GoogleMap标注物聚合解决办法 http://www.svennerberg.com/2009/01/handling-large-amounts-of-markers-in-google-maps/


4.百度地图官网上已经有JS版的标注物聚合实例与原文件,建议看百度地图上的代码,规范且函数注释明确。


百度地图javascript开源库:  http://developer.baidu.com/map/library.htm



百度地图之标注聚会_百度地图


二、我的思路


1.下面以一个流程图来表述我的想法。


百度地图之标注聚会_百度地图_02


2.下面贴出代码


[html] ​​ view plain​​ ​​copy​​



  1. <span style="font-family:KaiTi_GB2312;"><span style="font-size:18px;">//cluster聚合器类  
  2. package com.zhl.map;  
  3.   
  4. import java.util.ArrayList;  
  5. import java.util.List;  
  6.   
  7. import android.graphics.Bitmap;  
  8. import android.graphics.Point;  
  9. import android.graphics.drawable.BitmapDrawable;  
  10. import android.util.Log;  
  11. import android.view.LayoutInflater;  
  12. import android.view.View;  
  13. import android.widget.TextView;  
  14. import baidumapsdk.demo.R;  
  15.   
  16.   
  17. import com.baidu.mapapi.cloud.Bounds;  
  18. import com.baidu.mapapi.map.MapView;  
  19. import com.baidu.mapapi.map.OverlayItem;  
  20. import com.baidu.mapapi.utils.DistanceUtil;  
  21. import com.baidu.platform.comapi.basestruct.GeoPoint;  
  22. import com.zhl.activity.MarkerClusterActivity;  
  23. import com.zhl.util.MapUtils;  
  24.   
  25. public class Cluster{  
  26.       
  27.     private MarkerClusterActivity mMarkCluster;  
  28.     private MapView mMapView;  
  29.     private int mMinClusterSize;  
  30.     private Boolean isAverageCenter;  
  31.     private int mGridSize;  
  32.     private double mDistance;  
  33.       
  34. <ClusterMarker>
  35.       
  36.   
  37.     public Cluster(MarkerClusterActivity markCluster,MapView mapView  
  38.             ,int minClusterSize,Boolean isAverageCenter  
  39.             ,int mGridSize,double mDistance) {  
  40. this.mMarkCluster = markCluster;  
  41. this.mMapView = mapView;  
  42. this.mMinClusterSize = minClusterSize;  
  43. this.isAverageCenter = isAverageCenter;  
  44. this.mGridSize = mGridSize;  
  45. this.mDistance = mDistance;  
  46. mMarkers = new ArrayList<ClusterMarker>();  
  47.     }  
  48.   
  49. <OverlayItem> createCluster(List<OverlayItem>
  50.         this.mMarkers.clear();  
  51. <OverlayItem> itemList = new ArrayList<OverlayItem>();  
  52. i=0;i<markerList.size();i++){  
  53.             addCluster(markerList.get(i));  
  54.         }  
  55. i=0;i<mMarkers.size();i++){  
  56. cm = mMarkers.get(i);  
  57.             setClusterDrawable(cm);  
  58. oi = new
  59.             oi.setMarker(cm.getMarker());  
  60.             itemList.add(oi);  
  61.         }  
  62.         return itemList;  
  63.     }  
  64.       
  65.     private void addCluster(OverlayItem marker){  
  66. markGeo = marker.getPoint();  
  67.         if(mMarkers.size()==0){  
  68. clusterMarker = new
  69.             clusterMarker.setMarker(marker.getMarker());  
  70.             clusterMarker.AddMarker(marker, isAverageCenter);  
  71. bound = new
  72. bound = MapUtils.getExtendedBounds(mMapView, bound, mGridSize);  
  73.             clusterMarker.setmGridBounds(bound);  
  74.             mMarkers.add(clusterMarker);  
  75.         }else{  
  76. clusterContain = null;  
  77. distance = mDistance;  
  78. i=0;i<mMarkers.size();i++){  
  79. clusterMarker = mMarkers.get(i);  
  80. center = clusterMarker.getmCenter();  
  81. d = DistanceUtil.getDistance(center, marker.getPoint());  
  82. <distance){  
  83. distance = d;  
  84. clusterContain = clusterMarker;  
  85.                 }  
  86.             }  
  87. clusterContain
  88. clusterMarker = new
  89.                 clusterMarker.AddMarker(marker, isAverageCenter);  
  90.                   
  91.                 clusterMarker.AddMarker(marker, isAverageCenter);  
  92. bound = new Bounds(markGeo.getLatitudeE6(),markGeo.getLongitudeE6(),markGeo.getLatitudeE6(),markGeo.getLongitudeE6());               bound = MapUtils.getExtendedBounds(mMapView, bound, mGridSize);  
  93.                 clusterMarker.setmGridBounds(bound);  
  94.                   
  95.                 mMarkers.add(clusterMarker);  
  96.             }else{  
  97.                 clusterContain.AddMarker(marker, isAverageCenter);  
  98.             }  
  99.   
  100.         }  
  101.     }  
  102.       
  103.     private void setClusterDrawable(ClusterMarker clusterMarker){  
  104. drawableView = LayoutInflater.from(mMarkCluster).inflate(  
  105.                 R.layout.drawable_mark, null);  
  106. text
  107. markNum = clusterMarker.getmMarkers().size();  
  108. >=2){  
  109.             text.setText(markNum+"");  
  110. <11){  
  111.                 text.setBackgroundResource(R.drawable.m0);  
  112. >10&&markNum<21){  
  113.                 text.setBackgroundResource(R.drawable.m1);  
  114. >20&&markNum<31){  
  115.                 text.setBackgroundResource(R.drawable.m2);  
  116. >30&&markNum<41){  
  117.                 text.setBackgroundResource(R.drawable.m3);  
  118.             }else{  
  119.                 text.setBackgroundResource(R.drawable.m4);  
  120.             }  
  121. bitmap = MapUtils.convertViewToBitmap(drawableView);  
  122.             clusterMarker.setMarker(new BitmapDrawable(bitmap));  
  123.         }else{  
  124.               
  125.         }  
  126.     }  
  127.       
  128.     private Boolean isMarkersInCluster(GeoPoint markerGeo,Bounds bound){  
  129. >bound.leftBottom.getLatitudeE6()  
  130. <bound.rightTop.getLatitudeE6()  
  131. >bound.rightTop.getLongitudeE6()  
  132. <bound.leftBottom.getLongitudeE6()){  
  133.             return true;  
  134.         }  
  135.         return false;  
  136.           
  137.     }  
  138. }</span></span>





3.工程demo代码下载,​​地图标注物聚合.zip​​



4.下面是程序的实例图片


标签:clusterMarker,bound,private,聚会,import,android,com,百度,标注
From: https://blog.51cto.com/u_13657808/5894963

相关文章

  • jquery中如何以逗号分割字符串_百度知道
    jquery中如何以逗号分割字符串_百度知道javascript本身就是带split方法的定义和用法split()方法用于把一个字符串分割成字符串数组。语法stringObject.split(separator,how......
  • 百度云和微信账号接入
    利用百度云平台运行我们自己的服务端项目,在平台上线运行。利用这个项目对应的域名将其配置到微信公众平台,并填写token值。(这里的token值是我们自定义的一个字符串,它配置在服......
  • python-爬取百度热搜小说
    fromselenium.webdriverimportChromefromselenium.webdriver.common.byimportBywithChrome()asdriver:list_novel=[]driver.get("https://top.ba......
  • Spring--案例:百度网盘密码数据兼容处理
    案例再度来袭也就是说,在百度网盘的密码复制时,后面即使有空格也能提取成功(trim方法)案例的实现:也就是实现存在空格时,也能输出true;现在的话:那么,我们应该如何使得它忽......
  • 百度之星 2022 游记
    上接CSP&NOIP2022游记。虽然还没有写Day0上午是NOIP2022。出考场发现雅礼寄的有点彻底。我以为大家都能通过T134,甚至可能只有我不会T2才没AK,结果除了蛤蛤大......
  • 百度地图android studio导入开发插件
    百度地图SDKv3.5.0开发包下载地址:​​http://lbsyun.baidu.com/sdk/download?selected=location​​开发工具Android开发工具很多,在这我们推荐各位开发者使用Eclipse和A......
  • php推送百度mip链接
    <?php_GET['dm'];_GET['token'];length=5){$str='';$strPol="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";strPol)-1;for($i=0;$i<$......
  • 百度之星 2022 & CTT2022 游记
    百度之星Day0入住酒店,杭州不愧是支付宝大本营,微信扫码一败涂地,只能使用支付宝。酒店电梯向上运行到6楼左右掉了半楼,非常恐怖,赶紧下了电梯。看了看知乎去年的Astar......
  • 利用特性反射获取额外标注的信息
    需求:我们想得到枚举上面的注释1)枚举类publicenumSex{///<summary>///女///</summary>[CommonAttribute("女")]......
  • 【最终方法】百度移动适配 url校验不通过的解决方法,URL适配规则
    现在网站除了有pc站外,同时相对应的也有手机站,手机站有时百度识别不是很好,这时我们需要使用百度移动适配,进行调节让自己的pc站和手机站进行匹配到,但是很多网友却发现在适配......