UNPKG

@galihrivanto/google-vector-tiles

Version:
1 lines 30.8 kB
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.$=e():t.$=e()}(self,(()=>(()=>{var t={527:t=>{t.exports=function t(e,i,r){function s(n,o){if(!i[n]){if(!e[n]){if(a)return a(n,!0);var h=new Error("Cannot find module '"+n+"'");throw h.code="MODULE_NOT_FOUND",h}var l=i[n]={exports:{}};e[n][0].call(l.exports,(function(t){return s(e[n][1][t]||t)}),l,l.exports,t,e,i,r)}return i[n].exports}for(var a=void 0,n=0;n<r.length;n++)s(r[n]);return s}({1:[function(t,e,i){"use strict";function r(t){this.buf=ArrayBuffer.isView&&ArrayBuffer.isView(t)?t:new Uint8Array(t||0),this.pos=0,this.type=0,this.length=this.buf.length}function s(t){return t.type===r.Bytes?t.readVarint()+t.pos:t.pos+1}function a(t,e,i){return i?4294967296*e+(t>>>0):4294967296*(e>>>0)+(t>>>0)}function n(t,e,i){var r=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.ceil(Math.log(e)/(7*Math.LN2));i.realloc(r);for(var s=i.pos-1;s>=t;s--)i.buf[s+r]=i.buf[s]}function o(t,e){for(var i=0;i<t.length;i++)e.writeVarint(t[i])}function h(t,e){for(var i=0;i<t.length;i++)e.writeSVarint(t[i])}function l(t,e){for(var i=0;i<t.length;i++)e.writeFloat(t[i])}function u(t,e){for(var i=0;i<t.length;i++)e.writeDouble(t[i])}function c(t,e){for(var i=0;i<t.length;i++)e.writeBoolean(t[i])}function d(t,e){for(var i=0;i<t.length;i++)e.writeFixed32(t[i])}function f(t,e){for(var i=0;i<t.length;i++)e.writeSFixed32(t[i])}function p(t,e){for(var i=0;i<t.length;i++)e.writeFixed64(t[i])}function v(t,e){for(var i=0;i<t.length;i++)e.writeSFixed64(t[i])}function y(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+16777216*t[e+3]}function g(t,e,i){t[i]=e,t[i+1]=e>>>8,t[i+2]=e>>>16,t[i+3]=e>>>24}function w(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+(t[e+3]<<24)}e.exports=r;var _=t("ieee754");r.Varint=0,r.Fixed64=1,r.Bytes=2,r.Fixed32=5;var T=4294967296,x=1/T;r.prototype={destroy:function(){this.buf=null},readFields:function(t,e,i){for(i=i||this.length;this.pos<i;){var r=this.readVarint(),s=r>>3,a=this.pos;this.type=7&r,t(s,e,this),this.pos===a&&this.skip(r)}return e},readMessage:function(t,e){return this.readFields(t,e,this.readVarint()+this.pos)},readFixed32:function(){var t=y(this.buf,this.pos);return this.pos+=4,t},readSFixed32:function(){var t=w(this.buf,this.pos);return this.pos+=4,t},readFixed64:function(){var t=y(this.buf,this.pos)+y(this.buf,this.pos+4)*T;return this.pos+=8,t},readSFixed64:function(){var t=y(this.buf,this.pos)+w(this.buf,this.pos+4)*T;return this.pos+=8,t},readFloat:function(){var t=_.read(this.buf,this.pos,!0,23,4);return this.pos+=4,t},readDouble:function(){var t=_.read(this.buf,this.pos,!0,52,8);return this.pos+=8,t},readVarint:function(t){var e,i,r=this.buf;return e=127&(i=r[this.pos++]),i<128?e:(e|=(127&(i=r[this.pos++]))<<7,i<128?e:(e|=(127&(i=r[this.pos++]))<<14,i<128?e:(e|=(127&(i=r[this.pos++]))<<21,i<128?e:function(t,e,i){var r,s,n=i.buf;if(r=(112&(s=n[i.pos++]))>>4,s<128)return a(t,r,e);if(r|=(127&(s=n[i.pos++]))<<3,s<128)return a(t,r,e);if(r|=(127&(s=n[i.pos++]))<<10,s<128)return a(t,r,e);if(r|=(127&(s=n[i.pos++]))<<17,s<128)return a(t,r,e);if(r|=(127&(s=n[i.pos++]))<<24,s<128)return a(t,r,e);if(r|=(1&(s=n[i.pos++]))<<31,s<128)return a(t,r,e);throw new Error("Expected varint not more than 10 bytes")}(e|=(15&(i=r[this.pos]))<<28,t,this))))},readVarint64:function(){return this.readVarint(!0)},readSVarint:function(){var t=this.readVarint();return t%2==1?(t+1)/-2:t/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var t=this.readVarint()+this.pos,e=function(t,e,i){for(var r="",s=e;s<i;){var a,n,o,h=t[s],l=null,u=h>239?4:h>223?3:h>191?2:1;if(s+u>i)break;1===u?h<128&&(l=h):2===u?128==(192&(a=t[s+1]))&&(l=(31&h)<<6|63&a)<=127&&(l=null):3===u?(a=t[s+1],n=t[s+2],128==(192&a)&&128==(192&n)&&((l=(15&h)<<12|(63&a)<<6|63&n)<=2047||l>=55296&&l<=57343)&&(l=null)):4===u&&(a=t[s+1],n=t[s+2],o=t[s+3],128==(192&a)&&128==(192&n)&&128==(192&o)&&((l=(15&h)<<18|(63&a)<<12|(63&n)<<6|63&o)<=65535||l>=1114112)&&(l=null)),null===l?(l=65533,u=1):l>65535&&(l-=65536,r+=String.fromCharCode(l>>>10&1023|55296),l=56320|1023&l),r+=String.fromCharCode(l),s+=u}return r}(this.buf,this.pos,t);return this.pos=t,e},readBytes:function(){var t=this.readVarint()+this.pos,e=this.buf.subarray(this.pos,t);return this.pos=t,e},readPackedVarint:function(t,e){var i=s(this);for(t=t||[];this.pos<i;)t.push(this.readVarint(e));return t},readPackedSVarint:function(t){var e=s(this);for(t=t||[];this.pos<e;)t.push(this.readSVarint());return t},readPackedBoolean:function(t){var e=s(this);for(t=t||[];this.pos<e;)t.push(this.readBoolean());return t},readPackedFloat:function(t){var e=s(this);for(t=t||[];this.pos<e;)t.push(this.readFloat());return t},readPackedDouble:function(t){var e=s(this);for(t=t||[];this.pos<e;)t.push(this.readDouble());return t},readPackedFixed32:function(t){var e=s(this);for(t=t||[];this.pos<e;)t.push(this.readFixed32());return t},readPackedSFixed32:function(t){var e=s(this);for(t=t||[];this.pos<e;)t.push(this.readSFixed32());return t},readPackedFixed64:function(t){var e=s(this);for(t=t||[];this.pos<e;)t.push(this.readFixed64());return t},readPackedSFixed64:function(t){var e=s(this);for(t=t||[];this.pos<e;)t.push(this.readSFixed64());return t},skip:function(t){var e=7&t;if(e===r.Varint)for(;this.buf[this.pos++]>127;);else if(e===r.Bytes)this.pos=this.readVarint()+this.pos;else if(e===r.Fixed32)this.pos+=4;else{if(e!==r.Fixed64)throw new Error("Unimplemented type: "+e);this.pos+=8}},writeTag:function(t,e){this.writeVarint(t<<3|e)},realloc:function(t){for(var e=this.length||16;e<this.pos+t;)e*=2;if(e!==this.length){var i=new Uint8Array(e);i.set(this.buf),this.buf=i,this.length=e}},finish:function(){return this.length=this.pos,this.pos=0,this.buf.subarray(0,this.length)},writeFixed32:function(t){this.realloc(4),g(this.buf,t,this.pos),this.pos+=4},writeSFixed32:function(t){this.realloc(4),g(this.buf,t,this.pos),this.pos+=4},writeFixed64:function(t){this.realloc(8),g(this.buf,-1&t,this.pos),g(this.buf,Math.floor(t*x),this.pos+4),this.pos+=8},writeSFixed64:function(t){this.realloc(8),g(this.buf,-1&t,this.pos),g(this.buf,Math.floor(t*x),this.pos+4),this.pos+=8},writeVarint:function(t){return(t=+t||0)>268435455||t<0?void function(t,e){var i,r;if(t>=0?(i=t%4294967296|0,r=t/4294967296|0):(r=~(-t/4294967296),4294967295^(i=~(-t%4294967296))?i=i+1|0:(i=0,r=r+1|0)),t>=0x10000000000000000||t<-0x10000000000000000)throw new Error("Given varint doesn't fit into 10 bytes");e.realloc(10),function(t,e,i){i.buf[i.pos++]=127&t|128,t>>>=7,i.buf[i.pos++]=127&t|128,t>>>=7,i.buf[i.pos++]=127&t|128,t>>>=7,i.buf[i.pos++]=127&t|128,t>>>=7,i.buf[i.pos]=127&t}(i,0,e),function(t,e){var i=(7&t)<<4;e.buf[e.pos++]|=i|((t>>>=3)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t)))))}(r,e)}(t,this):(this.realloc(4),this.buf[this.pos++]=127&t|(t>127?128:0),void(t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=t>>>7&127)))))},writeSVarint:function(t){this.writeVarint(t<0?2*-t-1:2*t)},writeBoolean:function(t){this.writeVarint(Boolean(t))},writeString:function(t){t=String(t),this.realloc(4*t.length),this.pos++;var e=this.pos;this.pos=function(t,e,i){for(var r,s,a=0;a<e.length;a++){if((r=e.charCodeAt(a))>55295&&r<57344){if(!s){r>56319||a+1===e.length?(t[i++]=239,t[i++]=191,t[i++]=189):s=r;continue}if(r<56320){t[i++]=239,t[i++]=191,t[i++]=189,s=r;continue}r=s-55296<<10|r-56320|65536,s=null}else s&&(t[i++]=239,t[i++]=191,t[i++]=189,s=null);r<128?t[i++]=r:(r<2048?t[i++]=r>>6|192:(r<65536?t[i++]=r>>12|224:(t[i++]=r>>18|240,t[i++]=r>>12&63|128),t[i++]=r>>6&63|128),t[i++]=63&r|128)}return i}(this.buf,t,this.pos);var i=this.pos-e;i>=128&&n(e,i,this),this.pos=e-1,this.writeVarint(i),this.pos+=i},writeFloat:function(t){this.realloc(4),_.write(this.buf,t,this.pos,!0,23,4),this.pos+=4},writeDouble:function(t){this.realloc(8),_.write(this.buf,t,this.pos,!0,52,8),this.pos+=8},writeBytes:function(t){var e=t.length;this.writeVarint(e),this.realloc(e);for(var i=0;i<e;i++)this.buf[this.pos++]=t[i]},writeRawMessage:function(t,e){this.pos++;var i=this.pos;t(e,this);var r=this.pos-i;r>=128&&n(i,r,this),this.pos=i-1,this.writeVarint(r),this.pos+=r},writeMessage:function(t,e,i){this.writeTag(t,r.Bytes),this.writeRawMessage(e,i)},writePackedVarint:function(t,e){this.writeMessage(t,o,e)},writePackedSVarint:function(t,e){this.writeMessage(t,h,e)},writePackedBoolean:function(t,e){this.writeMessage(t,c,e)},writePackedFloat:function(t,e){this.writeMessage(t,l,e)},writePackedDouble:function(t,e){this.writeMessage(t,u,e)},writePackedFixed32:function(t,e){this.writeMessage(t,d,e)},writePackedSFixed32:function(t,e){this.writeMessage(t,f,e)},writePackedFixed64:function(t,e){this.writeMessage(t,p,e)},writePackedSFixed64:function(t,e){this.writeMessage(t,v,e)},writeBytesField:function(t,e){this.writeTag(t,r.Bytes),this.writeBytes(e)},writeFixed32Field:function(t,e){this.writeTag(t,r.Fixed32),this.writeFixed32(e)},writeSFixed32Field:function(t,e){this.writeTag(t,r.Fixed32),this.writeSFixed32(e)},writeFixed64Field:function(t,e){this.writeTag(t,r.Fixed64),this.writeFixed64(e)},writeSFixed64Field:function(t,e){this.writeTag(t,r.Fixed64),this.writeSFixed64(e)},writeVarintField:function(t,e){this.writeTag(t,r.Varint),this.writeVarint(e)},writeSVarintField:function(t,e){this.writeTag(t,r.Varint),this.writeSVarint(e)},writeStringField:function(t,e){this.writeTag(t,r.Bytes),this.writeString(e)},writeFloatField:function(t,e){this.writeTag(t,r.Fixed32),this.writeFloat(e)},writeDoubleField:function(t,e){this.writeTag(t,r.Fixed64),this.writeDouble(e)},writeBooleanField:function(t,e){this.writeVarintField(t,Boolean(e))}}},{ieee754:2}],2:[function(t,e,i){i.read=function(t,e,i,r,s){var a,n,o=8*s-r-1,h=(1<<o)-1,l=h>>1,u=-7,c=i?s-1:0,d=i?-1:1,f=t[e+c];for(c+=d,a=f&(1<<-u)-1,f>>=-u,u+=o;u>0;a=256*a+t[e+c],c+=d,u-=8);for(n=a&(1<<-u)-1,a>>=-u,u+=r;u>0;n=256*n+t[e+c],c+=d,u-=8);if(0===a)a=1-l;else{if(a===h)return n?NaN:1/0*(f?-1:1);n+=Math.pow(2,r),a-=l}return(f?-1:1)*n*Math.pow(2,a-r)},i.write=function(t,e,i,r,s,a){var n,o,h,l=8*a-s-1,u=(1<<l)-1,c=u>>1,d=23===s?Math.pow(2,-24)-Math.pow(2,-77):0,f=r?0:a-1,p=r?1:-1,v=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(o=isNaN(e)?1:0,n=u):(n=Math.floor(Math.log(e)/Math.LN2),e*(h=Math.pow(2,-n))<1&&(n--,h*=2),(e+=n+c>=1?d/h:d*Math.pow(2,1-c))*h>=2&&(n++,h/=2),n+c>=u?(o=0,n=u):n+c>=1?(o=(e*h-1)*Math.pow(2,s),n+=c):(o=e*Math.pow(2,c-1)*Math.pow(2,s),n=0));s>=8;t[i+f]=255&o,f+=p,o/=256,s-=8);for(n=n<<s|o,l+=s;l>0;t[i+f]=255&n,f+=p,n/=256,l-=8);t[i+f-p]|=128*v}},{}]},{},[1])(1)}},e={};function i(r){var s=e[r];if(void 0!==s)return s.exports;var a=e[r]={exports:{}};return t[r](a,a.exports,i),a.exports}i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var r in e)i.o(e,r)&&!i.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{"use strict";i.r(r),i.d(r,{MVTFeature:()=>t,MVTLayer:()=>e,MVTSource:()=>c});class t{constructor(t){this.mVTSource=t.mVTSource,this.selected=t.selected,this.featureId=t.featureId,this.tiles=[],this.style=t.style,this.type=t.vectorTileFeature.type,this.properties=t.vectorTileFeature.properties,this.addTileFeature(t.vectorTileFeature,t.tileContext),this._draw=t.customDraw||this.defaultDraw,this.selected&&this.select()}addTileFeature(t,e){this.tiles[e.id]={vectorTileFeature:t,divisor:t.extent/e.tileSize,context2d:!1,paths2d:!1}}getTiles(){return this.tiles}getTile(t){return this.tiles[t.id]}setStyle(t){this.style=t}redrawTiles(){var t=this.mVTSource.map.getZoom();for(var e in this.tiles)this.mVTSource.deleteTileDrawn(e),this.mVTSource.getTileObject(e).zoom==t&&this.mVTSource.redrawTile(e)}toggle(){this.selected?this.deselect():this.select()}select(){this.selected=!0,this.mVTSource.featureSelected(this),this.redrawTiles()}deselect(){this.selected=!1,this.mVTSource.featureDeselected(this),this.redrawTiles()}setSelected(t){this.selected=t}draw(t){var e=this.tiles[t.id],i=this.style;this.selected&&this.style.selected&&(i=this.style.selected),this._draw(t,e,i,this)}defaultDraw(t,e,i){switch(this.type){case 1:this.drawPoint(t,e,i);break;case 2:this.drawLineString(t,e,i);break;case 3:this.drawPolygon(t,e,i)}}drawPoint(t,e,i){var r=e.vectorTileFeature.coordinates[0][0],s=this.getPoint(r,t,e.divisor),a=i.radius||3,n=this.getContext2d(t.canvas,i);n.beginPath(),n.arc(s.x,s.y,a,0,2*Math.PI),n.closePath(),n.fill(),n.stroke()}drawLineString(t,e,i){e.context2d=this.getContext2d(t.canvas,i),this.drawCoordinates(t,e),e.context2d.stroke(e.paths2d)}drawPolygon(t,e,i){e.context2d=this.getContext2d(t.canvas,i),this.drawCoordinates(t,e),e.paths2d.closePath(),i.fillStyle&&e.context2d.fill(e.paths2d),i.strokeStyle&&e.context2d.stroke(e.paths2d)}drawCoordinates(t,e){var i=e.vectorTileFeature.coordinates;e.paths2d=new Path2D;for(var r=0,s=i.length;r<s;r++){var a=i[r];let s=new Path2D;for(var n=0,o=a.length;n<o;n++){var h=this.getPoint(a[n],t,e.divisor);0==n?s.moveTo(h.x,h.y):s.lineTo(h.x,h.y)}e.paths2d.addPath(s)}}getPaths(t){for(var e=[],i=this.tiles[t.id],r=i.vectorTileFeature.coordinates,s=0,a=r.length;s<a;s++){for(var n=[],o=r[s],h=0,l=o.length;h<l;h++){var u=this.getPoint(o[h],t,i.divisor);n.push(u)}n.length>0&&e.push(n)}return e}getContext2d(t,e){var i=t.getContext("2d");for(var r in e)"selected"!==r&&(i[r]=e[r]);return i}getPoint(t,e,i){var r={x:t.x/i,y:t.y/i};return e.parentId&&(r=this._getOverzoomedPoint(r,e)),r}_getOverzoomedPoint(t,e){var i=this.mVTSource.getTileObject(e.parentId),r=this.mVTSource.getTileObject(e.id),s=r.zoom-i.zoom;const a=Math.pow(2,s);let n=t.x*a,o=t.y*a,h=r.x%a,l=r.y%a;return t.x=n-h*e.tileSize,t.y=o-l*e.tileSize,t}isPointInPath(t,e){var i=this.getTile(e),r=i.context2d,s=i.paths2d;return!(!r||!s)&&r.isPointInPath(s,t.x,t.y)}}class e{constructor(t){this._lineClickTolerance=2,this._getIDForLayerFeature=t.getIDForLayerFeature,this.style=t.style,this.name=t.name,this._filter=t.filter||!1,this._customDraw=t.customDraw||!1,this._canvasAndMVTFeatures=[],this._mVTFeatures=[]}parseVectorTileFeatures(t,e,i){this._canvasAndMVTFeatures[i.id]={canvas:i.canvas,features:[]};for(var r=0,s=e.length;r<s;r++){var a=e[r];this._parseVectorTileFeature(t,a,i,r)}this.drawTile(i)}_parseVectorTileFeature(e,i,r,s){if(!this._filter||"function"!=typeof this._filter||!1!==this._filter(i,r)){var a=this.getStyle(i),n=this._getIDForLayerFeature(i)||s,o=this._mVTFeatures[n];if(o)o.setStyle(a),o.addTileFeature(i,r);else{var h=e.isFeatureSelected(n),l={mVTSource:e,vectorTileFeature:i,tileContext:r,style:a,selected:h,featureId:n,customDraw:this._customDraw};o=new t(l),this._mVTFeatures[n]=o}this._canvasAndMVTFeatures[r.id].features.push(o)}}drawTile(t){var e=this._canvasAndMVTFeatures[t.id].features;if(e){for(var i=[],r=0,s=e.length;r<s;r++){var a=e[r];a.selected?i.push(a):a.draw(t)}for(r=0,s=i.length;r<s;r++)i[r].draw(t)}}getCanvas(t){return this._canvasAndMVTFeatures[t].canvas}getStyle(t){return"function"==typeof this.style?this.style(t):this.style}setStyle(t){for(var e in this.style=t,this._mVTFeatures)this._mVTFeatures[e].setStyle(t)}setSelected(t){void 0!==this._mVTFeatures[t]&&this._mVTFeatures[t].select()}setFilter(t){this._filter=t}handleClickEvent(t,e){var i=this._canvasAndMVTFeatures[t.tileContext.id];if(!i)return t;var r=i.canvas,s=i.features;return r&&s?(t.feature=this._handleClickEvent(t,s,e),t):t}_handleClickEvent(t,e,i){this.selectedFeature=null;var r=t.tileContext.id,s=i.getSelectedFeaturesInTile(r);return this._handleClickFeatures(t,s),null!=this.selectedFeature||(this._handleClickFeatures(t,e),this.selectedFeature),this.selectedFeature}_handleClickFeatures(t,e){this.minDistance=Number.POSITIVE_INFINITY;for(var i=e.length-1;i>=0;i--){var r=e[i];if(this._handleClickFeature(t,r),null!=this.selectedFeature)return this.selectedFeature}}_handleClickFeature(t,e){3===e.type?this._handleClickFeaturePolygon(t,e):this._handleClickFeatureDefault(t,e)}_handleClickFeaturePolygon(t,e){e.isPointInPath(t.tilePoint,t.tileContext)&&(this.selectedFeature=e,this.minDistance=0)}_handleClickFeatureDefault(t,e){for(var i=e.getPaths(t.tileContext),r=i.length-1;r>=0;r--){var s=i[r];switch(e.type){case 1:MERCATOR.in_circle(s[0].x,s[0].y,e.style.radius,t.tilePoint.x,t.tilePoint.y)&&(this.selectedFeature=e,this.minDistance=0);break;case 2:var a=MERCATOR.getDistanceFromLine(t.tilePoint,s);a<(e.selected&&e.style.selected?e.style.selected.lineWidth:e.style.lineWidth)/2+this._lineClickTolerance&&a<this.minDistance&&(this.selectedFeature=e,this.minDistance=a)}if(0==this.minDistance)return this.selectedFeature}}}var s=i(527),a=i.n(s);const n={fromLatLngToPoint:function(t){var e=Math.min(Math.max(Math.sin(t.lat()*(Math.PI/180)),-.9999),.9999);return{x:128+t.lng()*(256/360),y:128+.5*Math.log((1+e)/(1-e))*(-256/(2*Math.PI))}},fromPointToLatLng:function(t){return{lat:(2*Math.atan(Math.exp((t.y-128)/(-256/(2*Math.PI))))-Math.PI/2)/(Math.PI/180),lng:(t.x-128)/(256/360)}},getTileAtLatLng:function(t,e){var i=256/Math.pow(2,e),r=this.fromLatLngToPoint(t);return{x:Math.floor(r.x/i),y:Math.floor(r.y/i),z:e}},getTileBounds:function(t){t=this.normalizeTile(t);var e=256/Math.pow(2,t.z),i={x:t.x*e,y:t.y*e+e},r={x:t.x*e+e,y:t.y*e};return{sw:this.fromPointToLatLng(i),ne:this.fromPointToLatLng(r)}},normalizeTile:function(t){var e=Math.pow(2,t.z);return t.x=(t.x%e+e)%e,t.y=(t.y%e+e)%e,t},fromLatLngToPixels:function(t,e){var i=t.getBounds(),r=i.getNorthEast(),s=i.getSouthWest(),a=t.getProjection().fromLatLngToPoint(r),n=t.getProjection().fromLatLngToPoint(s),o=Math.pow(2,t.getZoom()),h=t.getProjection().fromLatLngToPoint(e);return{x:(h.x-n.x)*o,y:(h.y-a.y)*o}},fromLatLngToTilePoint:function(t,e){var i=t.getZoom(),r=this.getTileAtLatLng(e.latLng,i),s=this.getTileBounds(r),a=new google.maps.LatLng(s.sw),n=new google.maps.LatLng(s.ne),o=this.fromLatLngToPixels(t,a),h=this.fromLatLngToPixels(t,n);return{x:e.pixel.x-o.x,y:e.pixel.y-h.y}},isPointInPolygon:function(t,e){if(e&&e.length){for(var i=!1,r=-1,s=e.length,a=s-1;++r<s;a=r)(e[r].y<=t.y&&t.y<e[a].y||e[a].y<=t.y&&t.y<e[r].y)&&t.x<(e[a].x-e[r].x)*(t.y-e[r].y)/(e[a].y-e[r].y)+e[r].x&&(i=!i);return i}},in_circle:function(t,e,i,r,s){return Math.pow(t-r,2)+Math.pow(e-s,2)<=Math.pow(i,2)},getDistanceFromLine:function(t,e){var i=Number.POSITIVE_INFINITY;if(e&&e.length>1)for(var r=0,s=e.length-1;r<s;r++){var a=this.projectPointOnLineSegment(t,e[r],e[r+1]);a<=i&&(i=a)}return i},projectPointOnLineSegment:function(t,e,i){var r,s,a=t.x,n=t.y,o=e.x,h=e.y,l=i.x,u=i.y,c=l-o,d=u-h,f=c*c+d*d,p=-1;0!=f&&(p=((a-o)*c+(n-h)*d)/f),p<0?(r=o,s=h):p>1?(r=l,s=u):(r=o+p*c,s=h+p*d);var v=a-r,y=n-s;return Math.sqrt(v*v+y*y)}};function o(t,e){this.x=t,this.y=e}function h(t,e,i,r,s){for(this.properties={},this.extent=i,this.type=0,this._buffer=t,this._geometry=-1,e=e||t.length;t.pos<e;){var a=t.readVarint(),n=a>>3;if(1==n)this._id=t.readVarint();else if(2==n)for(var o=t.readVarint(),h=t.pos+o;t.pos<h;){var l=r[t.readVarint()],u=s[t.readVarint()];this.properties[l]=u}else 3==n?this.type=t.readVarint():4==n?(this._geometry=t.pos,t.skip(a)):t.skip(a)}}function l(t,e){var i,r;for(this.version=1,this.name=null,this.extent=4096,this.length=0,this._buffer=t,this._keys=[],this._values=[],this._features=[],e=e||t.length;t.pos<e;)15==(r=(i=t.readVarint())>>3)?this.version=t.readVarint():1===r?this.name=t.readString():5===r?this.extent=t.readVarint():2===r?(this.length++,this._features.push(t.pos),t.skip(i)):3===r?this._keys.push(t.readString()):4===r?this._values.push(this.readFeatureValue()):t.skip(i)}function u(t,e){for(this.layers={},this._buffer=t,e=e||t.length;t.pos<e;){var i=t.readVarint();if(3==i>>3){var r=this._readLayer();r.length&&(this.layers[r.name]=r)}else t.skip(i)}this.parseGeometries()}o.prototype={clone:function(){return new o(this.x,this.y)},add:function(t){return this.clone()._add(t)},sub:function(t){return this.clone()._sub(t)},mult:function(t){return this.clone()._mult(t)},div:function(t){return this.clone()._div(t)},rotate:function(t){return this.clone()._rotate(t)},matMult:function(t){return this.clone()._matMult(t)},unit:function(){return this.clone()._unit()},perp:function(){return this.clone()._perp()},round:function(){return this.clone()._round()},mag:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},equals:function(t){return this.x===t.x&&this.y===t.y},dist:function(t){return Math.sqrt(this.distSqr(t))},distSqr:function(t){var e=t.x-this.x,i=t.y-this.y;return e*e+i*i},angle:function(){return Math.atan2(this.y,this.x)},angleTo:function(t){return Math.atan2(this.y-t.y,this.x-t.x)},angleWith:function(t){return this.angleWithSep(t.x,t.y)},angleWithSep:function(t,e){return Math.atan2(this.x*e-this.y*t,this.x*t+this.y*e)},_matMult:function(t){var e=t[0]*this.x+t[1]*this.y,i=t[2]*this.x+t[3]*this.y;return this.x=e,this.y=i,this},_add:function(t){return this.x+=t.x,this.y+=t.y,this},_sub:function(t){return this.x-=t.x,this.y-=t.y,this},_mult:function(t){return this.x*=t,this.y*=t,this},_div:function(t){return this.x/=t,this.y/=t,this},_unit:function(){return this._div(this.mag()),this},_perp:function(){var t=this.y;return this.y=this.x,this.x=-t,this},_rotate:function(t){var e=Math.cos(t),i=Math.sin(t),r=e*this.x-i*this.y,s=i*this.x+e*this.y;return this.x=r,this.y=s,this},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}},o.convert=function(t){return t instanceof o?t:Array.isArray(t)?new o(t[0],t[1]):t},h.types=["Unknown","Point","LineString","Polygon"],h.prototype.loadGeometry=function(){var t=this._buffer;t.pos=this._geometry;for(var e,i=t.readVarint(),r=t.pos+i,s=1,a=0,n=0,h=0,l=[];t.pos<r;){if(!a){var u=t.readVarint();s=7&u,a=u>>3}if(a--,1===s||2===s)n+=t.readSVarint(),h+=t.readSVarint(),1===s&&(e&&l.push(e),e=[]),e.push(new o(n,h));else{if(7!==s)throw new Error("unknown command "+s);e.push(e[0].clone())}}return e&&l.push(e),l},h.prototype.bbox=function(){var t=this._buffer;t.pos=this._geometry;for(var e=t.readVarint(),i=t.pos+e,r=1,s=0,a=0,n=0,o=1/0,h=-1/0,l=1/0,u=-1/0;t.pos<i;){if(!s){var c=t.readVarint();r=7&c,s=c>>3}if(s--,1===r||2===r)(a+=t.readSVarint())<o&&(o=a),a>h&&(h=a),(n+=t.readSVarint())<l&&(l=n),n>u&&(u=n);else if(7!==r)throw new Error("unknown command "+r)}return[o,l,h,u]},l.prototype.readFeatureValue=function(){for(var t,e,i=this._buffer,r=null,s=i.readVarint(),a=i.pos+s;i.pos<a;)1==(e=(t=i.readVarint())>>3)?r=i.readString():2==e?r=i.readFloat():3==e?r=i.readDouble():4==e||5==e?r=i.readVarint():6==e?r=i.readSVarint():7==e?r=Boolean(i.readVarint()):i.skip(t);return r},l.prototype.feature=function(t){if(t<0||t>=this._features.length)throw new Error("feature index out of bounds");this._buffer.pos=this._features[t];var e=this._buffer.readVarint()+this._buffer.pos;return new h(this._buffer,e,this.extent,this._keys,this._values)},u.prototype._readLayer=function(){var t=this._buffer,e=t.readVarint(),i=t.pos+e,r=new l(t,i);return t.pos=i,r},u.prototype.parseGeometries=function(){for(var t in this.layers){var e=this.layers[t];e.parsedFeatures=[];for(var i=0,r=e._features.length;i<r;i++){var s=e.feature(i);s.coordinates=s.loadGeometry(),e.parsedFeatures.push(s)}}};class c{constructor(t,e){var i=this;this.id=e.id,this.map=t,this._url=e.url||"",this._sourceMaxZoom=e.sourceMaxZoom||!1,this._debug=e.debug||!1,this.getIDForLayerFeature=e.getIDForLayerFeature||function(t){return t.properties.id||t.properties.Id||t.properties.ID},this._visibleLayers=e.visibleLayers||!1,this._xhrHeaders=e.xhrHeaders||{},this._clickableLayers=e.clickableLayers||!1,this._filter=e.filter||!1,this._cache=e.cache||!1,this._tileSize=e.tileSize||256,this.tileSize=new google.maps.Size(this._tileSize,this._tileSize),this.style=e.style||function(t){var e={};switch(t.type){case 1:e.fillStyle="rgba(49,79,79,1)",e.radius=5,e.selected={fillStyle:"rgba(255,255,0,0.5)",radius:6};break;case 2:e.strokeStyle="rgba(136, 86, 167, 1)",e.lineWidth=3,e.selected={strokeStyle:"rgba(255,25,0,0.5)",lineWidth:4};break;case 3:e.fillStyle="rgba(188, 189, 220, 0.5)",e.strokeStyle="rgba(136, 86, 167, 1)",e.lineWidth=1,e.selected={fillStyle:"rgba(255,140,0,0.3)",strokeStyle:"rgba(255,140,0,1)",lineWidth:2}}return e},this._customDraw=e.customDraw||!1,this.mVTLayers=[],this._tilesDrawn=[],this._visibleTiles=[],this._selectedFeatures=[],e.selectedFeatures&&this.setSelectedFeatures(e.selectedFeatures),this.map.addListener("zoom_changed",(()=>{i._zoomChanged()}))}getTile(t,e,i){var r=this.drawTile(t,e,i);return this._setVisibleTile(r),r.canvas}releaseTile(t){}_zoomChanged(){this._resetVisibleTiles(),this._cache||this._resetMVTLayers()}_resetMVTLayers(){this.mVTLayers=[]}_deleteVisibleTile(t){delete this._visibleTiles[t]}_resetVisibleTiles(){this._visibleTiles=[]}_setVisibleTile(t){this._visibleTiles[t.id]=t}drawTile(t,e,i){var r=this.getTileId(e,t.x,t.y),s=this._tilesDrawn[r];return s||(s=this._createTileContext(t,e,i),this._xhrRequest(s),s)}_createTileContext(t,e,i){var r=this.getTileId(e,t.x,t.y),s=this._createCanvas(i,r),a=this._getParentId(r);return{id:r,canvas:s,zoom:e,tileSize:this._tileSize,parentId:a}}_getParentId(t){var e=!1;if(this._sourceMaxZoom){var i=this.getTileObject(t);if(i.zoom>this._sourceMaxZoom){var r=i.zoom-this._sourceMaxZoom,s=i.zoom-r,a=i.x>>r,n=i.y>>r;e=this.getTileId(s,a,n)}}return e}_createCanvas(t,e){const i=t.createElement("canvas");return i.width=this._tileSize,i.height=this._tileSize,i.id=e,i}getTileId(t,e,i){return[t,e,i].join(":")}getTileObject(t){var e=t.split(":");return{zoom:e[0],x:e[1],y:e[2]}}_xhrRequest(t){var e=this,i=t.parentId||t.id,r=this.getTileObject(i),s=this._url.replace("{z}",r.zoom).replace("{x}",r.x).replace("{y}",r.y),a=new XMLHttpRequest;for(var n in a.onload=function(){if("200"==a.status&&a.response)return e._xhrResponseOk(t,a.response);e._drawDebugInfo(t)},a.open("GET",s,!0),this._xhrHeaders)a.setRequestHeader(n,this._xhrHeaders[n]);a.responseType="arraybuffer",a.send()}_xhrResponseOk(t,e){if(this.map.getZoom()==t.zoom){var i=new Uint8Array(e),r=new u(new(a())(i));this._drawVectorTile(r,t)}}_setTileDrawn(t){this._cache&&(this._tilesDrawn[t.id]=t)}deleteTileDrawn(t){delete this._tilesDrawn[t]}_resetTileDrawn(){this._tilesDrawn=[]}_drawVectorTile(t,e){if(this._visibleLayers)for(var i=0,r=this._visibleLayers.length;i<r;i++){var s=this._visibleLayers[i];if(t.layers[s]){var a=t.layers[s];this._drawVectorTileLayer(a,s,e)}}else for(var s in t.layers)a=t.layers[s],this._drawVectorTileLayer(a,s,e);e.vectorTile=t,this._drawDebugInfo(e),this._setTileDrawn(e)}_drawVectorTileLayer(t,e,i){this.mVTLayers[e]||(this.mVTLayers[e]=this._createMVTLayer(e)),this.mVTLayers[e].parseVectorTileFeatures(this,t.parsedFeatures,i)}_createMVTLayer(t){var i={getIDForLayerFeature:this.getIDForLayerFeature,filter:this._filter,style:this.style,name:t,customDraw:this._customDraw};return new e(i)}_drawDebugInfo(t){if(this._debug){var e=this.getTileObject(t.id),i=this._tileSize,r=this._tileSize,s=t.canvas.getContext("2d");s.strokeStyle="#000000",s.fillStyle="#FFFF00",s.strokeRect(0,0,i,r),s.font="12px Arial",s.fillRect(0,0,5,5),s.fillRect(0,r-5,5,5),s.fillRect(i-5,0,5,5),s.fillRect(i-5,r-5,5,5),s.fillRect(i/2-5,r/2-5,10,10),s.strokeText(t.zoom+" "+e.x+" "+e.y,i/2-30,r/2-10)}}onClick(t,e,i){this._multipleSelection=i&&i.multipleSelection||!1,i=this._getMouseOptions(i,!1),this._mouseEvent(t,e,i)}onMouseHover(t,e,i){this._multipleSelection=!1,i=this._getMouseOptions(i,!0),this._mouseEvent(t,e,i)}_getMouseOptions(t,e){return{mouseHover:e,setSelected:t.setSelected||!1,toggleSelection:void 0===t.toggleSelection||t.toggleSelection,limitToFirstVisibleLayer:t.limitToFirstVisibleLayer||!1,delay:t.delay||0}}_mouseEvent(t,e,i){if(t.pixel&&t.latLng){if(0==i.delay)return this._mouseEventContinue(t,e,i);this.event=t;var r=this;setTimeout((function(){t==r.event&&r._mouseEventContinue(r.event,e,i)}),i.delay,t)}}_mouseEventContinue(t,e,i){e=e||function(){};var r=i.limitToFirstVisibleLayer||!1,s=this.map.getZoom(),a=n.getTileAtLatLng(t.latLng,s),o=this.getTileId(a.z,a.x,a.y),h=this._visibleTiles[o];if(h){t.tileContext=h,t.tilePoint=n.fromLatLngToTilePoint(this.map,t);for(var l=this._clickableLayers||Object.keys(this.mVTLayers)||[],u=l.length-1;u>=0;u--){var c=l[u],d=this.mVTLayers[c];if(d&&(t=d.handleClickEvent(t,this),this._mouseSelectedFeature(t,e,i),r&&t.feature))break}}}_mouseSelectedFeature(t,e,i){if(i.setSelected){var r=t.feature;r?i.mouseHover?r.selected||r.select():i.toggleSelection?r.toggle():r.selected||r.select():i.mouseHover&&this.deselectAllFeatures()}e(t)}deselectAllFeatures(){var t=this.map.getZoom(),e=[];for(var i in this._selectedFeatures){var r=this._selectedFeatures[i];if(r){r.setSelected(!1);var s=r.getTiles();for(var a in s)this.deleteTileDrawn(a),this.getTileObject(a).zoom==t&&(e[a]=!0)}}this.redrawTiles(e),this._selectedFeatures=[]}featureSelected(t){this._multipleSelection||this.deselectAllFeatures(),this._selectedFeatures[t.featureId]=t}featureDeselected(t){delete this._selectedFeatures[t.featureId]}setSelectedFeatures(t){t.length>1&&(this._multipleSelection=!0),this.deselectAllFeatures();for(var e=0,i=t.length;e<i;e++){var r=t[e];for(var s in this._selectedFeatures[r]=!1,this.mVTLayers)this.mVTLayers[s].setSelected(r)}}isFeatureSelected(t){return null!=this._selectedFeatures[t]}getSelectedFeatures(){var t=[];for(var e in this._selectedFeatures)t.push(this._selectedFeatures[e]);return t}getSelectedFeaturesInTile(t){var e=[];for(var i in this._selectedFeatures){var r=this._selectedFeatures[i];for(var s in r.tiles)s==t&&e.push(r)}return e}setFilter(t,e){for(var i in e=void 0===e||e,this._filter=t,this.mVTLayers)this.mVTLayers[i].setFilter(t);e&&this.redrawAllTiles()}setStyle(t,e){for(var i in e=void 0===e||e,this.style=t,this.mVTLayers)this.mVTLayers[i].setStyle(t);e&&this.redrawAllTiles()}setVisibleLayers(t,e){e=void 0===e||e,this._visibleLayers=t,e&&this.redrawAllTiles()}getVisibleLayers(){return this._visibleLayers}setClickableLayers(t){this._clickableLayers=t}redrawAllTiles(){this._resetTileDrawn(),this.redrawTiles(this._visibleTiles)}redrawTiles(t){for(var e in t)this.redrawTile(e)}redrawTile(t){this.deleteTileDrawn(t);var e=this._visibleTiles[t];e&&e.vectorTile&&(this.clearTile(e.canvas),this._drawVectorTile(e.vectorTile,e))}clearTile(t){t.getContext("2d").clearRect(0,0,t.width,t.height)}setUrl(t,e){e=void 0===e||e,this._url=t,this._resetMVTLayers(),e&&this.redrawAllTiles()}}})(),r})()));