zoukankan      html  css  js  c++  java
  • 针对不同的地图级别对大数据量的点进行聚合

    package com.sb.service.impl;
    
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    
    import com.sb.entity.SG_GROUPINDEX;
    import com.sb.entity.SG_PIPEPOINT;
    
    
    //聚合类 不同的地图级别聚合的距离不一样,每一个地图级别都对应一个聚合结果
    public class MarkerClusterer {
        public MarkerClusterer() {
             
        }
        protected int total;
       //创建聚合
        //points 点集
        //dis 聚合距离
        //return clusters 聚合点集合
       public List<SG_GROUPINDEX> createClusterer(List<SG_PIPEPOINT> points,double dis,int zoom,String thisDay) {
           //List<SG_PIPEPOINT> points,double dis,int zoom,String thisDay
            List<SG_GROUPINDEX> clusters= new ArrayList<SG_GROUPINDEX>();
            for(int i=0;i<points.size();i++) {
                 boolean incluster=false;
                   SG_PIPEPOINT tmpPT=points.get(i);
                   
                 for(int j=0;j<clusters.size();j++){
                    //在指定的聚合距离(dis)之内
                   if(this.getDistance(clusters.get(j).getCenterx(),clusters.get(j).getCentery(),tmpPT)<dis){
                      if(clusters.get(j).getMinX()>tmpPT.getJd()) clusters.get(j).setMinX(tmpPT.getJd());
                      if(clusters.get(j).getMaxX()<tmpPT.getJd()) clusters.get(j).setMaxX(tmpPT.getJd());
                      if(clusters.get(j).getMinY()>tmpPT.getWd()) clusters.get(j).setMinY(tmpPT.getWd());
                      if(clusters.get(j).getMaxY()<tmpPT.getWd()) clusters.get(j).setMaxY(tmpPT.getWd());
                      clusters.get(j).addNum();
                      incluster=true;
                      break;
                   }
                }
                if(!incluster) //否则就单独创建一个聚合点
                {
                    clusters.add(this.createCluster(tmpPT,dis,zoom,thisDay));
                }
            }
            return clusters;
       }
       //创建一个聚合
       private SG_GROUPINDEX createCluster(SG_PIPEPOINT p,double dis,int zoom,String thisDay)
       {
           SG_GROUPINDEX cluster=new SG_GROUPINDEX();
           cluster.setNum(1);
           cluster.setCenterx(p.getJd());
           cluster.setCentery(p.getWd());
           cluster.setMinX(p.getJd());
           cluster.setMinY(p.getJd());
           cluster.setMaxX(p.getWd());
           cluster.setMaxY(p.getWd());
           cluster.setDis(dis);
           cluster.setZoom(zoom);
           cluster.setCreatetime(thisDay);
           return cluster;
           
       }
       //计算两点之间的距离
       private double getDistance(double x,double y,SG_PIPEPOINT point2){
        double pk = 180 / 3.14169  ;
        double a1 = y / pk  ;
        double a2 = x / pk  ;
        double b1 = point2.getWd() / pk  ;
        double b2 = point2.getJd() / pk  ;
        double t1 =Math.cos(a1) * Math.cos(a2) * Math.cos(b1) * Math.cos(b2)  ;
        double t2 = Math.cos(a1) * Math.sin(a2) * Math.cos(b1) * Math.sin(b2)  ;
        double t3 = Math.sin(a1) * Math.sin(b1);
        double tt = Math.acos(t1 + t2 + t3);
        return 6366000 * tt;
       }
    
    }
    
    
     
  • 相关阅读:
    C# 建立快捷方式
    ae中gp执行 Error HRESULT E_FAIL has been returned from a call to a COM component错误
    AE编辑点要素编辑
    噱头还是革命 云计算“泡沫”五年后改变世界? 狼人:
    分析:英特尔收购McAfee的三大意义 狼人:
    云安全:防护“工具”还是攻击“利器” 狼人:
    热点:安全问题是否能将DNS推入云服务 狼人:
    迈克菲收购tenCube 打造新一代移动安全平台 狼人:
    戴尔推免费浏览器安全工具 可隔离恶意软件 狼人:
    黑帽大会:HTTPS和SSL协议存在安全漏洞 狼人:
  • 原文地址:https://www.cnblogs.com/GIScore/p/13608997.html
Copyright © 2011-2022 走看看