开发者社区> code_xzh> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

百度地图聚合

简介: 一、牛人们的想法 下面是我参考的有关的博客,下面将一一列举 1.MarkerCluster之百度地图版  http://hi.baidu.com/liongg/item/d8adece188fbfb11585dd89f 2.Marker Cluster面面观 http://hi.baidu.com/liongg/item/a380cc95bd70c2bdcd80
+关注继续查看
一、牛人们的想法
下面是我参考的有关的博客,下面将一一列举
1.MarkerCluster之百度地图版  http://hi.baidu.com/liongg/item/d8adece188fbfb11585dd89f
4.百度地图官网上已经有JS版的标注物聚合实例与原文件,建议看百度地图上的代码,规范且函数注释明确。
百度地图javascript开源库:  http://developer.baidu.com/map/library.htm
二、我的思路
1.下面以一个流程图来表述我的想法。
2.下面贴出代码
[html] view plaincopy
  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.     private List<ClusterMarker> mMarkers;  
  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.     public List<OverlayItem> createCluster(List<OverlayItem> markerList){  
  50.         this.mMarkers.clear();  
  51.         List<OverlayItem> itemList = new ArrayList<OverlayItem>();  
  52.         for(int i=0;i<markerList.size();i++){  
  53.             addCluster(markerList.get(i));  
  54.         }  
  55.         for(int i=0;i<mMarkers.size();i++){  
  56.             ClusterMarker cm = mMarkers.get(i);  
  57.             setClusterDrawable(cm);  
  58.             OverlayItem oi = new OverlayItem(cm.getmCenter(),cm.getTitle(),cm.getSnippet());  
  59.             oi.setMarker(cm.getMarker());  
  60.             itemList.add(oi);  
  61.         }  
  62.         return itemList;  
  63.     }  
  64.       
  65.     private void addCluster(OverlayItem marker){  
  66.         GeoPoint markGeo = marker.getPoint();  
  67.         if(mMarkers.size()==0){  
  68.             ClusterMarker clusterMarker = new ClusterMarker(marker.getPoint(), marker.getTitle(), marker.getSnippet());  
  69.             clusterMarker.setMarker(marker.getMarker());  
  70.             clusterMarker.AddMarker(marker, isAverageCenter);  
  71.             Bounds bound = new Bounds(markGeo.getLatitudeE6(),markGeo.getLongitudeE6(),markGeo.getLatitudeE6(),markGeo.getLongitudeE6());  
  72.             bound = MapUtils.getExtendedBounds(mMapView, bound, mGridSize);  
  73.             clusterMarker.setmGridBounds(bound);  
  74.             mMarkers.add(clusterMarker);  
  75.         }else{  
  76.             ClusterMarker clusterContain = null;  
  77.             double distance = mDistance;  
  78.             for(int i=0;i<mMarkers.size();i++){  
  79.                 ClusterMarker clusterMarker = mMarkers.get(i);  
  80.                 GeoPoint center = clusterMarker.getmCenter();  
  81.                 double d = DistanceUtil.getDistance(center, marker.getPoint());  
  82.                 if(d<distance){  
  83.                     distance = d;  
  84.                     clusterContain = clusterMarker;  
  85.                 }  
  86.             }  
  87.             if(clusterContain == null||!isMarkersInCluster(markGeo, clusterContain.getmGridBounds())){  
  88.                 ClusterMarker clusterMarker = new ClusterMarker(marker.getPoint(), marker.getTitle(), marker.getSnippet());  
  89.                 clusterMarker.AddMarker(marker, isAverageCenter);  
  90.                   
  91.                 clusterMarker.AddMarker(marker, isAverageCenter);  
  92.                 Bounds 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.         View drawableView = LayoutInflater.from(mMarkCluster).inflate(  
  105.                 R.layout.drawable_mark, null);  
  106.         TextView text = (TextView) drawableView.findViewById(R.id.drawble_mark);  
  107.         int markNum = clusterMarker.getmMarkers().size();  
  108.         if(markNum>=2){  
  109.             text.setText(markNum+"");  
  110.             if(markNum<11){  
  111.                 text.setBackgroundResource(R.drawable.m0);  
  112.             }else if(markNum>10&&markNum<21){  
  113.                 text.setBackgroundResource(R.drawable.m1);  
  114.             }else if(markNum>20&&markNum<31){  
  115.                 text.setBackgroundResource(R.drawable.m2);  
  116.             }else if(markNum>30&&markNum<41){  
  117.                 text.setBackgroundResource(R.drawable.m3);  
  118.             }else{  
  119.                 text.setBackgroundResource(R.drawable.m4);  
  120.             }  
  121.             Bitmap 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.         if(markerGeo.getLatitudeE6()>bound.leftBottom.getLatitudeE6()  
  130.                 &&markerGeo.getLatitudeE6()<bound.rightTop.getLatitudeE6()  
  131.                 &&markerGeo.getLongitudeE6()>bound.rightTop.getLongitudeE6()  
  132.                 &&markerGeo.getLongitudeE6()<bound.leftBottom.getLongitudeE6()){  
  133.             return true;  
  134.         }  
  135.         return false;  
  136.           
  137.     }  
  138. }</span></span>  

3.工程demo代码下载,地图标注物聚合.zip
4.下面是程序的实例图片

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
vue中使用vue-echarts引入百度地图实现数据可视化
本文主要讲解vue-echarts引入百度地图实现数据可视化,实现在项目中使用百度地图的效果
37 0
百度之星之I:地图的省钱计划
百度地图有自己的一套坐标系(你可以把它看作一个笛卡尔坐标系),在这套坐标系里,一个标准单位为1km。而在这坐标系上针对地理信息进行标注的数据,大多数时候是通过购买的方式完成的。为了节约数据更新的成本,数据组里的鑫哥想出了一个好主意——自己测数据。
34 0
百度地图根据经纬度获取国家、州市等地址相关信息
这是一个简单的经纬度转换成具体地址信息,支持国际和国内经纬度转换。 效果如下图所示: function xmlToArray2($xml) { // 将XML转为array ...
1524 0
百度地图 画圆 删除标注
把下面这段代码复制到百度地图的demo中运行,效果就是我想设计的效果。 body, html {width: 100%;height: 100%;margin:0;font-family:"微软雅黑";} #al...
1432 0
Kylin-百度地图的实践
百度地图开放平台业务部数据智能组主要负责百度地图内部相关业务的大数据计算分析,处理日常百亿级规模数据,为不同业务提供单条SQL毫秒级响应的OLAP多维分析查询服务。
1506 0
如何利用【百度地图API】,制作房产酒店地图?(上)——制作自定义标注和自定义信息窗口
原文:如何利用【百度地图API】,制作房产酒店地图?(上)——制作自定义标注和自定义信息窗口 摘要:   想亲手制作一张酷讯、去哪儿、安居客、链接地产那样的房产、酒店地图麼?那赶快来学习吧。(以酷讯为例,如下图)      更多成功案例请点击:http://dev.
1229 0
百度地图纠偏处理
这个方法是一个网友告诉我的,不知道有效否,先记下来,改天试试: GeoPoint p = new GeoPoint(x, y);GeoPoint p2 = CoordinateConvert.bundleDecode(CoordinateConvert.
671 0
+关注
code_xzh
对前端移动客户端技术比较擅长。著有《React Native移动开发实战》和《Kotlin入门与实战》和《Weex跨平台实战》,《React Native移动开发进阶》即将出版,正在努力完成《Flutter跨平台开发实战》
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载