Viewing File: /home/maglabs/exclusive/wp-content/plugins/g5-ere/assets/vendors/supercluster/supercluster.min.js
(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?module.exports=factory():typeof define==="function"&&define.amd?define(factory):(global=global||self,global.Supercluster=factory())})(this,function(){"use strict";function sortKD(ids,coords,nodeSize,left,right,depth){if(right-left<=nodeSize){return}var m=left+right>>1;select(ids,coords,m,left,right,depth%2);sortKD(ids,coords,nodeSize,left,m-1,depth+1);sortKD(ids,coords,nodeSize,m+1,right,depth+1)}function select(ids,coords,k,left,right,inc){while(right>left){if(right-left>600){var n=right-left+1;var m=k-left+1;var z=Math.log(n);var s=.5*Math.exp(2*z/3);var sd=.5*Math.sqrt(z*s*(n-s)/n)*(m-n/2<0?-1:1);var newLeft=Math.max(left,Math.floor(k-m*s/n+sd));var newRight=Math.min(right,Math.floor(k+(n-m)*s/n+sd));select(ids,coords,k,newLeft,newRight,inc)}var t=coords[2*k+inc];var i=left;var j=right;swapItem(ids,coords,left,k);if(coords[2*right+inc]>t){swapItem(ids,coords,left,right)}while(i<j){swapItem(ids,coords,i,j);i++;j--;while(coords[2*i+inc]<t){i++}while(coords[2*j+inc]>t){j--}}if(coords[2*left+inc]===t){swapItem(ids,coords,left,j)}else{j++;swapItem(ids,coords,j,right)}if(j<=k){left=j+1}if(k<=j){right=j-1}}}function swapItem(ids,coords,i,j){swap(ids,i,j);swap(coords,2*i,2*j);swap(coords,2*i+1,2*j+1)}function swap(arr,i,j){var tmp=arr[i];arr[i]=arr[j];arr[j]=tmp}function range(ids,coords,minX,minY,maxX,maxY,nodeSize){var stack=[0,ids.length-1,0];var result=[];var x,y;while(stack.length){var axis=stack.pop();var right=stack.pop();var left=stack.pop();if(right-left<=nodeSize){for(var i=left;i<=right;i++){x=coords[2*i];y=coords[2*i+1];if(x>=minX&&x<=maxX&&y>=minY&&y<=maxY){result.push(ids[i])}}continue}var m=Math.floor((left+right)/2);x=coords[2*m];y=coords[2*m+1];if(x>=minX&&x<=maxX&&y>=minY&&y<=maxY){result.push(ids[m])}var nextAxis=(axis+1)%2;if(axis===0?minX<=x:minY<=y){stack.push(left);stack.push(m-1);stack.push(nextAxis)}if(axis===0?maxX>=x:maxY>=y){stack.push(m+1);stack.push(right);stack.push(nextAxis)}}return result}function within(ids,coords,qx,qy,r,nodeSize){var stack=[0,ids.length-1,0];var result=[];var r2=r*r;while(stack.length){var axis=stack.pop();var right=stack.pop();var left=stack.pop();if(right-left<=nodeSize){for(var i=left;i<=right;i++){if(sqDist(coords[2*i],coords[2*i+1],qx,qy)<=r2){result.push(ids[i])}}continue}var m=Math.floor((left+right)/2);var x=coords[2*m];var y=coords[2*m+1];if(sqDist(x,y,qx,qy)<=r2){result.push(ids[m])}var nextAxis=(axis+1)%2;if(axis===0?qx-r<=x:qy-r<=y){stack.push(left);stack.push(m-1);stack.push(nextAxis)}if(axis===0?qx+r>=x:qy+r>=y){stack.push(m+1);stack.push(right);stack.push(nextAxis)}}return result}function sqDist(ax,ay,bx,by){var dx=ax-bx;var dy=ay-by;return dx*dx+dy*dy}var defaultGetX=function(p){return p[0]};var defaultGetY=function(p){return p[1]};var KDBush=function KDBush(points,getX,getY,nodeSize,ArrayType){if(getX===void 0)getX=defaultGetX;if(getY===void 0)getY=defaultGetY;if(nodeSize===void 0)nodeSize=64;if(ArrayType===void 0)ArrayType=Float64Array;this.nodeSize=nodeSize;this.points=points;var IndexArrayType=points.length<65536?Uint16Array:Uint32Array;var ids=this.ids=new IndexArrayType(points.length);var coords=this.coords=new ArrayType(points.length*2);for(var i=0;i<points.length;i++){ids[i]=i;coords[2*i]=getX(points[i]);coords[2*i+1]=getY(points[i])}sortKD(ids,coords,nodeSize,0,ids.length-1,0)};KDBush.prototype.range=function range$1(minX,minY,maxX,maxY){return range(this.ids,this.coords,minX,minY,maxX,maxY,this.nodeSize)};KDBush.prototype.within=function within$1(x,y,r){return within(this.ids,this.coords,x,y,r,this.nodeSize)};var defaultOptions={minZoom:0,maxZoom:16,radius:40,extent:512,nodeSize:64,log:false,reduce:null,map:function(props){return props}};var Supercluster=function Supercluster(options){this.options=extend(Object.create(defaultOptions),options);this.trees=new Array(this.options.maxZoom+1)};Supercluster.prototype.load=function load(points){var ref=this.options;var log=ref.log;var minZoom=ref.minZoom;var maxZoom=ref.maxZoom;var nodeSize=ref.nodeSize;if(log){console.time("total time")}var timerId="prepare "+points.length+" points";if(log){console.time(timerId)}this.points=points;var clusters=[];for(var i=0;i<points.length;i++){if(!points[i].geometry){continue}clusters.push(createPointCluster(points[i],i))}this.trees[maxZoom+1]=new KDBush(clusters,getX,getY,nodeSize,Float32Array);if(log){console.timeEnd(timerId)}for(var z=maxZoom;z>=minZoom;z--){var now=+Date.now();clusters=this._cluster(clusters,z);this.trees[z]=new KDBush(clusters,getX,getY,nodeSize,Float32Array);if(log){console.log("z%d: %d clusters in %dms",z,clusters.length,+Date.now()-now)}}if(log){console.timeEnd("total time")}return this};Supercluster.prototype.getClusters=function getClusters(bbox,zoom){var minLng=((bbox[0]+180)%360+360)%360-180;var minLat=Math.max(-90,Math.min(90,bbox[1]));var maxLng=bbox[2]===180?180:((bbox[2]+180)%360+360)%360-180;var maxLat=Math.max(-90,Math.min(90,bbox[3]));if(bbox[2]-bbox[0]>=360){minLng=-180;maxLng=180}else if(minLng>maxLng){var easternHem=this.getClusters([minLng,minLat,180,maxLat],zoom);var westernHem=this.getClusters([-180,minLat,maxLng,maxLat],zoom);return easternHem.concat(westernHem)}var tree=this.trees[this._limitZoom(zoom)];var ids=tree.range(lngX(minLng),latY(maxLat),lngX(maxLng),latY(minLat));var clusters=[];for(var i=0,list=ids;i<list.length;i+=1){var id=list[i];var c=tree.points[id];clusters.push(c.numPoints?getClusterJSON(c):this.points[c.index])}return clusters};Supercluster.prototype.getChildren=function getChildren(clusterId){var originId=clusterId>>5;var originZoom=clusterId%32;var errorMsg="No cluster with the specified id.";var index=this.trees[originZoom];if(!index){throw new Error(errorMsg)}var origin=index.points[originId];if(!origin){throw new Error(errorMsg)}var r=this.options.radius/(this.options.extent*Math.pow(2,originZoom-1));var ids=index.within(origin.x,origin.y,r);var children=[];for(var i=0,list=ids;i<list.length;i+=1){var id=list[i];var c=index.points[id];if(c.parentId===clusterId){children.push(c.numPoints?getClusterJSON(c):this.points[c.index])}}if(children.length===0){throw new Error(errorMsg)}return children};Supercluster.prototype.getLeaves=function getLeaves(clusterId,limit,offset){limit=limit||10;offset=offset||0;var leaves=[];this._appendLeaves(leaves,clusterId,limit,offset,0);return leaves};Supercluster.prototype.getTile=function getTile(z,x,y){var tree=this.trees[this._limitZoom(z)];var z2=Math.pow(2,z);var ref=this.options;var extent=ref.extent;var radius=ref.radius;var p=radius/extent;var top=(y-p)/z2;var bottom=(y+1+p)/z2;var tile={features:[]};this._addTileFeatures(tree.range((x-p)/z2,top,(x+1+p)/z2,bottom),tree.points,x,y,z2,tile);if(x===0){this._addTileFeatures(tree.range(1-p/z2,top,1,bottom),tree.points,z2,y,z2,tile)}if(x===z2-1){this._addTileFeatures(tree.range(0,top,p/z2,bottom),tree.points,-1,y,z2,tile)}return tile.features.length?tile:null};Supercluster.prototype.getClusterExpansionZoom=function getClusterExpansionZoom(clusterId){var clusterZoom=clusterId%32-1;while(clusterZoom<=this.options.maxZoom){var children=this.getChildren(clusterId);clusterZoom++;if(children.length!==1){break}clusterId=children[0].properties.cluster_id}return clusterZoom};Supercluster.prototype._appendLeaves=function _appendLeaves(result,clusterId,limit,offset,skipped){var children=this.getChildren(clusterId);for(var i=0,list=children;i<list.length;i+=1){var child=list[i];var props=child.properties;if(props&&props.cluster){if(skipped+props.point_count<=offset){skipped+=props.point_count}else{skipped=this._appendLeaves(result,props.cluster_id,limit,offset,skipped)}}else if(skipped<offset){skipped++}else{result.push(child)}if(result.length===limit){break}}return skipped};Supercluster.prototype._addTileFeatures=function _addTileFeatures(ids,points,x,y,z2,tile){for(var i$1=0,list=ids;i$1<list.length;i$1+=1){var i=list[i$1];var c=points[i];var f={type:1,geometry:[[Math.round(this.options.extent*(c.x*z2-x)),Math.round(this.options.extent*(c.y*z2-y))]],tags:c.numPoints?getClusterProperties(c):this.points[c.index].properties};var id=c.numPoints?c.id:this.points[c.index].id;if(id!==undefined){f.id=id}tile.features.push(f)}};Supercluster.prototype._limitZoom=function _limitZoom(z){return Math.max(this.options.minZoom,Math.min(z,this.options.maxZoom+1))};Supercluster.prototype._cluster=function _cluster(points,zoom){var clusters=[];var ref=this.options;var radius=ref.radius;var extent=ref.extent;var reduce=ref.reduce;var r=radius/(extent*Math.pow(2,zoom));for(var i=0;i<points.length;i++){var p=points[i];if(p.zoom<=zoom){continue}p.zoom=zoom;var tree=this.trees[zoom+1];var neighborIds=tree.within(p.x,p.y,r);var numPoints=p.numPoints||1;var wx=p.x*numPoints;var wy=p.y*numPoints;var clusterProperties=reduce?this._map(p,true):null;var id=(i<<5)+(zoom+1);for(var i$1=0,list=neighborIds;i$1<list.length;i$1+=1){var neighborId=list[i$1];var b=tree.points[neighborId];if(b.zoom<=zoom){continue}b.zoom=zoom;var numPoints2=b.numPoints||1;wx+=b.x*numPoints2;wy+=b.y*numPoints2;numPoints+=numPoints2;b.parentId=id;if(reduce){reduce(clusterProperties,this._map(b))}}if(numPoints===1){clusters.push(p)}else{p.parentId=id;clusters.push(createCluster(wx/numPoints,wy/numPoints,id,numPoints,clusterProperties))}}return clusters};Supercluster.prototype._map=function _map(point,clone){if(point.numPoints){return clone?extend({},point.properties):point.properties}var original=this.points[point.index].properties;var result=this.options.map(original);return clone&&result===original?extend({},result):result};function createCluster(x,y,id,numPoints,properties){return{x:x,y:y,zoom:Infinity,id:id,parentId:-1,numPoints:numPoints,properties:properties}}function createPointCluster(p,id){var ref=p.geometry.coordinates;var x=ref[0];var y=ref[1];return{x:lngX(x),y:latY(y),zoom:Infinity,index:id,parentId:-1}}function getClusterJSON(cluster){return{type:"Feature",id:cluster.id,properties:getClusterProperties(cluster),geometry:{type:"Point",coordinates:[xLng(cluster.x),yLat(cluster.y)]}}}function getClusterProperties(cluster){var count=cluster.numPoints;var abbrev=count>=1e4?Math.round(count/1e3)+"k":count>=1e3?Math.round(count/100)/10+"k":count;return extend(extend({},cluster.properties),{cluster:true,cluster_id:cluster.id,point_count:count,point_count_abbreviated:abbrev})}function lngX(lng){return lng/360+.5}function latY(lat){var sin=Math.sin(lat*Math.PI/180);var y=.5-.25*Math.log((1+sin)/(1-sin))/Math.PI;return y<0?0:y>1?1:y}function xLng(x){return(x-.5)*360}function yLat(y){var y2=(180-y*360)*Math.PI/180;return 360*Math.atan(Math.exp(y2))/Math.PI-90}function extend(dest,src){for(var id in src){dest[id]=src[id]}return dest}function getX(p){return p.x}function getY(p){return p.y}return Supercluster});
Back to Directory
File Manager