diff --git a/MMM-RAIN-MAP.js b/MMM-RAIN-MAP.js index 87d9960..d859408 100644 --- a/MMM-RAIN-MAP.js +++ b/MMM-RAIN-MAP.js @@ -1,6 +1,6 @@ /*! ***************************************************************************** mmm-rain-map - Version 2.6.2 + Version 2.7.0 A Rain Radar Map based on the Rainviewer API for the MagicMirror² platform. Please submit bugs at https://github.com/jalibu/MMM-RAIN-MAP/issues @@ -25,4 +25,4 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - ***************************************************************************** */function n(t,i,e,n){return new(e||(e=Promise))((function(o,s){function a(t){try{h(n.next(t))}catch(t){s(t)}}function r(t){try{h(n.throw(t))}catch(t){s(t)}}function h(t){var i;t.done?o(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(a,r)}h((n=n.apply(t,i||[])).next())}))}"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var o={exports:{}};(function(t){var i="1.7.1";function e(t){var i,e,n,o;for(e=1,n=arguments.length;e0?Math.floor(t):Math.ceil(t)};function B(t,i,e){return t instanceof A?t:g(t)?new A(t[0],t[1]):null==t?t:"object"==typeof t&&"x"in t&&"y"in t?new A(t.x,t.y):new A(t,i,e)}function D(t,i){if(t)for(var e=i?[t,i]:t,n=0,o=e.length;n=this.min.x&&e.x<=this.max.x&&i.y>=this.min.y&&e.y<=this.max.y},intersects:function(t){t=O(t);var i=this.min,e=this.max,n=t.min,o=t.max,s=o.x>=i.x&&n.x<=e.x,a=o.y>=i.y&&n.y<=e.y;return s&&a},overlaps:function(t){t=O(t);var i=this.min,e=this.max,n=t.min,o=t.max,s=o.x>i.x&&n.xi.y&&n.y=n.lat&&e.lat<=o.lat&&i.lng>=n.lng&&e.lng<=o.lng},intersects:function(t){t=N(t);var i=this._southWest,e=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),s=o.lat>=i.lat&&n.lat<=e.lat,a=o.lng>=i.lng&&n.lng<=e.lng;return s&&a},overlaps:function(t){t=N(t);var i=this._southWest,e=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),s=o.lat>i.lat&&n.lati.lng&&n.lng1,Ct=function(){var t=!1;try{var i=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("testPassiveEventSupport",l,i),window.removeEventListener("testPassiveEventSupport",l,i)}catch(t){}return t}(),St=!!document.createElement("canvas").getContext,Et=!(!document.createElementNS||!X("svg").createSVGRect),kt=!Et&&function(){try{var t=document.createElement("div");t.innerHTML='';var i=t.firstChild;return i.style.behavior="url(#default#VML)",i&&"object"==typeof i.adj}catch(t){return!1}}();function Zt(t){return navigator.userAgent.toLowerCase().indexOf(t)>=0}var At={ie:tt,ielt9:it,edge:et,webkit:nt,android:ot,android23:st,androidStock:rt,opera:ht,chrome:lt,gecko:ut,safari:ct,phantom:dt,opera12:_t,win:pt,ie3d:mt,webkit3d:ft,gecko3d:gt,any3d:vt,mobile:yt,mobileWebkit:xt,mobileWebkit3d:wt,msPointer:Pt,pointer:Lt,touch:bt,mobileOpera:Tt,mobileGecko:Mt,retina:zt,passiveEvents:Ct,canvas:St,svg:Et,vml:kt},It=Pt?"MSPointerDown":"pointerdown",Bt=Pt?"MSPointerMove":"pointermove",Dt=Pt?"MSPointerUp":"pointerup",Ot=Pt?"MSPointerCancel":"pointercancel",Rt={},Nt=!1;function jt(t,i,e,n){return"touchstart"===i?Ht(t,e,n):"touchmove"===i?Gt(t,e,n):"touchend"===i&&Kt(t,e,n),this}function Ft(t,i,e){var n=t["_leaflet_"+i+e];return"touchstart"===i?t.removeEventListener(It,n,!1):"touchmove"===i?t.removeEventListener(Bt,n,!1):"touchend"===i&&(t.removeEventListener(Dt,n,!1),t.removeEventListener(Ot,n,!1)),this}function Ht(t,i,e){var n=o((function(t){t.MSPOINTER_TYPE_TOUCH&&t.pointerType===t.MSPOINTER_TYPE_TOUCH&&Ui(t),qt(t,i)}));t["_leaflet_touchstart"+e]=n,t.addEventListener(It,n,!1),Nt||(document.addEventListener(It,Wt,!0),document.addEventListener(Bt,Ut,!0),document.addEventListener(Dt,Vt,!0),document.addEventListener(Ot,Vt,!0),Nt=!0)}function Wt(t){Rt[t.pointerId]=t}function Ut(t){Rt[t.pointerId]&&(Rt[t.pointerId]=t)}function Vt(t){delete Rt[t.pointerId]}function qt(t,i){for(var e in t.touches=[],Rt)t.touches.push(Rt[e]);t.changedTouches=[t],i(t)}function Gt(t,i,e){var n=function(t){t.pointerType===(t.MSPOINTER_TYPE_MOUSE||"mouse")&&0===t.buttons||qt(t,i)};t["_leaflet_touchmove"+e]=n,t.addEventListener(Bt,n,!1)}function Kt(t,i,e){var n=function(t){qt(t,i)};t["_leaflet_touchend"+e]=n,t.addEventListener(Dt,n,!1),t.addEventListener(Ot,n,!1)}var Yt=Pt?"MSPointerDown":Lt?"pointerdown":"touchstart",Jt=Pt?"MSPointerUp":Lt?"pointerup":"touchend",Xt="_leaflet_";function $t(t,i,e){var n,o,s=!1,a=250;function r(t){if(Lt){if(!t.isPrimary)return;if("mouse"===t.pointerType)return}else if(t.touches.length>1)return;var i=Date.now(),e=i-(n||i);o=t.touches?t.touches[0]:t,s=e>0&&e<=a,n=i}function h(t){if(s&&!o.cancelBubble){if(Lt){if("mouse"===t.pointerType)return;var e,a,r={};for(a in o)e=o[a],r[a]=e&&e.bind?e.bind(o):e;o=r}o.type="dblclick",o.button=0,i(o),n=null}}return t[Xt+Yt+e]=r,t[Xt+Jt+e]=h,t[Xt+"dblclick"+e]=i,t.addEventListener(Yt,r,!!Ct&&{passive:!1}),t.addEventListener(Jt,h,!!Ct&&{passive:!1}),t.addEventListener("dblclick",i,!1),this}function Qt(t,i){var e=t[Xt+Yt+i],n=t[Xt+Jt+i],o=t[Xt+"dblclick"+i];return t.removeEventListener(Yt,e,!!Ct&&{passive:!1}),t.removeEventListener(Jt,n,!!Ct&&{passive:!1}),t.removeEventListener("dblclick",o,!1),this}var ti,ii,ei,ni,oi,si=Pi(["transform","webkitTransform","OTransform","MozTransform","msTransform"]),ai=Pi(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),ri="webkitTransition"===ai||"OTransition"===ai?ai+"End":"transitionend";function hi(t){return"string"==typeof t?document.getElementById(t):t}function li(t,i){var e=t.style[i]||t.currentStyle&&t.currentStyle[i];if((!e||"auto"===e)&&document.defaultView){var n=document.defaultView.getComputedStyle(t,null);e=n?n[i]:null}return"auto"===e?null:e}function ui(t,i,e){var n=document.createElement(t);return n.className=i||"",e&&e.appendChild(n),n}function ci(t){var i=t.parentNode;i&&i.removeChild(t)}function di(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function _i(t){var i=t.parentNode;i&&i.lastChild!==t&&i.appendChild(t)}function pi(t){var i=t.parentNode;i&&i.firstChild!==t&&i.insertBefore(t,i.firstChild)}function mi(t,i){if(void 0!==t.classList)return t.classList.contains(i);var e=yi(t);return e.length>0&&new RegExp("(^|\\s)"+i+"(\\s|$)").test(e)}function fi(t,i){if(void 0!==t.classList)for(var e=d(i),n=0,o=e.length;nthis.options.maxZoom)?this.setZoom(t):this},panInsideBounds:function(t,i){this._enforcingBounds=!0;var e=this.getCenter(),n=this._limitCenter(e,this._zoom,N(t));return e.equals(n)||this.panTo(n,i),this._enforcingBounds=!1,this},panInside:function(t,i){var e=B((i=i||{}).paddingTopLeft||i.padding||[0,0]),n=B(i.paddingBottomRight||i.padding||[0,0]),o=this.getCenter(),s=this.project(o),a=this.project(t),r=this.getPixelBounds(),h=r.getSize().divideBy(2),l=O([r.min.add(e),r.max.subtract(n)]);if(!l.contains(a)){this._enforcingBounds=!0;var u=s.subtract(a),c=B(a.x+u.x,a.y+u.y);(a.xl.max.x)&&(c.x=s.x-u.x,u.x>0?c.x+=h.x-e.x:c.x-=h.x-n.x),(a.yl.max.y)&&(c.y=s.y-u.y,u.y>0?c.y+=h.y-e.y:c.y-=h.y-n.y),this.panTo(this.unproject(c),i),this._enforcingBounds=!1}return this},invalidateSize:function(t){if(!this._loaded)return this;t=e({animate:!1,pan:!0},!0===t?{animate:!0}:t);var i=this.getSize();this._sizeChanged=!0,this._lastCenter=null;var n=this.getSize(),s=i.divideBy(2).round(),a=n.divideBy(2).round(),r=s.subtract(a);return r.x||r.y?(t.animate&&t.pan?this.panBy(r):(t.pan&&this._rawPanBy(r),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(o(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:i,newSize:n})):this},stop:function(){return this.setZoom(this._limitZoom(this._zoom)),this.options.zoomSnap||this.fire("viewreset"),this._stop()},locate:function(t){if(t=this._locateOptions=e({timeout:1e4,watch:!1},t),!("geolocation"in navigator))return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var i=o(this._handleGeolocationResponse,this),n=o(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(i,n,t):navigator.geolocation.getCurrentPosition(i,n,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){var i=t.code,e=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+e+"."})},_handleGeolocationResponse:function(t){var i=new j(t.coords.latitude,t.coords.longitude),e=i.toBounds(2*t.coords.accuracy),n=this._locateOptions;if(n.setView){var o=this.getBoundsZoom(e);this.setView(i,n.maxZoom?Math.min(o,n.maxZoom):o)}var s={latlng:i,bounds:e,timestamp:t.timestamp};for(var a in t.coords)"number"==typeof t.coords[a]&&(s[a]=t.coords[a]);this.fire("locationfound",s)},addHandler:function(t,i){if(!i)return this;var e=this[t]=new i(this);return this._handlers.push(e),this.options[t]&&e.enable(),this},remove:function(){if(this._initEvents(!0),this.off("moveend",this._panInsideMaxBounds),this._containerId!==this._container._leaflet_id)throw new Error("Map container is being reused by another instance");try{delete this._container._leaflet_id,delete this._containerId}catch(t){this._container._leaflet_id=void 0,this._containerId=void 0}var t;for(t in void 0!==this._locationWatchId&&this.stopLocate(),this._stop(),ci(this._mapPane),this._clearControlPos&&this._clearControlPos(),this._resizeRequest&&(z(this._resizeRequest),this._resizeRequest=null),this._clearHandlers(),this._loaded&&this.fire("unload"),this._layers)this._layers[t].remove();for(t in this._panes)ci(this._panes[t]);return this._layers=[],this._panes=[],delete this._mapPane,delete this._renderer,this},createPane:function(t,i){var e=ui("div","leaflet-pane"+(t?" leaflet-"+t.replace("Pane","")+"-pane":""),i||this._mapPane);return t&&(this._panes[t]=e),e},getCenter:function(){return this._checkIfLoaded(),this._lastCenter&&!this._moved()?this._lastCenter:this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds();return new R(this.unproject(t.getBottomLeft()),this.unproject(t.getTopRight()))},getMinZoom:function(){return void 0===this.options.minZoom?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return void 0===this.options.maxZoom?void 0===this._layersMaxZoom?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,i,e){t=N(t),e=B(e||[0,0]);var n=this.getZoom()||0,o=this.getMinZoom(),s=this.getMaxZoom(),a=t.getNorthWest(),r=t.getSouthEast(),h=this.getSize().subtract(e),l=O(this.project(r,n),this.project(a,n)).getSize(),u=vt?this.options.zoomSnap:1,c=h.x/l.x,d=h.y/l.y,_=i?Math.max(c,d):Math.min(c,d);return n=this.getScaleZoom(_,n),u&&(n=Math.round(n/(u/100))*(u/100),n=i?Math.ceil(n/u)*u:Math.floor(n/u)*u),Math.max(o,Math.min(s,n))},getSize:function(){return this._size&&!this._sizeChanged||(this._size=new A(this._container.clientWidth||0,this._container.clientHeight||0),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(t,i){var e=this._getTopLeftPoint(t,i);return new D(e,e.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._pixelOrigin},getPixelWorldBounds:function(t){return this.options.crs.getProjectedBounds(void 0===t?this.getZoom():t)},getPane:function(t){return"string"==typeof t?this._panes[t]:t},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t,i){var e=this.options.crs;return i=void 0===i?this._zoom:i,e.scale(t)/e.scale(i)},getScaleZoom:function(t,i){var e=this.options.crs;i=void 0===i?this._zoom:i;var n=e.zoom(t*e.scale(i));return isNaN(n)?1/0:n},project:function(t,i){return i=void 0===i?this._zoom:i,this.options.crs.latLngToPoint(F(t),i)},unproject:function(t,i){return i=void 0===i?this._zoom:i,this.options.crs.pointToLatLng(B(t),i)},layerPointToLatLng:function(t){var i=B(t).add(this.getPixelOrigin());return this.unproject(i)},latLngToLayerPoint:function(t){return this.project(F(t))._round()._subtract(this.getPixelOrigin())},wrapLatLng:function(t){return this.options.crs.wrapLatLng(F(t))},wrapLatLngBounds:function(t){return this.options.crs.wrapLatLngBounds(N(t))},distance:function(t,i){return this.options.crs.distance(F(t),F(i))},containerPointToLayerPoint:function(t){return B(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return B(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(B(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(F(t)))},mouseEventToContainerPoint:function(t){return qi(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=hi(t);if(!i)throw new Error("Map container not found.");if(i._leaflet_id)throw new Error("Map container is already initialized.");Ii(i,"scroll",this._onScroll,this),this._containerId=a(i)},_initLayout:function(){var t=this._container;this._fadeAnimated=this.options.fadeAnimation&&vt,fi(t,"leaflet-container"+(bt?" leaflet-touch":"")+(zt?" leaflet-retina":"")+(it?" leaflet-oldie":"")+(ct?" leaflet-safari":"")+(this._fadeAnimated?" leaflet-fade-anim":""));var i=li(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._paneRenderers={},this._mapPane=this.createPane("mapPane",this._container),bi(this._mapPane,new A(0,0)),this.createPane("tilePane"),this.createPane("shadowPane"),this.createPane("overlayPane"),this.createPane("markerPane"),this.createPane("tooltipPane"),this.createPane("popupPane"),this.options.markerZoomAnimation||(fi(t.markerPane,"leaflet-zoom-hide"),fi(t.shadowPane,"leaflet-zoom-hide"))},_resetView:function(t,i){bi(this._mapPane,new A(0,0));var e=!this._loaded;this._loaded=!0,i=this._limitZoom(i),this.fire("viewprereset");var n=this._zoom!==i;this._moveStart(n,!1)._move(t,i)._moveEnd(n),this.fire("viewreset"),e&&this.fire("load")},_moveStart:function(t,i){return t&&this.fire("zoomstart"),i||this.fire("movestart"),this},_move:function(t,i,e){void 0===i&&(i=this._zoom);var n=this._zoom!==i;return this._zoom=i,this._lastCenter=t,this._pixelOrigin=this._getNewPixelOrigin(t),(n||e&&e.pinch)&&this.fire("zoom",e),this.fire("move",e)},_moveEnd:function(t){return t&&this.fire("zoomend"),this.fire("moveend")},_stop:function(){return z(this._flyToFrame),this._panAnim&&this._panAnim.stop(),this},_rawPanBy:function(t){bi(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_panInsideMaxBounds:function(){this._enforcingBounds||this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(t){this._targets={},this._targets[a(this._container)]=this;var i=t?Di:Ii;i(this._container,"click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress keydown keyup",this._handleDOMEvent,this),this.options.trackResize&&i(window,"resize",this._onResize,this),vt&&this.options.transform3DLimit&&(t?this.off:this.on).call(this,"moveend",this._onMoveEnd)},_onResize:function(){z(this._resizeRequest),this._resizeRequest=M((function(){this.invalidateSize({debounceMoveend:!0})}),this)},_onScroll:function(){this._container.scrollTop=0,this._container.scrollLeft=0},_onMoveEnd:function(){var t=this._getMapPanePos();Math.max(Math.abs(t.x),Math.abs(t.y))>=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,i){for(var e,n=[],o="mouseout"===i||"mouseover"===i,s=t.target||t.srcElement,r=!1;s;){if((e=this._targets[a(s)])&&("click"===i||"preclick"===i)&&!t._simulated&&this._draggableMoved(e)){r=!0;break}if(e&&e.listens(i,!0)){if(o&&!$i(s,t))break;if(n.push(e),o)break}if(s===this._container)break;s=s.parentNode}return n.length||r||o||!$i(s,t)||(n=[this]),n},_handleDOMEvent:function(t){if(this._loaded&&!Xi(t)){var i=t.type;"mousedown"!==i&&"keypress"!==i&&"keyup"!==i&&"keydown"!==i||Si(t.target||t.srcElement),this._fireDOMEvent(t,i)}},_mouseEvents:["click","dblclick","mouseover","mouseout","contextmenu"],_fireDOMEvent:function(t,i,n){if("click"===t.type){var o=e({},t);o.type="preclick",this._fireDOMEvent(o,o.type,n)}if(!t._stopped&&(n=(n||[]).concat(this._findEventTargets(t,i))).length){var s=n[0];"contextmenu"===i&&s.listens(i,!0)&&Ui(t);var a={originalEvent:t};if("keypress"!==t.type&&"keydown"!==t.type&&"keyup"!==t.type){var r=s.getLatLng&&(!s._radius||s._radius<=10);a.containerPoint=r?this.latLngToContainerPoint(s.getLatLng()):this.mouseEventToContainerPoint(t),a.layerPoint=this.containerPointToLayerPoint(a.containerPoint),a.latlng=r?s.getLatLng():this.layerPointToLatLng(a.layerPoint)}for(var h=0;h0?Math.round(t-i)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(i))},_limitZoom:function(t){var i=this.getMinZoom(),e=this.getMaxZoom(),n=vt?this.options.zoomSnap:1;return n&&(t=Math.round(t/n)*n),Math.max(i,Math.min(e,t))},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){gi(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,i){var e=this._getCenterOffset(t)._trunc();return!(!0!==(i&&i.animate)&&!this.getSize().contains(e)||(this.panBy(e,i),0))},_createAnimProxy:function(){var t=this._proxy=ui("div","leaflet-proxy leaflet-zoom-animated");this._panes.mapPane.appendChild(t),this.on("zoomanim",(function(t){var i=si,e=this._proxy.style[i];Li(this._proxy,this.project(t.center,t.zoom),this.getZoomScale(t.zoom,1)),e===this._proxy.style[i]&&this._animatingZoom&&this._onZoomTransitionEnd()}),this),this.on("load moveend",this._animMoveEnd,this),this._on("unload",this._destroyAnimProxy,this)},_destroyAnimProxy:function(){ci(this._proxy),this.off("load moveend",this._animMoveEnd,this),delete this._proxy},_animMoveEnd:function(){var t=this.getCenter(),i=this.getZoom();Li(this._proxy,this.project(t,i),this.getZoomScale(i,1))},_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf("transform")>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,i,e){if(this._animatingZoom)return!0;if(e=e||{},!this._zoomAnimated||!1===e.animate||this._nothingToAnimate()||Math.abs(i-this._zoom)>this.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/n);return!(!0!==e.animate&&!this.getSize().contains(o)||(M((function(){this._moveStart(!0,!1)._animateZoom(t,i,!0)}),this),0))},_animateZoom:function(t,i,e,n){this._mapPane&&(e&&(this._animatingZoom=!0,this._animateToCenter=t,this._animateToZoom=i,fi(this._mapPane,"leaflet-zoom-anim")),this.fire("zoomanim",{center:t,zoom:i,noUpdate:n}),setTimeout(o(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&&gi(this._mapPane,"leaflet-zoom-anim"),this._animatingZoom=!1,this._move(this._animateToCenter,this._animateToZoom),M((function(){this._moveEnd(!0)}),this))}});function ee(t,i){return new ie(t,i)}var ne=S.extend({options:{position:"topright"},initialize:function(t){_(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this.remove(),this._map=t;var i=this._container=this.onAdd(t),e=this.getPosition(),n=t._controlCorners[e];return fi(i,"leaflet-control"),-1!==e.indexOf("bottom")?n.insertBefore(i,n.firstChild):n.appendChild(i),this._map.on("unload",this.remove,this),this},remove:function(){return this._map?(ci(this._container),this.onRemove&&this.onRemove(this._map),this._map.off("unload",this.remove,this),this._map=null,this):this},_refocusOnMap:function(t){this._map&&t&&t.screenX>0&&t.screenY>0&&this._map.getContainer().focus()}}),oe=function(t){return new ne(t)};ie.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.remove(),this},_initControlPos:function(){var t=this._controlCorners={},i="leaflet-",e=this._controlContainer=ui("div",i+"control-container",this._container);function n(n,o){var s=i+n+" "+i+o;t[n+o]=ui("div",s,e)}n("top","left"),n("top","right"),n("bottom","left"),n("bottom","right")},_clearControlPos:function(){for(var t in this._controlCorners)ci(this._controlCorners[t]);ci(this._controlContainer),delete this._controlCorners,delete this._controlContainer}});var se=ne.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0,hideSingleBase:!1,sortLayers:!1,sortFunction:function(t,i,e,n){return e1,this._baseLayersList.style.display=t?"":"none"),this._separator.style.display=i&&t?"":"none",this},_onLayerChange:function(t){this._handlingClick||this._update();var i=this._getLayer(a(t.target)),e=i.overlay?"add"===t.type?"overlayadd":"overlayremove":"add"===t.type?"baselayerchange":null;e&&this._map.fire(e,i)},_createRadioElement:function(t,i){var e='",n=document.createElement("div");return n.innerHTML=e,n.firstChild},_addItem:function(t){var i,e=document.createElement("label"),n=this._map.hasLayer(t.layer);t.overlay?((i=document.createElement("input")).type="checkbox",i.className="leaflet-control-layers-selector",i.defaultChecked=n):i=this._createRadioElement("leaflet-base-layers_"+a(this),n),this._layerControlInputs.push(i),i.layerId=a(t.layer),Ii(i,"click",this._onInputClick,this);var o=document.createElement("span");o.innerHTML=" "+t.name;var s=document.createElement("div");return e.appendChild(s),s.appendChild(i),s.appendChild(o),(t.overlay?this._overlaysList:this._baseLayersList).appendChild(e),this._checkDisabledLayers(),e},_onInputClick:function(){var t,i,e=this._layerControlInputs,n=[],o=[];this._handlingClick=!0;for(var s=e.length-1;s>=0;s--)t=e[s],i=this._getLayer(t.layerId).layer,t.checked?n.push(i):t.checked||o.push(i);for(s=0;s=0;o--)t=e[o],i=this._getLayer(t.layerId).layer,t.disabled=void 0!==i.options.minZoom&&ni.options.maxZoom},_expandIfNotCollapsed:function(){return this._map&&!this.options.collapsed&&this.expand(),this},_expand:function(){return this.expand()},_collapse:function(){return this.collapse()}}),ae=function(t,i,e){return new se(t,i,e)},re=ne.extend({options:{position:"topleft",zoomInText:"+",zoomInTitle:"Zoom in",zoomOutText:"−",zoomOutTitle:"Zoom out"},onAdd:function(t){var i="leaflet-control-zoom",e=ui("div",i+" leaflet-bar"),n=this.options;return this._zoomInButton=this._createButton(n.zoomInText,n.zoomInTitle,i+"-in",e,this._zoomIn),this._zoomOutButton=this._createButton(n.zoomOutText,n.zoomOutTitle,i+"-out",e,this._zoomOut),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),e},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},disable:function(){return this._disabled=!0,this._updateDisabled(),this},enable:function(){return this._disabled=!1,this._updateDisabled(),this},_zoomIn:function(t){!this._disabled&&this._map._zoomthis._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(t.shiftKey?3:1))},_createButton:function(t,i,e,n,o){var s=ui("a",e,n);return s.innerHTML=t,s.href="#",s.title=i,s.setAttribute("role","button"),s.setAttribute("aria-label",i),Wi(s),Ii(s,"click",Vi),Ii(s,"click",o,this),Ii(s,"click",this._refocusOnMap,this),s},_updateDisabled:function(){var t=this._map,i="leaflet-disabled";gi(this._zoomInButton,i),gi(this._zoomOutButton,i),(this._disabled||t._zoom===t.getMinZoom())&&fi(this._zoomOutButton,i),(this._disabled||t._zoom===t.getMaxZoom())&&fi(this._zoomInButton,i)}});ie.mergeOptions({zoomControl:!0}),ie.addInitHook((function(){this.options.zoomControl&&(this.zoomControl=new re,this.addControl(this.zoomControl))}));var he=function(t){return new re(t)},le=ne.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var i="leaflet-control-scale",e=ui("div",i),n=this.options;return this._addScales(n,i+"-line",e),t.on(n.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),e},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,e){t.metric&&(this._mScale=ui("div",i,e)),t.imperial&&(this._iScale=ui("div",i,e))},_update:function(){var t=this._map,i=t.getSize().y/2,e=t.distance(t.containerPointToLatLng([0,i]),t.containerPointToLatLng([this.options.maxWidth,i]));this._updateScales(e)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var i=this._getRoundNum(t),e=i<1e3?i+" m":i/1e3+" km";this._updateScale(this._mScale,e,i/t)},_updateImperial:function(t){var i,e,n,o=3.2808399*t;o>5280?(i=o/5280,e=this._getRoundNum(i),this._updateScale(this._iScale,e+" mi",e/i)):(n=this._getRoundNum(o),this._updateScale(this._iScale,n+" ft",n/o))},_updateScale:function(t,i,e){t.style.width=Math.round(this.options.maxWidth*e)+"px",t.innerHTML=i},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),e=t/i;return i*(e=e>=10?10:e>=5?5:e>=3?3:e>=2?2:1)}}),ue=function(t){return new le(t)},ce=ne.extend({options:{position:"bottomright",prefix:'Leaflet'},initialize:function(t){_(this,t),this._attributions={}},onAdd:function(t){for(var i in t.attributionControl=this,this._container=ui("div","leaflet-control-attribution"),Wi(this._container),t._layers)t._layers[i].getAttribution&&this.addAttribution(t._layers[i].getAttribution());return this._update(),this._container},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):this},removeAttribution:function(t){return t?(this._attributions[t]&&(this._attributions[t]--,this._update()),this):this},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions[i]&&t.push(i);var e=[];this.options.prefix&&e.push(this.options.prefix),t.length&&e.push(t.join(", ")),this._container.innerHTML=e.join(" | ")}}});ie.mergeOptions({attributionControl:!0}),ie.addInitHook((function(){this.options.attributionControl&&(new ce).addTo(this)}));var de=function(t){return new ce(t)};ne.Layers=se,ne.Zoom=re,ne.Scale=le,ne.Attribution=ce,oe.layers=ae,oe.zoom=he,oe.scale=ue,oe.attribution=de;var _e=S.extend({initialize:function(t){this._map=t},enable:function(){return this._enabled||(this._enabled=!0,this.addHooks()),this},disable:function(){return this._enabled?(this._enabled=!1,this.removeHooks(),this):this},enabled:function(){return!!this._enabled}});_e.addTo=function(t,i){return t.addHandler(i,this),this};var pe,me={Events:k},fe=bt?"touchstart mousedown":"mousedown",ge={mousedown:"mouseup",touchstart:"touchend",pointerdown:"touchend",MSPointerDown:"touchend"},ve={mousedown:"mousemove",touchstart:"touchmove",pointerdown:"touchmove",MSPointerDown:"touchmove"},ye=Z.extend({options:{clickTolerance:3},initialize:function(t,i,e,n){_(this,n),this._element=t,this._dragStartTarget=i||t,this._preventOutline=e},enable:function(){this._enabled||(Ii(this._dragStartTarget,fe,this._onDown,this),this._enabled=!0)},disable:function(){this._enabled&&(ye._dragging===this&&this.finishDrag(),Di(this._dragStartTarget,fe,this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(t){if(!t._simulated&&this._enabled&&(this._moved=!1,!mi(this._element,"leaflet-zoom-anim")&&!(ye._dragging||t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(ye._dragging=this,this._preventOutline&&Si(this._element),zi(),ti(),this._moving)))){this.fire("down");var i=t.touches?t.touches[0]:t,e=ki(this._element);this._startPoint=new A(i.clientX,i.clientY),this._parentScale=Zi(e),Ii(document,ve[t.type],this._onMove,this),Ii(document,ge[t.type],this._onUp,this)}},_onMove:function(t){if(!t._simulated&&this._enabled)if(t.touches&&t.touches.length>1)this._moved=!0;else{var i=t.touches&&1===t.touches.length?t.touches[0]:t,e=new A(i.clientX,i.clientY)._subtract(this._startPoint);(e.x||e.y)&&(Math.abs(e.x)+Math.abs(e.y)h&&(s=a,h=r);h>e&&(i[s]=1,be(t,i,e,n,s),be(t,i,e,s,o))}function Te(t,i){for(var e=[t[0]],n=1,o=0,s=t.length;ni&&(e.push(t[n]),o=n);return oi.max.x&&(e|=2),t.yi.max.y&&(e|=8),e}function Se(t,i){var e=i.x-t.x,n=i.y-t.y;return e*e+n*n}function Ee(t,i,e,n){var o,s=i.x,a=i.y,r=e.x-s,h=e.y-a,l=r*r+h*h;return l>0&&((o=((t.x-s)*r+(t.y-a)*h)/l)>1?(s=e.x,a=e.y):o>0&&(s+=r*o,a+=h*o)),r=t.x-s,h=t.y-a,n?r*r+h*h:new A(s,a)}function ke(t){return!g(t[0])||"object"!=typeof t[0][0]&&void 0!==t[0][0]}function Ze(t){return console.warn("Deprecated use of _flat, please use L.LineUtil.isFlat instead."),ke(t)}var Ae={simplify:xe,pointToSegmentDistance:we,closestPointOnSegment:Pe,clipSegment:Me,_getEdgeIntersection:ze,_getBitCode:Ce,_sqClosestPointOnSegment:Ee,isFlat:ke,_flat:Ze};function Ie(t,i,e){var n,o,s,a,r,h,l,u,c,d=[1,4,2,8];for(o=0,l=t.length;o1e-7;h++)i=s*Math.sin(r),i=Math.pow((1-i)/(1+i),s/2),r+=l=Math.PI/2-2*Math.atan(a*i)-r;return new j(r*e,t.x*e/n)}},Re={LonLat:De,Mercator:Oe,SphericalMercator:q},Ne=e({},U,{code:"EPSG:3395",projection:Oe,transformation:function(){var t=.5/(Math.PI*Oe.R);return K(t,.5,-t,.5)}()}),je=e({},U,{code:"EPSG:4326",projection:De,transformation:K(1/180,1,-1/180,.5)}),Fe=e({},W,{projection:De,transformation:K(1,0,-1,0),scale:function(t){return Math.pow(2,t)},zoom:function(t){return Math.log(t)/Math.LN2},distance:function(t,i){var e=i.lng-t.lng,n=i.lat-t.lat;return Math.sqrt(e*e+n*n)},infinite:!0});W.Earth=U,W.EPSG3395=Ne,W.EPSG3857=Y,W.EPSG900913=J,W.EPSG4326=je,W.Simple=Fe;var He=Z.extend({options:{pane:"overlayPane",attribution:null,bubblingMouseEvents:!0},addTo:function(t){return t.addLayer(this),this},remove:function(){return this.removeFrom(this._map||this._mapToAdd)},removeFrom:function(t){return t&&t.removeLayer(this),this},getPane:function(t){return this._map.getPane(t?this.options[t]||t:this.options.pane)},addInteractiveTarget:function(t){return this._map._targets[a(t)]=this,this},removeInteractiveTarget:function(t){return delete this._map._targets[a(t)],this},getAttribution:function(){return this.options.attribution},_layerAdd:function(t){var i=t.target;if(i.hasLayer(this)){if(this._map=i,this._zoomAnimated=i._zoomAnimated,this.getEvents){var e=this.getEvents();i.on(e,this),this.once("remove",(function(){i.off(e,this)}),this)}this.onAdd(i),this.getAttribution&&i.attributionControl&&i.attributionControl.addAttribution(this.getAttribution()),this.fire("add"),i.fire("layeradd",{layer:this})}}});ie.include({addLayer:function(t){if(!t._layerAdd)throw new Error("The provided object is not a Layer.");var i=a(t);return this._layers[i]||(this._layers[i]=t,t._mapToAdd=this,t.beforeAdd&&t.beforeAdd(this),this.whenReady(t._layerAdd,t)),this},removeLayer:function(t){var i=a(t);return this._layers[i]?(this._loaded&&t.onRemove(this),t.getAttribution&&this.attributionControl&&this.attributionControl.removeAttribution(t.getAttribution()),delete this._layers[i],this._loaded&&(this.fire("layerremove",{layer:t}),t.fire("remove")),t._map=t._mapToAdd=null,this):this},hasLayer:function(t){return!!t&&a(t)in this._layers},eachLayer:function(t,i){for(var e in this._layers)t.call(i,this._layers[e]);return this},_addLayers:function(t){for(var i=0,e=(t=t?g(t)?t:[t]:[]).length;ithis._layersMaxZoom&&this.setZoom(this._layersMaxZoom),void 0===this.options.minZoom&&this._layersMinZoom&&this.getZoom()i)return a=(n-i)/e,this._map.layerPointToLatLng([s.x-a*(s.x-o.x),s.y-a*(s.y-o.y)])},getBounds:function(){return this._bounds},addLatLng:function(t,i){return i=i||this._defaultShape(),t=F(t),i.push(t),this._bounds.extend(t),this.redraw()},_setLatLngs:function(t){this._bounds=new R,this._latlngs=this._convertLatLngs(t)},_defaultShape:function(){return ke(this._latlngs)?this._latlngs:this._latlngs[0]},_convertLatLngs:function(t){for(var i=[],e=ke(t),n=0,o=t.length;n=2&&i[0]instanceof j&&i[0].equals(i[e-1])&&i.pop(),i},_setLatLngs:function(t){sn.prototype._setLatLngs.call(this,t),ke(this._latlngs)&&(this._latlngs=[this._latlngs])},_defaultShape:function(){return ke(this._latlngs[0])?this._latlngs[0]:this._latlngs[0][0]},_clipPoints:function(){var t=this._renderer._bounds,i=this.options.weight,e=new A(i,i);if(t=new D(t.min.subtract(e),t.max.add(e)),this._parts=[],this._pxBounds&&this._pxBounds.intersects(t))if(this.options.noClip)this._parts=this._rings;else for(var n,o=0,s=this._rings.length;ot.y!=n.y>t.y&&t.x<(n.x-e.x)*(t.y-e.y)/(n.y-e.y)+e.x&&(l=!l);return l||sn.prototype._containsPoint.call(this,t,!0)}});function hn(t,i){return new rn(t,i)}var ln=Ve.extend({initialize:function(t,i){_(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,e,n,o=g(t)?t:t.features;if(o){for(i=0,e=o.length;i0?n:[i.src]}else{g(this._url)||(this._url=[this._url]),!this.options.keepAspectRatio&&Object.prototype.hasOwnProperty.call(i.style,"objectFit")&&(i.style.objectFit="fill"),i.autoplay=!!this.options.autoplay,i.loop=!!this.options.loop,i.muted=!!this.options.muted;for(var a=0;ao?(i.height=o+"px",fi(t,s)):gi(t,s),this._containerWidth=this._container.offsetWidth},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center),e=this._getAnchor();bi(this._container,i.add(e))},_adjustPan:function(){if(this.options.autoPan){this._map._panAnim&&this._map._panAnim.stop();var t=this._map,i=parseInt(li(this._container,"marginBottom"),10)||0,e=this._container.offsetHeight+i,n=this._containerWidth,o=new A(this._containerLeft,-e-this._containerBottom);o._add(Ti(this._container));var s=t.layerPointToContainerPoint(o),a=B(this.options.autoPanPadding),r=B(this.options.autoPanPaddingTopLeft||a),h=B(this.options.autoPanPaddingBottomRight||a),l=t.getSize(),u=0,c=0;s.x+n+h.x>l.x&&(u=s.x+n-l.x+h.x),s.x-u-r.x<0&&(u=s.x-r.x),s.y+e+h.y>l.y&&(c=s.y+e-l.y+h.y),s.y-c-r.y<0&&(c=s.y-r.y),(u||c)&&t.fire("autopanstart").panBy([u,c])}},_onCloseButtonClick:function(t){this._close(),Vi(t)},_getAnchor:function(){return B(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():[0,0])}}),Sn=function(t,i){return new Cn(t,i)};ie.mergeOptions({closePopupOnClick:!0}),ie.include({openPopup:function(t,i,e){return t instanceof Cn||(t=new Cn(e).setContent(t)),i&&t.setLatLng(i),this.hasLayer(t)?this:(this._popup&&this._popup.options.autoClose&&this.closePopup(),this._popup=t,this.addLayer(t))},closePopup:function(t){return t&&t!==this._popup||(t=this._popup,this._popup=null),t&&this.removeLayer(t),this}}),He.include({bindPopup:function(t,i){return t instanceof Cn?(_(t,i),this._popup=t,t._source=this):(this._popup&&!i||(this._popup=new Cn(i,this)),this._popup.setContent(t)),this._popupHandlersAdded||(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,this._popup=null),this},openPopup:function(t,i){return this._popup&&this._map&&(i=this._popup._prepareOpen(this,t,i),this._map.openPopup(this._popup,i)),this},closePopup:function(){return this._popup&&this._popup._close(),this},togglePopup:function(t){return this._popup&&(this._popup._map?this.closePopup():this.openPopup(t)),this},isPopupOpen:function(){return!!this._popup&&this._popup.isOpen()},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},getPopup:function(){return this._popup},_openPopup:function(t){var i=t.layer||t.target;this._popup&&this._map&&(Vi(t),i instanceof Qe?this.openPopup(t.layer||t.target,t.latlng):this._map.hasLayer(this._popup)&&this._popup._source===i?this.closePopup():this.openPopup(i,t.latlng))},_movePopup:function(t){this._popup.setLatLng(t.latlng)},_onKeyPress:function(t){13===t.originalEvent.keyCode&&this._openPopup(t)}});var En=zn.extend({options:{pane:"tooltipPane",offset:[0,0],direction:"auto",permanent:!1,sticky:!1,interactive:!1,opacity:.9},onAdd:function(t){zn.prototype.onAdd.call(this,t),this.setOpacity(this.options.opacity),t.fire("tooltipopen",{tooltip:this}),this._source&&this._source.fire("tooltipopen",{tooltip:this},!0)},onRemove:function(t){zn.prototype.onRemove.call(this,t),t.fire("tooltipclose",{tooltip:this}),this._source&&this._source.fire("tooltipclose",{tooltip:this},!0)},getEvents:function(){var t=zn.prototype.getEvents.call(this);return bt&&!this.options.permanent&&(t.preclick=this._close),t},_close:function(){this._map&&this._map.closeTooltip(this)},_initLayout:function(){var t="leaflet-tooltip "+(this.options.className||"")+" leaflet-zoom-"+(this._zoomAnimated?"animated":"hide");this._contentNode=this._container=ui("div",t)},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(t){var i,e,n=this._map,o=this._container,s=n.latLngToContainerPoint(n.getCenter()),a=n.layerPointToContainerPoint(t),r=this.options.direction,h=o.offsetWidth,l=o.offsetHeight,u=B(this.options.offset),c=this._getAnchor();"top"===r?(i=h/2,e=l):"bottom"===r?(i=h/2,e=0):"center"===r?(i=h/2,e=l/2):"right"===r?(i=0,e=l/2):"left"===r?(i=h,e=l/2):a.xthis.options.maxZoom||en&&this._retainParent(o,s,a,n))},_retainChildren:function(t,i,e,n){for(var o=2*t;o<2*t+2;o++)for(var s=2*i;s<2*i+2;s++){var a=new A(o,s);a.z=e+1;var r=this._tileCoordsToKey(a),h=this._tiles[r];h&&h.active?h.retain=!0:(h&&h.loaded&&(h.retain=!0),e+1this.options.maxZoom||void 0!==this.options.minZoom&&o1)this._setView(t,e);else{for(var c=o.min.y;c<=o.max.y;c++)for(var d=o.min.x;d<=o.max.x;d++){var _=new A(d,c);if(_.z=this._tileZoom,this._isValidTile(_)){var p=this._tiles[this._tileCoordsToKey(_)];p?p.current=!0:a.push(_)}}if(a.sort((function(t,i){return t.distanceTo(s)-i.distanceTo(s)})),0!==a.length){this._loading||(this._loading=!0,this.fire("loading"));var m=document.createDocumentFragment();for(d=0;de.max.x)||!i.wrapLat&&(t.ye.max.y))return!1}if(!this.options.bounds)return!0;var n=this._tileCoordsToBounds(t);return N(this.options.bounds).overlaps(n)},_keyToBounds:function(t){return this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToNwSe:function(t){var i=this._map,e=this.getTileSize(),n=t.scaleBy(e),o=n.add(e);return[i.unproject(n,t.z),i.unproject(o,t.z)]},_tileCoordsToBounds:function(t){var i=this._tileCoordsToNwSe(t),e=new R(i[0],i[1]);return this.options.noWrap||(e=this._map.wrapLatLngBounds(e)),e},_tileCoordsToKey:function(t){return t.x+":"+t.y+":"+t.z},_keyToTileCoords:function(t){var i=t.split(":"),e=new A(+i[0],+i[1]);return e.z=+i[2],e},_removeTile:function(t){var i=this._tiles[t];i&&(ci(i.el),delete this._tiles[t],this.fire("tileunload",{tile:i.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){fi(t,"leaflet-tile");var i=this.getTileSize();t.style.width=i.x+"px",t.style.height=i.y+"px",t.onselectstart=l,t.onmousemove=l,it&&this.options.opacity<1&&xi(t,this.options.opacity),ot&&!st&&(t.style.WebkitBackfaceVisibility="hidden")},_addTile:function(t,i){var e=this._getTilePos(t),n=this._tileCoordsToKey(t),s=this.createTile(this._wrapCoords(t),o(this._tileReady,this,t));this._initTile(s),this.createTile.length<2&&M(o(this._tileReady,this,t,null,s)),bi(s,e),this._tiles[n]={el:s,coords:t,current:!0},i.appendChild(s),this.fire("tileloadstart",{tile:s,coords:t})},_tileReady:function(t,i,e){i&&this.fire("tileerror",{error:i,tile:e,coords:t});var n=this._tileCoordsToKey(t);(e=this._tiles[n])&&(e.loaded=+new Date,this._map._fadeAnimated?(xi(e.el,0),z(this._fadeFrame),this._fadeFrame=M(this._updateOpacity,this)):(e.active=!0,this._pruneTiles()),i||(fi(e.el,"leaflet-tile-loaded"),this.fire("tileload",{tile:e.el,coords:t})),this._noTilesToLoad()&&(this._loading=!1,this.fire("load"),it||!this._map._fadeAnimated?M(this._pruneTiles,this):setTimeout(o(this._pruneTiles,this),250)))},_getTilePos:function(t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var i=new A(this._wrapX?h(t.x,this._wrapX):t.x,this._wrapY?h(t.y,this._wrapY):t.y);return i.z=t.z,i},_pxBoundsToTileRange:function(t){var i=this.getTileSize();return new D(t.min.unscaleBy(i).floor(),t.max.unscaleBy(i).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var t in this._tiles)if(!this._tiles[t].loaded)return!1;return!0}});function Bn(t){return new In(t)}var Dn=In.extend({options:{minZoom:0,maxZoom:18,subdomains:"abc",errorTileUrl:"",zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1},initialize:function(t,i){this._url=t,(i=_(this,i)).detectRetina&&zt&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomReverse?(i.zoomOffset--,i.minZoom++):(i.zoomOffset++,i.maxZoom--),i.minZoom=Math.max(0,i.minZoom)),"string"==typeof i.subdomains&&(i.subdomains=i.subdomains.split("")),ot||this.on("tileunload",this._onTileRemove)},setUrl:function(t,i){return this._url===t&&void 0===i&&(i=!0),this._url=t,i||this.redraw(),this},createTile:function(t,i){var e=document.createElement("img");return Ii(e,"load",o(this._tileOnLoad,this,i,e)),Ii(e,"error",o(this._tileOnError,this,i,e)),(this.options.crossOrigin||""===this.options.crossOrigin)&&(e.crossOrigin=!0===this.options.crossOrigin?"":this.options.crossOrigin),e.alt="",e.setAttribute("role","presentation"),e.src=this.getTileUrl(t),e},getTileUrl:function(t){var i={r:zt?"@2x":"",s:this._getSubdomain(t),x:t.x,y:t.y,z:this._getZoomForUrl()};if(this._map&&!this._map.options.crs.infinite){var n=this._globalTileRange.max.y-t.y;this.options.tms&&(i.y=n),i["-y"]=n}return f(this._url,e(i,this.options))},_tileOnLoad:function(t,i){it?setTimeout(o(t,this,null,i),0):t(null,i)},_tileOnError:function(t,i,e){var n=this.options.errorTileUrl;n&&i.getAttribute("src")!==n&&(i.src=n),t(e,i)},_onTileRemove:function(t){t.tile.onload=null},_getZoomForUrl:function(){var t=this._tileZoom,i=this.options.maxZoom;return this.options.zoomReverse&&(t=i-t),t+this.options.zoomOffset},_getSubdomain:function(t){var i=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_abortLoading:function(){var t,i;for(t in this._tiles)this._tiles[t].coords.z!==this._tileZoom&&((i=this._tiles[t].el).onload=l,i.onerror=l,i.complete||(i.src=y,ci(i),delete this._tiles[t]))},_removeTile:function(t){var i=this._tiles[t];if(i)return rt||i.el.setAttribute("src",y),In.prototype._removeTile.call(this,t)},_tileReady:function(t,i,e){if(this._map&&(!e||e.getAttribute("src")!==y))return In.prototype._tileReady.call(this,t,i,e)}});function On(t,i){return new Dn(t,i)}var Rn=Dn.extend({defaultWmsParams:{service:"WMS",request:"GetMap",layers:"",styles:"",format:"image/jpeg",transparent:!1,version:"1.1.1"},options:{crs:null,uppercase:!1},initialize:function(t,i){this._url=t;var n=e({},this.defaultWmsParams);for(var o in i)o in this.options||(n[o]=i[o]);var s=(i=_(this,i)).detectRetina&&zt?2:1,a=this.getTileSize();n.width=a.x*s,n.height=a.y*s,this.wmsParams=n},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var i=this._wmsVersion>=1.3?"crs":"srs";this.wmsParams[i]=this._crs.code,Dn.prototype.onAdd.call(this,t)},getTileUrl:function(t){var i=this._tileCoordsToNwSe(t),e=this._crs,n=O(e.project(i[0]),e.project(i[1])),o=n.min,s=n.max,a=(this._wmsVersion>=1.3&&this._crs===je?[o.y,o.x,s.y,s.x]:[o.x,o.y,s.x,s.y]).join(","),r=Dn.prototype.getTileUrl.call(this,t);return r+p(this.wmsParams,r,this.options.uppercase)+(this.options.uppercase?"&BBOX=":"&bbox=")+a},setParams:function(t,i){return e(this.wmsParams,t),i||this.redraw(),this}});function Nn(t,i){return new Rn(t,i)}Dn.WMS=Rn,On.wms=Nn;var jn=He.extend({options:{padding:.1,tolerance:0},initialize:function(t){_(this,t),a(this),this._layers=this._layers||{}},onAdd:function(){this._container||(this._initContainer(),this._zoomAnimated&&fi(this._container,"leaflet-zoom-animated")),this.getPane().appendChild(this._container),this._update(),this.on("update",this._updatePaths,this)},onRemove:function(){this.off("update",this._updatePaths,this),this._destroyContainer()},getEvents:function(){var t={viewreset:this._reset,zoom:this._onZoom,moveend:this._update,zoomend:this._onZoomEnd};return this._zoomAnimated&&(t.zoomanim=this._onAnimZoom),t},_onAnimZoom:function(t){this._updateTransform(t.center,t.zoom)},_onZoom:function(){this._updateTransform(this._map.getCenter(),this._map.getZoom())},_updateTransform:function(t,i){var e=this._map.getZoomScale(i,this._zoom),n=Ti(this._container),o=this._map.getSize().multiplyBy(.5+this.options.padding),s=this._map.project(this._center,i),a=this._map.project(t,i).subtract(s),r=o.multiplyBy(-e).add(n).add(o).subtract(a);vt?Li(this._container,r,e):bi(this._container,r)},_reset:function(){for(var t in this._update(),this._updateTransform(this._center,this._zoom),this._layers)this._layers[t]._reset()},_onZoomEnd:function(){for(var t in this._layers)this._layers[t]._project()},_updatePaths:function(){for(var t in this._layers)this._layers[t]._update()},_update:function(){var t=this.options.padding,i=this._map.getSize(),e=this._map.containerPointToLayerPoint(i.multiplyBy(-t)).round();this._bounds=new D(e,e.add(i.multiplyBy(1+2*t)).round()),this._center=this._map.getCenter(),this._zoom=this._map.getZoom()}}),Fn=jn.extend({getEvents:function(){var t=jn.prototype.getEvents.call(this);return t.viewprereset=this._onViewPreReset,t},_onViewPreReset:function(){this._postponeUpdatePaths=!0},onAdd:function(){jn.prototype.onAdd.call(this),this._draw()},_initContainer:function(){var t=this._container=document.createElement("canvas");Ii(t,"mousemove",this._onMouseMove,this),Ii(t,"click dblclick mousedown mouseup contextmenu",this._onClick,this),Ii(t,"mouseout",this._handleMouseOut,this),this._ctx=t.getContext("2d")},_destroyContainer:function(){z(this._redrawRequest),delete this._ctx,ci(this._container),Di(this._container),delete this._container},_updatePaths:function(){if(!this._postponeUpdatePaths){for(var t in this._redrawBounds=null,this._layers)this._layers[t]._update();this._redraw()}},_update:function(){if(!this._map._animatingZoom||!this._bounds){jn.prototype._update.call(this);var t=this._bounds,i=this._container,e=t.getSize(),n=zt?2:1;bi(i,t.min),i.width=n*e.x,i.height=n*e.y,i.style.width=e.x+"px",i.style.height=e.y+"px",zt&&this._ctx.scale(2,2),this._ctx.translate(-t.min.x,-t.min.y),this.fire("update")}},_reset:function(){jn.prototype._reset.call(this),this._postponeUpdatePaths&&(this._postponeUpdatePaths=!1,this._updatePaths())},_initPath:function(t){this._updateDashArray(t),this._layers[a(t)]=t;var i=t._order={layer:t,prev:this._drawLast,next:null};this._drawLast&&(this._drawLast.next=i),this._drawLast=i,this._drawFirst=this._drawFirst||this._drawLast},_addPath:function(t){this._requestRedraw(t)},_removePath:function(t){var i=t._order,e=i.next,n=i.prev;e?e.prev=n:this._drawLast=n,n?n.next=e:this._drawFirst=e,delete t._order,delete this._layers[a(t)],this._requestRedraw(t)},_updatePath:function(t){this._extendRedrawBounds(t),t._project(),t._update(),this._requestRedraw(t)},_updateStyle:function(t){this._updateDashArray(t),this._requestRedraw(t)},_updateDashArray:function(t){if("string"==typeof t.options.dashArray){var i,e,n=t.options.dashArray.split(/[, ]+/),o=[];for(e=0;e')}}catch(t){return function(t){return document.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),Un={_initContainer:function(){this._container=ui("div","leaflet-vml-container")},_update:function(){this._map._animatingZoom||(jn.prototype._update.call(this),this.fire("update"))},_initPath:function(t){var i=t._container=Wn("shape");fi(i,"leaflet-vml-shape "+(this.options.className||"")),i.coordsize="1 1",t._path=Wn("path"),i.appendChild(t._path),this._updateStyle(t),this._layers[a(t)]=t},_addPath:function(t){var i=t._container;this._container.appendChild(i),t.options.interactive&&t.addInteractiveTarget(i)},_removePath:function(t){var i=t._container;ci(i),t.removeInteractiveTarget(i),delete this._layers[a(t)]},_updateStyle:function(t){var i=t._stroke,e=t._fill,n=t.options,o=t._container;o.stroked=!!n.stroke,o.filled=!!n.fill,n.stroke?(i||(i=t._stroke=Wn("stroke")),o.appendChild(i),i.weight=n.weight+"px",i.color=n.color,i.opacity=n.opacity,n.dashArray?i.dashStyle=g(n.dashArray)?n.dashArray.join(" "):n.dashArray.replace(/( *, *)/g," "):i.dashStyle="",i.endcap=n.lineCap.replace("butt","flat"),i.joinstyle=n.lineJoin):i&&(o.removeChild(i),t._stroke=null),n.fill?(e||(e=t._fill=Wn("fill")),o.appendChild(e),e.color=n.fillColor||n.color,e.opacity=n.fillOpacity):e&&(o.removeChild(e),t._fill=null)},_updateCircle:function(t){var i=t._point.round(),e=Math.round(t._radius),n=Math.round(t._radiusY||e);this._setPath(t,t._empty()?"M0 0":"AL "+i.x+","+i.y+" "+e+","+n+" 0,23592600")},_setPath:function(t,i){t._path.v=i},_bringToFront:function(t){_i(t._container)},_bringToBack:function(t){pi(t._container)}},Vn=kt?Wn:X,qn=jn.extend({getEvents:function(){var t=jn.prototype.getEvents.call(this);return t.zoomstart=this._onZoomStart,t},_initContainer:function(){this._container=Vn("svg"),this._container.setAttribute("pointer-events","none"),this._rootGroup=Vn("g"),this._container.appendChild(this._rootGroup)},_destroyContainer:function(){ci(this._container),Di(this._container),delete this._container,delete this._rootGroup,delete this._svgSize},_onZoomStart:function(){this._update()},_update:function(){if(!this._map._animatingZoom||!this._bounds){jn.prototype._update.call(this);var t=this._bounds,i=t.getSize(),e=this._container;this._svgSize&&this._svgSize.equals(i)||(this._svgSize=i,e.setAttribute("width",i.x),e.setAttribute("height",i.y)),bi(e,t.min),e.setAttribute("viewBox",[t.min.x,t.min.y,i.x,i.y].join(" ")),this.fire("update")}},_initPath:function(t){var i=t._path=Vn("path");t.options.className&&fi(i,t.options.className),t.options.interactive&&fi(i,"leaflet-interactive"),this._updateStyle(t),this._layers[a(t)]=t},_addPath:function(t){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){ci(t._path),t.removeInteractiveTarget(t._path),delete this._layers[a(t)]},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var i=t._path,e=t.options;i&&(e.stroke?(i.setAttribute("stroke",e.color),i.setAttribute("stroke-opacity",e.opacity),i.setAttribute("stroke-width",e.weight),i.setAttribute("stroke-linecap",e.lineCap),i.setAttribute("stroke-linejoin",e.lineJoin),e.dashArray?i.setAttribute("stroke-dasharray",e.dashArray):i.removeAttribute("stroke-dasharray"),e.dashOffset?i.setAttribute("stroke-dashoffset",e.dashOffset):i.removeAttribute("stroke-dashoffset")):i.setAttribute("stroke","none"),e.fill?(i.setAttribute("fill",e.fillColor||e.color),i.setAttribute("fill-opacity",e.fillOpacity),i.setAttribute("fill-rule",e.fillRule||"evenodd")):i.setAttribute("fill","none"))},_updatePoly:function(t,i){this._setPath(t,$(t._parts,i))},_updateCircle:function(t){var i=t._point,e=Math.max(Math.round(t._radius),1),n="a"+e+","+(Math.max(Math.round(t._radiusY),1)||e)+" 0 1,0 ",o=t._empty()?"M0 0":"M"+(i.x-e)+","+i.y+n+2*e+",0 "+n+2*-e+",0 ";this._setPath(t,o)},_setPath:function(t,i){t._path.setAttribute("d",i)},_bringToFront:function(t){_i(t._path)},_bringToBack:function(t){pi(t._path)}});function Gn(t){return Et||kt?new qn(t):null}kt&&qn.include(Un),ie.include({getRenderer:function(t){var i=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer;return i||(i=this._renderer=this._createRenderer()),this.hasLayer(i)||this.addLayer(i),i},_getPaneRenderer:function(t){if("overlayPane"===t||void 0===t)return!1;var i=this._paneRenderers[t];return void 0===i&&(i=this._createRenderer({pane:t}),this._paneRenderers[t]=i),i},_createRenderer:function(t){return this.options.preferCanvas&&Hn(t)||Gn(t)}});var Kn=rn.extend({initialize:function(t,i){rn.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){return this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return[(t=N(t)).getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}});function Yn(t,i){return new Kn(t,i)}qn.create=Vn,qn.pointsToPath=$,ln.geometryToLayer=un,ln.coordsToLatLng=dn,ln.coordsToLatLngs=_n,ln.latLngToCoords=pn,ln.latLngsToCoords=mn,ln.getFeature=fn,ln.asFeature=gn,ie.mergeOptions({boxZoom:!0});var Jn=_e.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){Ii(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){Di(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){ci(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){0!==this._resetStateTimeout&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||1!==t.which&&1!==t.button)return!1;this._clearDeferredResetState(),this._resetState(),ti(),zi(),this._startPoint=this._map.mouseEventToContainerPoint(t),Ii(document,{contextmenu:Vi,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=ui("div","leaflet-zoom-box",this._container),fi(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t);var i=new D(this._point,this._startPoint),e=i.getSize();bi(this._box,i.min),this._box.style.width=e.x+"px",this._box.style.height=e.y+"px"},_finish:function(){this._moved&&(ci(this._box),gi(this._container,"leaflet-crosshair")),ii(),Ci(),Di(document,{contextmenu:Vi,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){if((1===t.which||1===t.button)&&(this._finish(),this._moved)){this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(o(this._resetState,this),0);var i=new R(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point));this._map.fitBounds(i).fire("boxzoomend",{boxZoomBounds:i})}},_onKeyDown:function(t){27===t.keyCode&&this._finish()}});ie.addInitHook("addHandler","boxZoom",Jn),ie.mergeOptions({doubleClickZoom:!0});var Xn=_e.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var i=this._map,e=i.getZoom(),n=i.options.zoomDelta,o=t.originalEvent.shiftKey?e-n:e+n;"center"===i.options.doubleClickZoom?i.setZoom(o):i.setZoomAround(t.containerPoint,o)}});ie.addInitHook("addHandler","doubleClickZoom",Xn),ie.mergeOptions({dragging:!0,inertia:!st,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0});var $n=_e.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new ye(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on("predrag",this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDragWrap,this),t.on("zoomend",this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))}fi(this._map._container,"leaflet-grab leaflet-touch-drag"),this._draggable.enable(),this._positions=[],this._times=[]},removeHooks:function(){gi(this._map._container,"leaflet-grab"),gi(this._map._container,"leaflet-touch-drag"),this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},moving:function(){return this._draggable&&this._draggable._moving},_onDragStart:function(){var t=this._map;if(t._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity){var i=N(this._map.options.maxBounds);this._offsetLimit=O(this._map.latLngToContainerPoint(i.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(i.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))}else this._offsetLimit=null;t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(t){if(this._map.options.inertia){var i=this._lastTime=+new Date,e=this._lastPos=this._draggable._absPos||this._draggable._newPos;this._positions.push(e),this._times.push(i),this._prunePositions(i)}this._map.fire("move",t).fire("drag",t)},_prunePositions:function(t){for(;this._positions.length>1&&t-this._times[0]>50;)this._positions.shift(),this._times.shift()},_onZoomEnd:function(){var t=this._map.getSize().divideBy(2),i=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.getPixelWorldBounds().getSize().x},_viscousLimit:function(t,i){return t-(t-i)*this._viscosity},_onPreDragLimit:function(){if(this._viscosity&&this._offsetLimit){var t=this._draggable._newPos.subtract(this._draggable._startPos),i=this._offsetLimit;t.xi.max.x&&(t.x=this._viscousLimit(t.x,i.max.x)),t.y>i.max.y&&(t.y=this._viscousLimit(t.y,i.max.y)),this._draggable._newPos=this._draggable._startPos.add(t)}},_onPreDragWrap:function(){var t=this._worldWidth,i=Math.round(t/2),e=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-i+e)%t+i-e,s=(n+i+e)%t-i-e,a=Math.abs(o+e)0?s:-s))-i;this._delta=0,this._startTime=null,a&&("center"===t.options.scrollWheelZoom?t.setZoom(i+a):t.setZoomAround(this._lastMousePos,i+a))}});ie.addInitHook("addHandler","scrollWheelZoom",to),ie.mergeOptions({tap:!0,tapTolerance:15});var io=_e.extend({addHooks:function(){Ii(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){Di(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){if(t.touches){if(Ui(t),this._fireClick=!0,t.touches.length>1)return this._fireClick=!1,void clearTimeout(this._holdTimeout);var i=t.touches[0],e=i.target;this._startPos=this._newPos=new A(i.clientX,i.clientY),e.tagName&&"a"===e.tagName.toLowerCase()&&fi(e,"leaflet-active"),this._holdTimeout=setTimeout(o((function(){this._isTapValid()&&(this._fireClick=!1,this._onUp(),this._simulateEvent("contextmenu",i))}),this),1e3),this._simulateEvent("mousedown",i),Ii(document,{touchmove:this._onMove,touchend:this._onUp},this)}},_onUp:function(t){if(clearTimeout(this._holdTimeout),Di(document,{touchmove:this._onMove,touchend:this._onUp},this),this._fireClick&&t&&t.changedTouches){var i=t.changedTouches[0],e=i.target;e&&e.tagName&&"a"===e.tagName.toLowerCase()&&gi(e,"leaflet-active"),this._simulateEvent("mouseup",i),this._isTapValid()&&this._simulateEvent("click",i)}},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_onMove:function(t){var i=t.touches[0];this._newPos=new A(i.clientX,i.clientY),this._simulateEvent("mousemove",i)},_simulateEvent:function(t,i){var e=document.createEvent("MouseEvents");e._simulated=!0,i.target._simulatedClick=!0,e.initMouseEvent(t,!0,!0,window,1,i.screenX,i.screenY,i.clientX,i.clientY,!1,!1,!1,!1,0,null),i.target.dispatchEvent(e)}});!bt||Lt&&!ct||ie.addInitHook("addHandler","tap",io),ie.mergeOptions({touchZoom:bt&&!st,bounceAtZoomLimits:!0});var eo=_e.extend({addHooks:function(){fi(this._map._container,"leaflet-touch-zoom"),Ii(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){gi(this._map._container,"leaflet-touch-zoom"),Di(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var i=this._map;if(t.touches&&2===t.touches.length&&!i._animatingZoom&&!this._zooming){var e=i.mouseEventToContainerPoint(t.touches[0]),n=i.mouseEventToContainerPoint(t.touches[1]);this._centerPoint=i.getSize()._divideBy(2),this._startLatLng=i.containerPointToLatLng(this._centerPoint),"center"!==i.options.touchZoom&&(this._pinchStartLatLng=i.containerPointToLatLng(e.add(n)._divideBy(2))),this._startDist=e.distanceTo(n),this._startZoom=i.getZoom(),this._moved=!1,this._zooming=!0,i._stop(),Ii(document,"touchmove",this._onTouchMove,this),Ii(document,"touchend",this._onTouchEnd,this),Ui(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length&&this._zooming){var i=this._map,e=i.mouseEventToContainerPoint(t.touches[0]),n=i.mouseEventToContainerPoint(t.touches[1]),s=e.distanceTo(n)/this._startDist;if(this._zoom=i.getScaleZoom(s,this._startZoom),!i.options.bounceAtZoomLimits&&(this._zoomi.getMaxZoom()&&s>1)&&(this._zoom=i._limitZoom(this._zoom)),"center"===i.options.touchZoom){if(this._center=this._startLatLng,1===s)return}else{var a=e._add(n)._divideBy(2)._subtract(this._centerPoint);if(1===s&&0===a.x&&0===a.y)return;this._center=i.unproject(i.project(this._pinchStartLatLng,this._zoom).subtract(a),this._zoom)}this._moved||(i._moveStart(!0,!1),this._moved=!0),z(this._animRequest);var r=o(i._move,i,this._center,this._zoom,{pinch:!0,round:!1});this._animRequest=M(r,this,!0),Ui(t)}},_onTouchEnd:function(){this._moved&&this._zooming?(this._zooming=!1,z(this._animRequest),Di(document,"touchmove",this._onTouchMove,this),Di(document,"touchend",this._onTouchEnd,this),this._map.options.zoomAnimation?this._map._animateZoom(this._center,this._map._limitZoom(this._zoom),!0,this._map.options.zoomSnap):this._map._resetView(this._center,this._map._limitZoom(this._zoom))):this._zooming=!1}});ie.addInitHook("addHandler","touchZoom",eo),ie.BoxZoom=Jn,ie.DoubleClickZoom=Xn,ie.Drag=$n,ie.Keyboard=Qn,ie.ScrollWheelZoom=to,ie.Tap=io,ie.TouchZoom=eo,t.version=i,t.Control=ne,t.control=oe,t.Browser=At,t.Evented=Z,t.Mixin=me,t.Util=C,t.Class=S,t.Handler=_e,t.extend=e,t.bind=o,t.stamp=a,t.setOptions=_,t.DomEvent=Qi,t.DomUtil=Ai,t.PosAnimation=te,t.Draggable=ye,t.LineUtil=Ae,t.PolyUtil=Be,t.Point=A,t.point=B,t.Bounds=D,t.bounds=O,t.Transformation=G,t.transformation=K,t.Projection=Re,t.LatLng=j,t.latLng=F,t.LatLngBounds=R,t.latLngBounds=N,t.CRS=W,t.GeoJSON=ln,t.geoJSON=yn,t.geoJson=xn,t.Layer=He,t.LayerGroup=We,t.layerGroup=Ue,t.FeatureGroup=Ve,t.featureGroup=qe,t.ImageOverlay=wn,t.imageOverlay=Pn,t.VideoOverlay=Ln,t.videoOverlay=bn,t.SVGOverlay=Tn,t.svgOverlay=Mn,t.DivOverlay=zn,t.Popup=Cn,t.popup=Sn,t.Tooltip=En,t.tooltip=kn,t.Icon=Ge,t.icon=Ke,t.DivIcon=Zn,t.divIcon=An,t.Marker=Xe,t.marker=$e,t.TileLayer=Dn,t.tileLayer=On,t.GridLayer=In,t.gridLayer=Bn,t.SVG=qn,t.svg=Gn,t.Renderer=jn,t.Canvas=Fn,t.canvas=Hn,t.Path=Qe,t.CircleMarker=tn,t.circleMarker=en,t.Circle=nn,t.circle=on,t.Polyline=sn,t.polyline=an,t.Polygon=rn,t.polygon=hn,t.Rectangle=Kn,t.rectangle=Yn,t.Map=ie,t.map=ee;var no=window.L;t.noConflict=function(){return window.L=no,this},window.L=t})(o.exports);class s{static getIconColor(t){return t.color&&s.supportedIconColors.includes(t.color)?t.color:"red"}static sanitizeAndFilterFrames(t,i){var n,o;let s=(null===(n=t.radar)||void 0===n?void 0:n.past)||[],a=(null===(o=t.radar)||void 0===o?void 0:o.nowcast)||[];if(i.maxHistoryFrames>=0&&s.length>=i.maxHistoryFrames)try{s=s.slice(s.length-i.maxHistoryFrames)}catch(t){e.warn("Error to limit history frames",t)}if(i.maxForecastFrames>=0&&a.length>=i.maxForecastFrames)try{a=a.slice(a.length-i.maxForecastFrames)}catch(t){e.warn("Error to limit forecast frames",t)}return{historyFrames:s,forecastFrames:a}}static changeSubstituteModuleVisibility(t,i){if(i.substitudeModules)try{for(const n of i.substitudeModules){const i=MM.getModules().find((t=>t.name===n));i?t?i.show(300,(()=>{}),{lockString:"MMM-RAIN-MAP"}):i.hide(300,(()=>{}),{lockString:"MMM-RAIN-MAP"}):e.warn(`No substitute module found with name ${n}`)}}catch(t){e.error(t)}}}s.supportedIconColors=["black","blue","gold","green","grey","orange","red","violet","yellow"],s.rainConditions=["09d","09n","10d","10n","11d","11n","13d","13n","showers","thunderstorm","sleet","rain","snow"],Module.register("MMM-RAIN-MAP",{defaults:{animationSpeedMs:400,colorizeTime:!0,colorScheme:2,defaultZoomLevel:8,displayClockSymbol:!0,displayTime:!0,displayTimeline:!0,displayOnlyOnRain:!1,substitudeModules:[],extraDelayLastFrameMs:2e3,extraDelayCurrentFrameMs:2e3,markers:[{lat:49.41,lng:8.717,color:"red"},{lat:48.856,lng:2.35,color:"green"}],mapPositions:[{lat:49.41,lng:8.717,zoom:9,loops:1},{lat:49.41,lng:8.717,zoom:6,loops:2},{lat:48.856,lng:2.35,zoom:6,loops:1},{lat:48.856,lng:2.35,zoom:9,loops:2},{lat:49.15,lng:6.154,zoom:5,loops:2}],mapUrl:"https://a.tile.openstreetmap.de/${z}/${x}/${y}.png",mapHeight:"420px",mapWidth:"420px",maxHistoryFrames:-1,maxForecastFrames:-1,timeFormat:config.timeFormat||24,timezone:null,updateIntervalInSeconds:300},runtimeData:{animationPosition:0,animationTimer:null,map:null,mapPosition:0,numHistoryFrames:0,numForecastFrames:0,loopNumber:1,radarLayers:[],timeDiv:null,timeframes:[]},getStyles:()=>["font-awesome.css","leaflet.css","MMM-RAIN-MAP.css"],getScripts:()=>["moment.js","moment-timezone.js"],getTranslations:()=>({en:"translations/en.json",de:"translations/de.json"}),getDom(){const t=document.createElement("div");if(t.classList.add("rain-map-wrapper"),this.config.displayTime){const i=document.createElement("div");if(i.classList.add("rain-map-time-wrapper"),i.innerHTML=""+(this.config.displayClockSymbol?"":""),this.runtimeData.timeDiv=document.createElement("span"),this.runtimeData.timeDiv.classList.add("rain-map-time"),i.appendChild(this.runtimeData.timeDiv),this.config.displayTimeline){const t=document.createElement("span");t.classList.add("rain-map-timeline-wrapper"),this.runtimeData.sliderDiv=document.createElement("span"),this.runtimeData.sliderDiv.classList.add("rain-map-timeslider"),t.appendChild(this.runtimeData.sliderDiv),this.runtimeData.timelineDiv=document.createElement("span"),this.runtimeData.timelineDiv.classList.add("rain-map-timeline"),t.appendChild(this.runtimeData.timelineDiv),i.appendChild(t)}t.appendChild(i)}const i=document.createElement("div");i.style.height=this.config.mapHeight,i.style.width=this.config.mapWidth,t.appendChild(i),document.body.appendChild(t);const e=this.config.mapPositions[0];this.runtimeData.map=o.exports.map(i,{zoomControl:!1,trackResize:!1,attributionControl:!1}).setView([e.lat,e.lng],e.zoom),o.exports.tileLayer(this.config.mapUrl.split("$").join("")).addTo(this.runtimeData.map);for(const t of this.config.markers)o.exports.marker([t.lat,t.lng],{icon:new o.exports.Icon({iconUrl:this.file(`img/marker-icon-2x-${s.getIconColor(t)}.png`),shadowUrl:this.file("img/marker-shadow.png"),iconSize:[25,41],shadowSize:[41,41]})}).addTo(this.runtimeData.map);return document.body.removeChild(t),t},start(){this.scheduleUpdate(),this.play()},scheduleUpdate(){this.loadData(),setInterval((()=>{this.loadData()}),1e3*this.config.updateIntervalInSeconds)},play(){let t=0;this.runtimeData.animationPosition===this.runtimeData.timeframes.length-1?t=this.config.extraDelayLastFrameMs:this.runtimeData.animationPosition===this.runtimeData.numHistoryFrames-1&&(t=this.config.extraDelayCurrentFrameMs),this.runtimeData.animationTimer=setTimeout((()=>{this.tick(),this.play()}),this.config.animationSpeedMs+t)},tick(){if(!this.runtimeData.map||0===this.runtimeData.timeframes.length)return;const t=this.runtimeData.animationPosition1){const t=this.config.mapPositions[this.runtimeData.mapPosition];if(this.runtimeData.loopNumber===(t.loops||1)){this.runtimeData.loopNumber=1;const t=this.runtimeData.mapPosition===this.config.mapPositions.length-1?0:this.runtimeData.mapPosition+1;this.runtimeData.mapPosition=t;const i=this.config.mapPositions[t];this.runtimeData.map.setView(new o.exports.LatLng(i.lat,i.lng),i.zoom||this.config.defaultZoomLevel,{animation:!1})}else this.runtimeData.loopNumber+=1}const i=this.runtimeData.timeframes[this.runtimeData.animationPosition],e=this.runtimeData.radarLayers[i.time],n=this.runtimeData.timeframes[t],s=this.runtimeData.radarLayers[n.time];if(s&&s.setOpacity(1),e&&e.setOpacity(.001),this.config.displayTime){const i=moment(1e3*n.time);this.config.timezone&&i.tz(this.config.timezone);const e=24===this.config.timeFormat?"HH":"h";this.runtimeData.timeDiv.innerHTML=`${i.format(`${e}:mm`)}`,this.config.colorizeTime&&(tn(this,void 0,void 0,(function*(){if(t.ok){const i=yield t.json(),{historyFrames:n,forecastFrames:a}=s.sanitizeAndFilterFrames(i,this.config);this.runtimeData.numHistoryFrames=n.length,this.runtimeData.numForecastFrames=a.length,this.runtimeData.timeframes=[...n,...a],this.runtimeData.map.eachLayer((t=>{t instanceof o.exports.TileLayer&&t._url.includes("rainviewer.com")&&this.runtimeData.map.removeLayer(t)})),this.runtimeData.radarLayers=[];for(const t of this.runtimeData.timeframes){const i=new o.exports.TileLayer(`https://tilecache.rainviewer.com${t.path}/256/{z}/{x}/{y}/${this.config.colorScheme}/1_1.png`,{tileSize:256,opacity:.001,zIndex:t});this.runtimeData.radarLayers[t.time]=i,this.runtimeData.map.hasLayer(i)||this.runtimeData.map.addLayer(i)}if(this.runtimeData.animationPosition=0,this.config.displayTimeline)try{this.runtimeData.percentPerFrame=100/(this.runtimeData.numHistoryFrames+this.runtimeData.numForecastFrames);const t=(this.runtimeData.numHistoryFrames-1)*this.runtimeData.percentPerFrame,i=this.runtimeData.numForecastFrames*this.runtimeData.percentPerFrame;this.runtimeData.timelineDiv.style.background=`linear-gradient(to right, var(--color-history) 0% ${t}%, var(--color-now) ${t}% ${t+this.runtimeData.percentPerFrame}%, var(--color-forecast) ${i}%)`}catch(t){e.warn("Error rendering the map timeline")}e.log("Done processing latest RainViewer API request.")}else e.error("Error fetching RainViewer timeframes",t.statusText)}))))},notificationReceived(t,i){var e,n;if(this.config.displayOnlyOnRain)if("OPENWEATHER_FORECAST_WEATHER_UPDATE"===t){const t=null===(n=null===(e=i.current)||void 0===e?void 0:e.weather[0])||void 0===n?void 0:n.icon;this.handleCurrentWeatherCondition(t)}else if("CURRENTWEATHER_TYPE"===t){const t=i.type;this.handleCurrentWeatherCondition(t)}else"DOM_OBJECTS_CREATED"===t&&s.changeSubstituteModuleVisibility(!1,this.config)},handleCurrentWeatherCondition(t){t&&s.rainConditions.findIndex((i=>t.includes(i)))>=0?this.runtimeData.animationTimer||(s.changeSubstituteModuleVisibility(!1,this.config),this.show(300,(()=>{}),{lockString:this.identifier}),this.play()):this.runtimeData.animationTimer&&(this.hide(300,(()=>{}),{lockString:this.identifier}),clearTimeout(this.runtimeData.animationTimer),this.runtimeData.animationTimer=null,s.changeSubstituteModuleVisibility(!0,this.config))}})}(Log); + ***************************************************************************** */function n(t,i,e,n){return new(e||(e=Promise))((function(o,s){function a(t){try{h(n.next(t))}catch(t){s(t)}}function r(t){try{h(n.throw(t))}catch(t){s(t)}}function h(t){var i;t.done?o(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(a,r)}h((n=n.apply(t,i||[])).next())}))}"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var o={exports:{}};(function(t){var i="1.7.1";function e(t){var i,e,n,o;for(e=1,n=arguments.length;e0?Math.floor(t):Math.ceil(t)};function B(t,i,e){return t instanceof A?t:g(t)?new A(t[0],t[1]):null==t?t:"object"==typeof t&&"x"in t&&"y"in t?new A(t.x,t.y):new A(t,i,e)}function D(t,i){if(t)for(var e=i?[t,i]:t,n=0,o=e.length;n=this.min.x&&e.x<=this.max.x&&i.y>=this.min.y&&e.y<=this.max.y},intersects:function(t){t=O(t);var i=this.min,e=this.max,n=t.min,o=t.max,s=o.x>=i.x&&n.x<=e.x,a=o.y>=i.y&&n.y<=e.y;return s&&a},overlaps:function(t){t=O(t);var i=this.min,e=this.max,n=t.min,o=t.max,s=o.x>i.x&&n.xi.y&&n.y=n.lat&&e.lat<=o.lat&&i.lng>=n.lng&&e.lng<=o.lng},intersects:function(t){t=N(t);var i=this._southWest,e=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),s=o.lat>=i.lat&&n.lat<=e.lat,a=o.lng>=i.lng&&n.lng<=e.lng;return s&&a},overlaps:function(t){t=N(t);var i=this._southWest,e=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),s=o.lat>i.lat&&n.lati.lng&&n.lng1,Ct=function(){var t=!1;try{var i=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("testPassiveEventSupport",l,i),window.removeEventListener("testPassiveEventSupport",l,i)}catch(t){}return t}(),St=!!document.createElement("canvas").getContext,Et=!(!document.createElementNS||!X("svg").createSVGRect),kt=!Et&&function(){try{var t=document.createElement("div");t.innerHTML='';var i=t.firstChild;return i.style.behavior="url(#default#VML)",i&&"object"==typeof i.adj}catch(t){return!1}}();function Zt(t){return navigator.userAgent.toLowerCase().indexOf(t)>=0}var At={ie:tt,ielt9:it,edge:et,webkit:nt,android:ot,android23:st,androidStock:rt,opera:ht,chrome:lt,gecko:ut,safari:ct,phantom:dt,opera12:_t,win:pt,ie3d:mt,webkit3d:ft,gecko3d:gt,any3d:vt,mobile:yt,mobileWebkit:xt,mobileWebkit3d:wt,msPointer:Pt,pointer:Lt,touch:bt,mobileOpera:Tt,mobileGecko:Mt,retina:zt,passiveEvents:Ct,canvas:St,svg:Et,vml:kt},It=Pt?"MSPointerDown":"pointerdown",Bt=Pt?"MSPointerMove":"pointermove",Dt=Pt?"MSPointerUp":"pointerup",Ot=Pt?"MSPointerCancel":"pointercancel",Rt={},Nt=!1;function jt(t,i,e,n){return"touchstart"===i?Ht(t,e,n):"touchmove"===i?Gt(t,e,n):"touchend"===i&&Kt(t,e,n),this}function Ft(t,i,e){var n=t["_leaflet_"+i+e];return"touchstart"===i?t.removeEventListener(It,n,!1):"touchmove"===i?t.removeEventListener(Bt,n,!1):"touchend"===i&&(t.removeEventListener(Dt,n,!1),t.removeEventListener(Ot,n,!1)),this}function Ht(t,i,e){var n=o((function(t){t.MSPOINTER_TYPE_TOUCH&&t.pointerType===t.MSPOINTER_TYPE_TOUCH&&Ui(t),qt(t,i)}));t["_leaflet_touchstart"+e]=n,t.addEventListener(It,n,!1),Nt||(document.addEventListener(It,Wt,!0),document.addEventListener(Bt,Ut,!0),document.addEventListener(Dt,Vt,!0),document.addEventListener(Ot,Vt,!0),Nt=!0)}function Wt(t){Rt[t.pointerId]=t}function Ut(t){Rt[t.pointerId]&&(Rt[t.pointerId]=t)}function Vt(t){delete Rt[t.pointerId]}function qt(t,i){for(var e in t.touches=[],Rt)t.touches.push(Rt[e]);t.changedTouches=[t],i(t)}function Gt(t,i,e){var n=function(t){t.pointerType===(t.MSPOINTER_TYPE_MOUSE||"mouse")&&0===t.buttons||qt(t,i)};t["_leaflet_touchmove"+e]=n,t.addEventListener(Bt,n,!1)}function Kt(t,i,e){var n=function(t){qt(t,i)};t["_leaflet_touchend"+e]=n,t.addEventListener(Dt,n,!1),t.addEventListener(Ot,n,!1)}var Yt=Pt?"MSPointerDown":Lt?"pointerdown":"touchstart",Jt=Pt?"MSPointerUp":Lt?"pointerup":"touchend",Xt="_leaflet_";function $t(t,i,e){var n,o,s=!1,a=250;function r(t){if(Lt){if(!t.isPrimary)return;if("mouse"===t.pointerType)return}else if(t.touches.length>1)return;var i=Date.now(),e=i-(n||i);o=t.touches?t.touches[0]:t,s=e>0&&e<=a,n=i}function h(t){if(s&&!o.cancelBubble){if(Lt){if("mouse"===t.pointerType)return;var e,a,r={};for(a in o)e=o[a],r[a]=e&&e.bind?e.bind(o):e;o=r}o.type="dblclick",o.button=0,i(o),n=null}}return t[Xt+Yt+e]=r,t[Xt+Jt+e]=h,t[Xt+"dblclick"+e]=i,t.addEventListener(Yt,r,!!Ct&&{passive:!1}),t.addEventListener(Jt,h,!!Ct&&{passive:!1}),t.addEventListener("dblclick",i,!1),this}function Qt(t,i){var e=t[Xt+Yt+i],n=t[Xt+Jt+i],o=t[Xt+"dblclick"+i];return t.removeEventListener(Yt,e,!!Ct&&{passive:!1}),t.removeEventListener(Jt,n,!!Ct&&{passive:!1}),t.removeEventListener("dblclick",o,!1),this}var ti,ii,ei,ni,oi,si=Pi(["transform","webkitTransform","OTransform","MozTransform","msTransform"]),ai=Pi(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),ri="webkitTransition"===ai||"OTransition"===ai?ai+"End":"transitionend";function hi(t){return"string"==typeof t?document.getElementById(t):t}function li(t,i){var e=t.style[i]||t.currentStyle&&t.currentStyle[i];if((!e||"auto"===e)&&document.defaultView){var n=document.defaultView.getComputedStyle(t,null);e=n?n[i]:null}return"auto"===e?null:e}function ui(t,i,e){var n=document.createElement(t);return n.className=i||"",e&&e.appendChild(n),n}function ci(t){var i=t.parentNode;i&&i.removeChild(t)}function di(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function _i(t){var i=t.parentNode;i&&i.lastChild!==t&&i.appendChild(t)}function pi(t){var i=t.parentNode;i&&i.firstChild!==t&&i.insertBefore(t,i.firstChild)}function mi(t,i){if(void 0!==t.classList)return t.classList.contains(i);var e=yi(t);return e.length>0&&new RegExp("(^|\\s)"+i+"(\\s|$)").test(e)}function fi(t,i){if(void 0!==t.classList)for(var e=d(i),n=0,o=e.length;nthis.options.maxZoom)?this.setZoom(t):this},panInsideBounds:function(t,i){this._enforcingBounds=!0;var e=this.getCenter(),n=this._limitCenter(e,this._zoom,N(t));return e.equals(n)||this.panTo(n,i),this._enforcingBounds=!1,this},panInside:function(t,i){var e=B((i=i||{}).paddingTopLeft||i.padding||[0,0]),n=B(i.paddingBottomRight||i.padding||[0,0]),o=this.getCenter(),s=this.project(o),a=this.project(t),r=this.getPixelBounds(),h=r.getSize().divideBy(2),l=O([r.min.add(e),r.max.subtract(n)]);if(!l.contains(a)){this._enforcingBounds=!0;var u=s.subtract(a),c=B(a.x+u.x,a.y+u.y);(a.xl.max.x)&&(c.x=s.x-u.x,u.x>0?c.x+=h.x-e.x:c.x-=h.x-n.x),(a.yl.max.y)&&(c.y=s.y-u.y,u.y>0?c.y+=h.y-e.y:c.y-=h.y-n.y),this.panTo(this.unproject(c),i),this._enforcingBounds=!1}return this},invalidateSize:function(t){if(!this._loaded)return this;t=e({animate:!1,pan:!0},!0===t?{animate:!0}:t);var i=this.getSize();this._sizeChanged=!0,this._lastCenter=null;var n=this.getSize(),s=i.divideBy(2).round(),a=n.divideBy(2).round(),r=s.subtract(a);return r.x||r.y?(t.animate&&t.pan?this.panBy(r):(t.pan&&this._rawPanBy(r),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(o(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:i,newSize:n})):this},stop:function(){return this.setZoom(this._limitZoom(this._zoom)),this.options.zoomSnap||this.fire("viewreset"),this._stop()},locate:function(t){if(t=this._locateOptions=e({timeout:1e4,watch:!1},t),!("geolocation"in navigator))return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var i=o(this._handleGeolocationResponse,this),n=o(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(i,n,t):navigator.geolocation.getCurrentPosition(i,n,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){var i=t.code,e=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+e+"."})},_handleGeolocationResponse:function(t){var i=new j(t.coords.latitude,t.coords.longitude),e=i.toBounds(2*t.coords.accuracy),n=this._locateOptions;if(n.setView){var o=this.getBoundsZoom(e);this.setView(i,n.maxZoom?Math.min(o,n.maxZoom):o)}var s={latlng:i,bounds:e,timestamp:t.timestamp};for(var a in t.coords)"number"==typeof t.coords[a]&&(s[a]=t.coords[a]);this.fire("locationfound",s)},addHandler:function(t,i){if(!i)return this;var e=this[t]=new i(this);return this._handlers.push(e),this.options[t]&&e.enable(),this},remove:function(){if(this._initEvents(!0),this.off("moveend",this._panInsideMaxBounds),this._containerId!==this._container._leaflet_id)throw new Error("Map container is being reused by another instance");try{delete this._container._leaflet_id,delete this._containerId}catch(t){this._container._leaflet_id=void 0,this._containerId=void 0}var t;for(t in void 0!==this._locationWatchId&&this.stopLocate(),this._stop(),ci(this._mapPane),this._clearControlPos&&this._clearControlPos(),this._resizeRequest&&(z(this._resizeRequest),this._resizeRequest=null),this._clearHandlers(),this._loaded&&this.fire("unload"),this._layers)this._layers[t].remove();for(t in this._panes)ci(this._panes[t]);return this._layers=[],this._panes=[],delete this._mapPane,delete this._renderer,this},createPane:function(t,i){var e=ui("div","leaflet-pane"+(t?" leaflet-"+t.replace("Pane","")+"-pane":""),i||this._mapPane);return t&&(this._panes[t]=e),e},getCenter:function(){return this._checkIfLoaded(),this._lastCenter&&!this._moved()?this._lastCenter:this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds();return new R(this.unproject(t.getBottomLeft()),this.unproject(t.getTopRight()))},getMinZoom:function(){return void 0===this.options.minZoom?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return void 0===this.options.maxZoom?void 0===this._layersMaxZoom?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,i,e){t=N(t),e=B(e||[0,0]);var n=this.getZoom()||0,o=this.getMinZoom(),s=this.getMaxZoom(),a=t.getNorthWest(),r=t.getSouthEast(),h=this.getSize().subtract(e),l=O(this.project(r,n),this.project(a,n)).getSize(),u=vt?this.options.zoomSnap:1,c=h.x/l.x,d=h.y/l.y,_=i?Math.max(c,d):Math.min(c,d);return n=this.getScaleZoom(_,n),u&&(n=Math.round(n/(u/100))*(u/100),n=i?Math.ceil(n/u)*u:Math.floor(n/u)*u),Math.max(o,Math.min(s,n))},getSize:function(){return this._size&&!this._sizeChanged||(this._size=new A(this._container.clientWidth||0,this._container.clientHeight||0),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(t,i){var e=this._getTopLeftPoint(t,i);return new D(e,e.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._pixelOrigin},getPixelWorldBounds:function(t){return this.options.crs.getProjectedBounds(void 0===t?this.getZoom():t)},getPane:function(t){return"string"==typeof t?this._panes[t]:t},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t,i){var e=this.options.crs;return i=void 0===i?this._zoom:i,e.scale(t)/e.scale(i)},getScaleZoom:function(t,i){var e=this.options.crs;i=void 0===i?this._zoom:i;var n=e.zoom(t*e.scale(i));return isNaN(n)?1/0:n},project:function(t,i){return i=void 0===i?this._zoom:i,this.options.crs.latLngToPoint(F(t),i)},unproject:function(t,i){return i=void 0===i?this._zoom:i,this.options.crs.pointToLatLng(B(t),i)},layerPointToLatLng:function(t){var i=B(t).add(this.getPixelOrigin());return this.unproject(i)},latLngToLayerPoint:function(t){return this.project(F(t))._round()._subtract(this.getPixelOrigin())},wrapLatLng:function(t){return this.options.crs.wrapLatLng(F(t))},wrapLatLngBounds:function(t){return this.options.crs.wrapLatLngBounds(N(t))},distance:function(t,i){return this.options.crs.distance(F(t),F(i))},containerPointToLayerPoint:function(t){return B(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return B(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(B(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(F(t)))},mouseEventToContainerPoint:function(t){return qi(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=hi(t);if(!i)throw new Error("Map container not found.");if(i._leaflet_id)throw new Error("Map container is already initialized.");Ii(i,"scroll",this._onScroll,this),this._containerId=a(i)},_initLayout:function(){var t=this._container;this._fadeAnimated=this.options.fadeAnimation&&vt,fi(t,"leaflet-container"+(bt?" leaflet-touch":"")+(zt?" leaflet-retina":"")+(it?" leaflet-oldie":"")+(ct?" leaflet-safari":"")+(this._fadeAnimated?" leaflet-fade-anim":""));var i=li(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._paneRenderers={},this._mapPane=this.createPane("mapPane",this._container),bi(this._mapPane,new A(0,0)),this.createPane("tilePane"),this.createPane("shadowPane"),this.createPane("overlayPane"),this.createPane("markerPane"),this.createPane("tooltipPane"),this.createPane("popupPane"),this.options.markerZoomAnimation||(fi(t.markerPane,"leaflet-zoom-hide"),fi(t.shadowPane,"leaflet-zoom-hide"))},_resetView:function(t,i){bi(this._mapPane,new A(0,0));var e=!this._loaded;this._loaded=!0,i=this._limitZoom(i),this.fire("viewprereset");var n=this._zoom!==i;this._moveStart(n,!1)._move(t,i)._moveEnd(n),this.fire("viewreset"),e&&this.fire("load")},_moveStart:function(t,i){return t&&this.fire("zoomstart"),i||this.fire("movestart"),this},_move:function(t,i,e){void 0===i&&(i=this._zoom);var n=this._zoom!==i;return this._zoom=i,this._lastCenter=t,this._pixelOrigin=this._getNewPixelOrigin(t),(n||e&&e.pinch)&&this.fire("zoom",e),this.fire("move",e)},_moveEnd:function(t){return t&&this.fire("zoomend"),this.fire("moveend")},_stop:function(){return z(this._flyToFrame),this._panAnim&&this._panAnim.stop(),this},_rawPanBy:function(t){bi(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_panInsideMaxBounds:function(){this._enforcingBounds||this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(t){this._targets={},this._targets[a(this._container)]=this;var i=t?Di:Ii;i(this._container,"click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress keydown keyup",this._handleDOMEvent,this),this.options.trackResize&&i(window,"resize",this._onResize,this),vt&&this.options.transform3DLimit&&(t?this.off:this.on).call(this,"moveend",this._onMoveEnd)},_onResize:function(){z(this._resizeRequest),this._resizeRequest=M((function(){this.invalidateSize({debounceMoveend:!0})}),this)},_onScroll:function(){this._container.scrollTop=0,this._container.scrollLeft=0},_onMoveEnd:function(){var t=this._getMapPanePos();Math.max(Math.abs(t.x),Math.abs(t.y))>=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,i){for(var e,n=[],o="mouseout"===i||"mouseover"===i,s=t.target||t.srcElement,r=!1;s;){if((e=this._targets[a(s)])&&("click"===i||"preclick"===i)&&!t._simulated&&this._draggableMoved(e)){r=!0;break}if(e&&e.listens(i,!0)){if(o&&!$i(s,t))break;if(n.push(e),o)break}if(s===this._container)break;s=s.parentNode}return n.length||r||o||!$i(s,t)||(n=[this]),n},_handleDOMEvent:function(t){if(this._loaded&&!Xi(t)){var i=t.type;"mousedown"!==i&&"keypress"!==i&&"keyup"!==i&&"keydown"!==i||Si(t.target||t.srcElement),this._fireDOMEvent(t,i)}},_mouseEvents:["click","dblclick","mouseover","mouseout","contextmenu"],_fireDOMEvent:function(t,i,n){if("click"===t.type){var o=e({},t);o.type="preclick",this._fireDOMEvent(o,o.type,n)}if(!t._stopped&&(n=(n||[]).concat(this._findEventTargets(t,i))).length){var s=n[0];"contextmenu"===i&&s.listens(i,!0)&&Ui(t);var a={originalEvent:t};if("keypress"!==t.type&&"keydown"!==t.type&&"keyup"!==t.type){var r=s.getLatLng&&(!s._radius||s._radius<=10);a.containerPoint=r?this.latLngToContainerPoint(s.getLatLng()):this.mouseEventToContainerPoint(t),a.layerPoint=this.containerPointToLayerPoint(a.containerPoint),a.latlng=r?s.getLatLng():this.layerPointToLatLng(a.layerPoint)}for(var h=0;h0?Math.round(t-i)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(i))},_limitZoom:function(t){var i=this.getMinZoom(),e=this.getMaxZoom(),n=vt?this.options.zoomSnap:1;return n&&(t=Math.round(t/n)*n),Math.max(i,Math.min(e,t))},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){gi(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,i){var e=this._getCenterOffset(t)._trunc();return!(!0!==(i&&i.animate)&&!this.getSize().contains(e)||(this.panBy(e,i),0))},_createAnimProxy:function(){var t=this._proxy=ui("div","leaflet-proxy leaflet-zoom-animated");this._panes.mapPane.appendChild(t),this.on("zoomanim",(function(t){var i=si,e=this._proxy.style[i];Li(this._proxy,this.project(t.center,t.zoom),this.getZoomScale(t.zoom,1)),e===this._proxy.style[i]&&this._animatingZoom&&this._onZoomTransitionEnd()}),this),this.on("load moveend",this._animMoveEnd,this),this._on("unload",this._destroyAnimProxy,this)},_destroyAnimProxy:function(){ci(this._proxy),this.off("load moveend",this._animMoveEnd,this),delete this._proxy},_animMoveEnd:function(){var t=this.getCenter(),i=this.getZoom();Li(this._proxy,this.project(t,i),this.getZoomScale(i,1))},_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf("transform")>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,i,e){if(this._animatingZoom)return!0;if(e=e||{},!this._zoomAnimated||!1===e.animate||this._nothingToAnimate()||Math.abs(i-this._zoom)>this.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/n);return!(!0!==e.animate&&!this.getSize().contains(o)||(M((function(){this._moveStart(!0,!1)._animateZoom(t,i,!0)}),this),0))},_animateZoom:function(t,i,e,n){this._mapPane&&(e&&(this._animatingZoom=!0,this._animateToCenter=t,this._animateToZoom=i,fi(this._mapPane,"leaflet-zoom-anim")),this.fire("zoomanim",{center:t,zoom:i,noUpdate:n}),setTimeout(o(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&&gi(this._mapPane,"leaflet-zoom-anim"),this._animatingZoom=!1,this._move(this._animateToCenter,this._animateToZoom),M((function(){this._moveEnd(!0)}),this))}});function ee(t,i){return new ie(t,i)}var ne=S.extend({options:{position:"topright"},initialize:function(t){_(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this.remove(),this._map=t;var i=this._container=this.onAdd(t),e=this.getPosition(),n=t._controlCorners[e];return fi(i,"leaflet-control"),-1!==e.indexOf("bottom")?n.insertBefore(i,n.firstChild):n.appendChild(i),this._map.on("unload",this.remove,this),this},remove:function(){return this._map?(ci(this._container),this.onRemove&&this.onRemove(this._map),this._map.off("unload",this.remove,this),this._map=null,this):this},_refocusOnMap:function(t){this._map&&t&&t.screenX>0&&t.screenY>0&&this._map.getContainer().focus()}}),oe=function(t){return new ne(t)};ie.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.remove(),this},_initControlPos:function(){var t=this._controlCorners={},i="leaflet-",e=this._controlContainer=ui("div",i+"control-container",this._container);function n(n,o){var s=i+n+" "+i+o;t[n+o]=ui("div",s,e)}n("top","left"),n("top","right"),n("bottom","left"),n("bottom","right")},_clearControlPos:function(){for(var t in this._controlCorners)ci(this._controlCorners[t]);ci(this._controlContainer),delete this._controlCorners,delete this._controlContainer}});var se=ne.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0,hideSingleBase:!1,sortLayers:!1,sortFunction:function(t,i,e,n){return e1,this._baseLayersList.style.display=t?"":"none"),this._separator.style.display=i&&t?"":"none",this},_onLayerChange:function(t){this._handlingClick||this._update();var i=this._getLayer(a(t.target)),e=i.overlay?"add"===t.type?"overlayadd":"overlayremove":"add"===t.type?"baselayerchange":null;e&&this._map.fire(e,i)},_createRadioElement:function(t,i){var e='",n=document.createElement("div");return n.innerHTML=e,n.firstChild},_addItem:function(t){var i,e=document.createElement("label"),n=this._map.hasLayer(t.layer);t.overlay?((i=document.createElement("input")).type="checkbox",i.className="leaflet-control-layers-selector",i.defaultChecked=n):i=this._createRadioElement("leaflet-base-layers_"+a(this),n),this._layerControlInputs.push(i),i.layerId=a(t.layer),Ii(i,"click",this._onInputClick,this);var o=document.createElement("span");o.innerHTML=" "+t.name;var s=document.createElement("div");return e.appendChild(s),s.appendChild(i),s.appendChild(o),(t.overlay?this._overlaysList:this._baseLayersList).appendChild(e),this._checkDisabledLayers(),e},_onInputClick:function(){var t,i,e=this._layerControlInputs,n=[],o=[];this._handlingClick=!0;for(var s=e.length-1;s>=0;s--)t=e[s],i=this._getLayer(t.layerId).layer,t.checked?n.push(i):t.checked||o.push(i);for(s=0;s=0;o--)t=e[o],i=this._getLayer(t.layerId).layer,t.disabled=void 0!==i.options.minZoom&&ni.options.maxZoom},_expandIfNotCollapsed:function(){return this._map&&!this.options.collapsed&&this.expand(),this},_expand:function(){return this.expand()},_collapse:function(){return this.collapse()}}),ae=function(t,i,e){return new se(t,i,e)},re=ne.extend({options:{position:"topleft",zoomInText:"+",zoomInTitle:"Zoom in",zoomOutText:"−",zoomOutTitle:"Zoom out"},onAdd:function(t){var i="leaflet-control-zoom",e=ui("div",i+" leaflet-bar"),n=this.options;return this._zoomInButton=this._createButton(n.zoomInText,n.zoomInTitle,i+"-in",e,this._zoomIn),this._zoomOutButton=this._createButton(n.zoomOutText,n.zoomOutTitle,i+"-out",e,this._zoomOut),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),e},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},disable:function(){return this._disabled=!0,this._updateDisabled(),this},enable:function(){return this._disabled=!1,this._updateDisabled(),this},_zoomIn:function(t){!this._disabled&&this._map._zoomthis._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(t.shiftKey?3:1))},_createButton:function(t,i,e,n,o){var s=ui("a",e,n);return s.innerHTML=t,s.href="#",s.title=i,s.setAttribute("role","button"),s.setAttribute("aria-label",i),Wi(s),Ii(s,"click",Vi),Ii(s,"click",o,this),Ii(s,"click",this._refocusOnMap,this),s},_updateDisabled:function(){var t=this._map,i="leaflet-disabled";gi(this._zoomInButton,i),gi(this._zoomOutButton,i),(this._disabled||t._zoom===t.getMinZoom())&&fi(this._zoomOutButton,i),(this._disabled||t._zoom===t.getMaxZoom())&&fi(this._zoomInButton,i)}});ie.mergeOptions({zoomControl:!0}),ie.addInitHook((function(){this.options.zoomControl&&(this.zoomControl=new re,this.addControl(this.zoomControl))}));var he=function(t){return new re(t)},le=ne.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var i="leaflet-control-scale",e=ui("div",i),n=this.options;return this._addScales(n,i+"-line",e),t.on(n.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),e},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,e){t.metric&&(this._mScale=ui("div",i,e)),t.imperial&&(this._iScale=ui("div",i,e))},_update:function(){var t=this._map,i=t.getSize().y/2,e=t.distance(t.containerPointToLatLng([0,i]),t.containerPointToLatLng([this.options.maxWidth,i]));this._updateScales(e)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var i=this._getRoundNum(t),e=i<1e3?i+" m":i/1e3+" km";this._updateScale(this._mScale,e,i/t)},_updateImperial:function(t){var i,e,n,o=3.2808399*t;o>5280?(i=o/5280,e=this._getRoundNum(i),this._updateScale(this._iScale,e+" mi",e/i)):(n=this._getRoundNum(o),this._updateScale(this._iScale,n+" ft",n/o))},_updateScale:function(t,i,e){t.style.width=Math.round(this.options.maxWidth*e)+"px",t.innerHTML=i},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),e=t/i;return i*(e=e>=10?10:e>=5?5:e>=3?3:e>=2?2:1)}}),ue=function(t){return new le(t)},ce=ne.extend({options:{position:"bottomright",prefix:'Leaflet'},initialize:function(t){_(this,t),this._attributions={}},onAdd:function(t){for(var i in t.attributionControl=this,this._container=ui("div","leaflet-control-attribution"),Wi(this._container),t._layers)t._layers[i].getAttribution&&this.addAttribution(t._layers[i].getAttribution());return this._update(),this._container},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):this},removeAttribution:function(t){return t?(this._attributions[t]&&(this._attributions[t]--,this._update()),this):this},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions[i]&&t.push(i);var e=[];this.options.prefix&&e.push(this.options.prefix),t.length&&e.push(t.join(", ")),this._container.innerHTML=e.join(" | ")}}});ie.mergeOptions({attributionControl:!0}),ie.addInitHook((function(){this.options.attributionControl&&(new ce).addTo(this)}));var de=function(t){return new ce(t)};ne.Layers=se,ne.Zoom=re,ne.Scale=le,ne.Attribution=ce,oe.layers=ae,oe.zoom=he,oe.scale=ue,oe.attribution=de;var _e=S.extend({initialize:function(t){this._map=t},enable:function(){return this._enabled||(this._enabled=!0,this.addHooks()),this},disable:function(){return this._enabled?(this._enabled=!1,this.removeHooks(),this):this},enabled:function(){return!!this._enabled}});_e.addTo=function(t,i){return t.addHandler(i,this),this};var pe,me={Events:k},fe=bt?"touchstart mousedown":"mousedown",ge={mousedown:"mouseup",touchstart:"touchend",pointerdown:"touchend",MSPointerDown:"touchend"},ve={mousedown:"mousemove",touchstart:"touchmove",pointerdown:"touchmove",MSPointerDown:"touchmove"},ye=Z.extend({options:{clickTolerance:3},initialize:function(t,i,e,n){_(this,n),this._element=t,this._dragStartTarget=i||t,this._preventOutline=e},enable:function(){this._enabled||(Ii(this._dragStartTarget,fe,this._onDown,this),this._enabled=!0)},disable:function(){this._enabled&&(ye._dragging===this&&this.finishDrag(),Di(this._dragStartTarget,fe,this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(t){if(!t._simulated&&this._enabled&&(this._moved=!1,!mi(this._element,"leaflet-zoom-anim")&&!(ye._dragging||t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(ye._dragging=this,this._preventOutline&&Si(this._element),zi(),ti(),this._moving)))){this.fire("down");var i=t.touches?t.touches[0]:t,e=ki(this._element);this._startPoint=new A(i.clientX,i.clientY),this._parentScale=Zi(e),Ii(document,ve[t.type],this._onMove,this),Ii(document,ge[t.type],this._onUp,this)}},_onMove:function(t){if(!t._simulated&&this._enabled)if(t.touches&&t.touches.length>1)this._moved=!0;else{var i=t.touches&&1===t.touches.length?t.touches[0]:t,e=new A(i.clientX,i.clientY)._subtract(this._startPoint);(e.x||e.y)&&(Math.abs(e.x)+Math.abs(e.y)h&&(s=a,h=r);h>e&&(i[s]=1,be(t,i,e,n,s),be(t,i,e,s,o))}function Te(t,i){for(var e=[t[0]],n=1,o=0,s=t.length;ni&&(e.push(t[n]),o=n);return oi.max.x&&(e|=2),t.yi.max.y&&(e|=8),e}function Se(t,i){var e=i.x-t.x,n=i.y-t.y;return e*e+n*n}function Ee(t,i,e,n){var o,s=i.x,a=i.y,r=e.x-s,h=e.y-a,l=r*r+h*h;return l>0&&((o=((t.x-s)*r+(t.y-a)*h)/l)>1?(s=e.x,a=e.y):o>0&&(s+=r*o,a+=h*o)),r=t.x-s,h=t.y-a,n?r*r+h*h:new A(s,a)}function ke(t){return!g(t[0])||"object"!=typeof t[0][0]&&void 0!==t[0][0]}function Ze(t){return console.warn("Deprecated use of _flat, please use L.LineUtil.isFlat instead."),ke(t)}var Ae={simplify:xe,pointToSegmentDistance:we,closestPointOnSegment:Pe,clipSegment:Me,_getEdgeIntersection:ze,_getBitCode:Ce,_sqClosestPointOnSegment:Ee,isFlat:ke,_flat:Ze};function Ie(t,i,e){var n,o,s,a,r,h,l,u,c,d=[1,4,2,8];for(o=0,l=t.length;o1e-7;h++)i=s*Math.sin(r),i=Math.pow((1-i)/(1+i),s/2),r+=l=Math.PI/2-2*Math.atan(a*i)-r;return new j(r*e,t.x*e/n)}},Re={LonLat:De,Mercator:Oe,SphericalMercator:q},Ne=e({},U,{code:"EPSG:3395",projection:Oe,transformation:function(){var t=.5/(Math.PI*Oe.R);return K(t,.5,-t,.5)}()}),je=e({},U,{code:"EPSG:4326",projection:De,transformation:K(1/180,1,-1/180,.5)}),Fe=e({},W,{projection:De,transformation:K(1,0,-1,0),scale:function(t){return Math.pow(2,t)},zoom:function(t){return Math.log(t)/Math.LN2},distance:function(t,i){var e=i.lng-t.lng,n=i.lat-t.lat;return Math.sqrt(e*e+n*n)},infinite:!0});W.Earth=U,W.EPSG3395=Ne,W.EPSG3857=Y,W.EPSG900913=J,W.EPSG4326=je,W.Simple=Fe;var He=Z.extend({options:{pane:"overlayPane",attribution:null,bubblingMouseEvents:!0},addTo:function(t){return t.addLayer(this),this},remove:function(){return this.removeFrom(this._map||this._mapToAdd)},removeFrom:function(t){return t&&t.removeLayer(this),this},getPane:function(t){return this._map.getPane(t?this.options[t]||t:this.options.pane)},addInteractiveTarget:function(t){return this._map._targets[a(t)]=this,this},removeInteractiveTarget:function(t){return delete this._map._targets[a(t)],this},getAttribution:function(){return this.options.attribution},_layerAdd:function(t){var i=t.target;if(i.hasLayer(this)){if(this._map=i,this._zoomAnimated=i._zoomAnimated,this.getEvents){var e=this.getEvents();i.on(e,this),this.once("remove",(function(){i.off(e,this)}),this)}this.onAdd(i),this.getAttribution&&i.attributionControl&&i.attributionControl.addAttribution(this.getAttribution()),this.fire("add"),i.fire("layeradd",{layer:this})}}});ie.include({addLayer:function(t){if(!t._layerAdd)throw new Error("The provided object is not a Layer.");var i=a(t);return this._layers[i]||(this._layers[i]=t,t._mapToAdd=this,t.beforeAdd&&t.beforeAdd(this),this.whenReady(t._layerAdd,t)),this},removeLayer:function(t){var i=a(t);return this._layers[i]?(this._loaded&&t.onRemove(this),t.getAttribution&&this.attributionControl&&this.attributionControl.removeAttribution(t.getAttribution()),delete this._layers[i],this._loaded&&(this.fire("layerremove",{layer:t}),t.fire("remove")),t._map=t._mapToAdd=null,this):this},hasLayer:function(t){return!!t&&a(t)in this._layers},eachLayer:function(t,i){for(var e in this._layers)t.call(i,this._layers[e]);return this},_addLayers:function(t){for(var i=0,e=(t=t?g(t)?t:[t]:[]).length;ithis._layersMaxZoom&&this.setZoom(this._layersMaxZoom),void 0===this.options.minZoom&&this._layersMinZoom&&this.getZoom()i)return a=(n-i)/e,this._map.layerPointToLatLng([s.x-a*(s.x-o.x),s.y-a*(s.y-o.y)])},getBounds:function(){return this._bounds},addLatLng:function(t,i){return i=i||this._defaultShape(),t=F(t),i.push(t),this._bounds.extend(t),this.redraw()},_setLatLngs:function(t){this._bounds=new R,this._latlngs=this._convertLatLngs(t)},_defaultShape:function(){return ke(this._latlngs)?this._latlngs:this._latlngs[0]},_convertLatLngs:function(t){for(var i=[],e=ke(t),n=0,o=t.length;n=2&&i[0]instanceof j&&i[0].equals(i[e-1])&&i.pop(),i},_setLatLngs:function(t){sn.prototype._setLatLngs.call(this,t),ke(this._latlngs)&&(this._latlngs=[this._latlngs])},_defaultShape:function(){return ke(this._latlngs[0])?this._latlngs[0]:this._latlngs[0][0]},_clipPoints:function(){var t=this._renderer._bounds,i=this.options.weight,e=new A(i,i);if(t=new D(t.min.subtract(e),t.max.add(e)),this._parts=[],this._pxBounds&&this._pxBounds.intersects(t))if(this.options.noClip)this._parts=this._rings;else for(var n,o=0,s=this._rings.length;ot.y!=n.y>t.y&&t.x<(n.x-e.x)*(t.y-e.y)/(n.y-e.y)+e.x&&(l=!l);return l||sn.prototype._containsPoint.call(this,t,!0)}});function hn(t,i){return new rn(t,i)}var ln=Ve.extend({initialize:function(t,i){_(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,e,n,o=g(t)?t:t.features;if(o){for(i=0,e=o.length;i0?n:[i.src]}else{g(this._url)||(this._url=[this._url]),!this.options.keepAspectRatio&&Object.prototype.hasOwnProperty.call(i.style,"objectFit")&&(i.style.objectFit="fill"),i.autoplay=!!this.options.autoplay,i.loop=!!this.options.loop,i.muted=!!this.options.muted;for(var a=0;ao?(i.height=o+"px",fi(t,s)):gi(t,s),this._containerWidth=this._container.offsetWidth},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center),e=this._getAnchor();bi(this._container,i.add(e))},_adjustPan:function(){if(this.options.autoPan){this._map._panAnim&&this._map._panAnim.stop();var t=this._map,i=parseInt(li(this._container,"marginBottom"),10)||0,e=this._container.offsetHeight+i,n=this._containerWidth,o=new A(this._containerLeft,-e-this._containerBottom);o._add(Ti(this._container));var s=t.layerPointToContainerPoint(o),a=B(this.options.autoPanPadding),r=B(this.options.autoPanPaddingTopLeft||a),h=B(this.options.autoPanPaddingBottomRight||a),l=t.getSize(),u=0,c=0;s.x+n+h.x>l.x&&(u=s.x+n-l.x+h.x),s.x-u-r.x<0&&(u=s.x-r.x),s.y+e+h.y>l.y&&(c=s.y+e-l.y+h.y),s.y-c-r.y<0&&(c=s.y-r.y),(u||c)&&t.fire("autopanstart").panBy([u,c])}},_onCloseButtonClick:function(t){this._close(),Vi(t)},_getAnchor:function(){return B(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():[0,0])}}),Sn=function(t,i){return new Cn(t,i)};ie.mergeOptions({closePopupOnClick:!0}),ie.include({openPopup:function(t,i,e){return t instanceof Cn||(t=new Cn(e).setContent(t)),i&&t.setLatLng(i),this.hasLayer(t)?this:(this._popup&&this._popup.options.autoClose&&this.closePopup(),this._popup=t,this.addLayer(t))},closePopup:function(t){return t&&t!==this._popup||(t=this._popup,this._popup=null),t&&this.removeLayer(t),this}}),He.include({bindPopup:function(t,i){return t instanceof Cn?(_(t,i),this._popup=t,t._source=this):(this._popup&&!i||(this._popup=new Cn(i,this)),this._popup.setContent(t)),this._popupHandlersAdded||(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,this._popup=null),this},openPopup:function(t,i){return this._popup&&this._map&&(i=this._popup._prepareOpen(this,t,i),this._map.openPopup(this._popup,i)),this},closePopup:function(){return this._popup&&this._popup._close(),this},togglePopup:function(t){return this._popup&&(this._popup._map?this.closePopup():this.openPopup(t)),this},isPopupOpen:function(){return!!this._popup&&this._popup.isOpen()},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},getPopup:function(){return this._popup},_openPopup:function(t){var i=t.layer||t.target;this._popup&&this._map&&(Vi(t),i instanceof Qe?this.openPopup(t.layer||t.target,t.latlng):this._map.hasLayer(this._popup)&&this._popup._source===i?this.closePopup():this.openPopup(i,t.latlng))},_movePopup:function(t){this._popup.setLatLng(t.latlng)},_onKeyPress:function(t){13===t.originalEvent.keyCode&&this._openPopup(t)}});var En=zn.extend({options:{pane:"tooltipPane",offset:[0,0],direction:"auto",permanent:!1,sticky:!1,interactive:!1,opacity:.9},onAdd:function(t){zn.prototype.onAdd.call(this,t),this.setOpacity(this.options.opacity),t.fire("tooltipopen",{tooltip:this}),this._source&&this._source.fire("tooltipopen",{tooltip:this},!0)},onRemove:function(t){zn.prototype.onRemove.call(this,t),t.fire("tooltipclose",{tooltip:this}),this._source&&this._source.fire("tooltipclose",{tooltip:this},!0)},getEvents:function(){var t=zn.prototype.getEvents.call(this);return bt&&!this.options.permanent&&(t.preclick=this._close),t},_close:function(){this._map&&this._map.closeTooltip(this)},_initLayout:function(){var t="leaflet-tooltip "+(this.options.className||"")+" leaflet-zoom-"+(this._zoomAnimated?"animated":"hide");this._contentNode=this._container=ui("div",t)},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(t){var i,e,n=this._map,o=this._container,s=n.latLngToContainerPoint(n.getCenter()),a=n.layerPointToContainerPoint(t),r=this.options.direction,h=o.offsetWidth,l=o.offsetHeight,u=B(this.options.offset),c=this._getAnchor();"top"===r?(i=h/2,e=l):"bottom"===r?(i=h/2,e=0):"center"===r?(i=h/2,e=l/2):"right"===r?(i=0,e=l/2):"left"===r?(i=h,e=l/2):a.xthis.options.maxZoom||en&&this._retainParent(o,s,a,n))},_retainChildren:function(t,i,e,n){for(var o=2*t;o<2*t+2;o++)for(var s=2*i;s<2*i+2;s++){var a=new A(o,s);a.z=e+1;var r=this._tileCoordsToKey(a),h=this._tiles[r];h&&h.active?h.retain=!0:(h&&h.loaded&&(h.retain=!0),e+1this.options.maxZoom||void 0!==this.options.minZoom&&o1)this._setView(t,e);else{for(var c=o.min.y;c<=o.max.y;c++)for(var d=o.min.x;d<=o.max.x;d++){var _=new A(d,c);if(_.z=this._tileZoom,this._isValidTile(_)){var p=this._tiles[this._tileCoordsToKey(_)];p?p.current=!0:a.push(_)}}if(a.sort((function(t,i){return t.distanceTo(s)-i.distanceTo(s)})),0!==a.length){this._loading||(this._loading=!0,this.fire("loading"));var m=document.createDocumentFragment();for(d=0;de.max.x)||!i.wrapLat&&(t.ye.max.y))return!1}if(!this.options.bounds)return!0;var n=this._tileCoordsToBounds(t);return N(this.options.bounds).overlaps(n)},_keyToBounds:function(t){return this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToNwSe:function(t){var i=this._map,e=this.getTileSize(),n=t.scaleBy(e),o=n.add(e);return[i.unproject(n,t.z),i.unproject(o,t.z)]},_tileCoordsToBounds:function(t){var i=this._tileCoordsToNwSe(t),e=new R(i[0],i[1]);return this.options.noWrap||(e=this._map.wrapLatLngBounds(e)),e},_tileCoordsToKey:function(t){return t.x+":"+t.y+":"+t.z},_keyToTileCoords:function(t){var i=t.split(":"),e=new A(+i[0],+i[1]);return e.z=+i[2],e},_removeTile:function(t){var i=this._tiles[t];i&&(ci(i.el),delete this._tiles[t],this.fire("tileunload",{tile:i.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){fi(t,"leaflet-tile");var i=this.getTileSize();t.style.width=i.x+"px",t.style.height=i.y+"px",t.onselectstart=l,t.onmousemove=l,it&&this.options.opacity<1&&xi(t,this.options.opacity),ot&&!st&&(t.style.WebkitBackfaceVisibility="hidden")},_addTile:function(t,i){var e=this._getTilePos(t),n=this._tileCoordsToKey(t),s=this.createTile(this._wrapCoords(t),o(this._tileReady,this,t));this._initTile(s),this.createTile.length<2&&M(o(this._tileReady,this,t,null,s)),bi(s,e),this._tiles[n]={el:s,coords:t,current:!0},i.appendChild(s),this.fire("tileloadstart",{tile:s,coords:t})},_tileReady:function(t,i,e){i&&this.fire("tileerror",{error:i,tile:e,coords:t});var n=this._tileCoordsToKey(t);(e=this._tiles[n])&&(e.loaded=+new Date,this._map._fadeAnimated?(xi(e.el,0),z(this._fadeFrame),this._fadeFrame=M(this._updateOpacity,this)):(e.active=!0,this._pruneTiles()),i||(fi(e.el,"leaflet-tile-loaded"),this.fire("tileload",{tile:e.el,coords:t})),this._noTilesToLoad()&&(this._loading=!1,this.fire("load"),it||!this._map._fadeAnimated?M(this._pruneTiles,this):setTimeout(o(this._pruneTiles,this),250)))},_getTilePos:function(t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var i=new A(this._wrapX?h(t.x,this._wrapX):t.x,this._wrapY?h(t.y,this._wrapY):t.y);return i.z=t.z,i},_pxBoundsToTileRange:function(t){var i=this.getTileSize();return new D(t.min.unscaleBy(i).floor(),t.max.unscaleBy(i).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var t in this._tiles)if(!this._tiles[t].loaded)return!1;return!0}});function Bn(t){return new In(t)}var Dn=In.extend({options:{minZoom:0,maxZoom:18,subdomains:"abc",errorTileUrl:"",zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1},initialize:function(t,i){this._url=t,(i=_(this,i)).detectRetina&&zt&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomReverse?(i.zoomOffset--,i.minZoom++):(i.zoomOffset++,i.maxZoom--),i.minZoom=Math.max(0,i.minZoom)),"string"==typeof i.subdomains&&(i.subdomains=i.subdomains.split("")),ot||this.on("tileunload",this._onTileRemove)},setUrl:function(t,i){return this._url===t&&void 0===i&&(i=!0),this._url=t,i||this.redraw(),this},createTile:function(t,i){var e=document.createElement("img");return Ii(e,"load",o(this._tileOnLoad,this,i,e)),Ii(e,"error",o(this._tileOnError,this,i,e)),(this.options.crossOrigin||""===this.options.crossOrigin)&&(e.crossOrigin=!0===this.options.crossOrigin?"":this.options.crossOrigin),e.alt="",e.setAttribute("role","presentation"),e.src=this.getTileUrl(t),e},getTileUrl:function(t){var i={r:zt?"@2x":"",s:this._getSubdomain(t),x:t.x,y:t.y,z:this._getZoomForUrl()};if(this._map&&!this._map.options.crs.infinite){var n=this._globalTileRange.max.y-t.y;this.options.tms&&(i.y=n),i["-y"]=n}return f(this._url,e(i,this.options))},_tileOnLoad:function(t,i){it?setTimeout(o(t,this,null,i),0):t(null,i)},_tileOnError:function(t,i,e){var n=this.options.errorTileUrl;n&&i.getAttribute("src")!==n&&(i.src=n),t(e,i)},_onTileRemove:function(t){t.tile.onload=null},_getZoomForUrl:function(){var t=this._tileZoom,i=this.options.maxZoom;return this.options.zoomReverse&&(t=i-t),t+this.options.zoomOffset},_getSubdomain:function(t){var i=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_abortLoading:function(){var t,i;for(t in this._tiles)this._tiles[t].coords.z!==this._tileZoom&&((i=this._tiles[t].el).onload=l,i.onerror=l,i.complete||(i.src=y,ci(i),delete this._tiles[t]))},_removeTile:function(t){var i=this._tiles[t];if(i)return rt||i.el.setAttribute("src",y),In.prototype._removeTile.call(this,t)},_tileReady:function(t,i,e){if(this._map&&(!e||e.getAttribute("src")!==y))return In.prototype._tileReady.call(this,t,i,e)}});function On(t,i){return new Dn(t,i)}var Rn=Dn.extend({defaultWmsParams:{service:"WMS",request:"GetMap",layers:"",styles:"",format:"image/jpeg",transparent:!1,version:"1.1.1"},options:{crs:null,uppercase:!1},initialize:function(t,i){this._url=t;var n=e({},this.defaultWmsParams);for(var o in i)o in this.options||(n[o]=i[o]);var s=(i=_(this,i)).detectRetina&&zt?2:1,a=this.getTileSize();n.width=a.x*s,n.height=a.y*s,this.wmsParams=n},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var i=this._wmsVersion>=1.3?"crs":"srs";this.wmsParams[i]=this._crs.code,Dn.prototype.onAdd.call(this,t)},getTileUrl:function(t){var i=this._tileCoordsToNwSe(t),e=this._crs,n=O(e.project(i[0]),e.project(i[1])),o=n.min,s=n.max,a=(this._wmsVersion>=1.3&&this._crs===je?[o.y,o.x,s.y,s.x]:[o.x,o.y,s.x,s.y]).join(","),r=Dn.prototype.getTileUrl.call(this,t);return r+p(this.wmsParams,r,this.options.uppercase)+(this.options.uppercase?"&BBOX=":"&bbox=")+a},setParams:function(t,i){return e(this.wmsParams,t),i||this.redraw(),this}});function Nn(t,i){return new Rn(t,i)}Dn.WMS=Rn,On.wms=Nn;var jn=He.extend({options:{padding:.1,tolerance:0},initialize:function(t){_(this,t),a(this),this._layers=this._layers||{}},onAdd:function(){this._container||(this._initContainer(),this._zoomAnimated&&fi(this._container,"leaflet-zoom-animated")),this.getPane().appendChild(this._container),this._update(),this.on("update",this._updatePaths,this)},onRemove:function(){this.off("update",this._updatePaths,this),this._destroyContainer()},getEvents:function(){var t={viewreset:this._reset,zoom:this._onZoom,moveend:this._update,zoomend:this._onZoomEnd};return this._zoomAnimated&&(t.zoomanim=this._onAnimZoom),t},_onAnimZoom:function(t){this._updateTransform(t.center,t.zoom)},_onZoom:function(){this._updateTransform(this._map.getCenter(),this._map.getZoom())},_updateTransform:function(t,i){var e=this._map.getZoomScale(i,this._zoom),n=Ti(this._container),o=this._map.getSize().multiplyBy(.5+this.options.padding),s=this._map.project(this._center,i),a=this._map.project(t,i).subtract(s),r=o.multiplyBy(-e).add(n).add(o).subtract(a);vt?Li(this._container,r,e):bi(this._container,r)},_reset:function(){for(var t in this._update(),this._updateTransform(this._center,this._zoom),this._layers)this._layers[t]._reset()},_onZoomEnd:function(){for(var t in this._layers)this._layers[t]._project()},_updatePaths:function(){for(var t in this._layers)this._layers[t]._update()},_update:function(){var t=this.options.padding,i=this._map.getSize(),e=this._map.containerPointToLayerPoint(i.multiplyBy(-t)).round();this._bounds=new D(e,e.add(i.multiplyBy(1+2*t)).round()),this._center=this._map.getCenter(),this._zoom=this._map.getZoom()}}),Fn=jn.extend({getEvents:function(){var t=jn.prototype.getEvents.call(this);return t.viewprereset=this._onViewPreReset,t},_onViewPreReset:function(){this._postponeUpdatePaths=!0},onAdd:function(){jn.prototype.onAdd.call(this),this._draw()},_initContainer:function(){var t=this._container=document.createElement("canvas");Ii(t,"mousemove",this._onMouseMove,this),Ii(t,"click dblclick mousedown mouseup contextmenu",this._onClick,this),Ii(t,"mouseout",this._handleMouseOut,this),this._ctx=t.getContext("2d")},_destroyContainer:function(){z(this._redrawRequest),delete this._ctx,ci(this._container),Di(this._container),delete this._container},_updatePaths:function(){if(!this._postponeUpdatePaths){for(var t in this._redrawBounds=null,this._layers)this._layers[t]._update();this._redraw()}},_update:function(){if(!this._map._animatingZoom||!this._bounds){jn.prototype._update.call(this);var t=this._bounds,i=this._container,e=t.getSize(),n=zt?2:1;bi(i,t.min),i.width=n*e.x,i.height=n*e.y,i.style.width=e.x+"px",i.style.height=e.y+"px",zt&&this._ctx.scale(2,2),this._ctx.translate(-t.min.x,-t.min.y),this.fire("update")}},_reset:function(){jn.prototype._reset.call(this),this._postponeUpdatePaths&&(this._postponeUpdatePaths=!1,this._updatePaths())},_initPath:function(t){this._updateDashArray(t),this._layers[a(t)]=t;var i=t._order={layer:t,prev:this._drawLast,next:null};this._drawLast&&(this._drawLast.next=i),this._drawLast=i,this._drawFirst=this._drawFirst||this._drawLast},_addPath:function(t){this._requestRedraw(t)},_removePath:function(t){var i=t._order,e=i.next,n=i.prev;e?e.prev=n:this._drawLast=n,n?n.next=e:this._drawFirst=e,delete t._order,delete this._layers[a(t)],this._requestRedraw(t)},_updatePath:function(t){this._extendRedrawBounds(t),t._project(),t._update(),this._requestRedraw(t)},_updateStyle:function(t){this._updateDashArray(t),this._requestRedraw(t)},_updateDashArray:function(t){if("string"==typeof t.options.dashArray){var i,e,n=t.options.dashArray.split(/[, ]+/),o=[];for(e=0;e')}}catch(t){return function(t){return document.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),Un={_initContainer:function(){this._container=ui("div","leaflet-vml-container")},_update:function(){this._map._animatingZoom||(jn.prototype._update.call(this),this.fire("update"))},_initPath:function(t){var i=t._container=Wn("shape");fi(i,"leaflet-vml-shape "+(this.options.className||"")),i.coordsize="1 1",t._path=Wn("path"),i.appendChild(t._path),this._updateStyle(t),this._layers[a(t)]=t},_addPath:function(t){var i=t._container;this._container.appendChild(i),t.options.interactive&&t.addInteractiveTarget(i)},_removePath:function(t){var i=t._container;ci(i),t.removeInteractiveTarget(i),delete this._layers[a(t)]},_updateStyle:function(t){var i=t._stroke,e=t._fill,n=t.options,o=t._container;o.stroked=!!n.stroke,o.filled=!!n.fill,n.stroke?(i||(i=t._stroke=Wn("stroke")),o.appendChild(i),i.weight=n.weight+"px",i.color=n.color,i.opacity=n.opacity,n.dashArray?i.dashStyle=g(n.dashArray)?n.dashArray.join(" "):n.dashArray.replace(/( *, *)/g," "):i.dashStyle="",i.endcap=n.lineCap.replace("butt","flat"),i.joinstyle=n.lineJoin):i&&(o.removeChild(i),t._stroke=null),n.fill?(e||(e=t._fill=Wn("fill")),o.appendChild(e),e.color=n.fillColor||n.color,e.opacity=n.fillOpacity):e&&(o.removeChild(e),t._fill=null)},_updateCircle:function(t){var i=t._point.round(),e=Math.round(t._radius),n=Math.round(t._radiusY||e);this._setPath(t,t._empty()?"M0 0":"AL "+i.x+","+i.y+" "+e+","+n+" 0,23592600")},_setPath:function(t,i){t._path.v=i},_bringToFront:function(t){_i(t._container)},_bringToBack:function(t){pi(t._container)}},Vn=kt?Wn:X,qn=jn.extend({getEvents:function(){var t=jn.prototype.getEvents.call(this);return t.zoomstart=this._onZoomStart,t},_initContainer:function(){this._container=Vn("svg"),this._container.setAttribute("pointer-events","none"),this._rootGroup=Vn("g"),this._container.appendChild(this._rootGroup)},_destroyContainer:function(){ci(this._container),Di(this._container),delete this._container,delete this._rootGroup,delete this._svgSize},_onZoomStart:function(){this._update()},_update:function(){if(!this._map._animatingZoom||!this._bounds){jn.prototype._update.call(this);var t=this._bounds,i=t.getSize(),e=this._container;this._svgSize&&this._svgSize.equals(i)||(this._svgSize=i,e.setAttribute("width",i.x),e.setAttribute("height",i.y)),bi(e,t.min),e.setAttribute("viewBox",[t.min.x,t.min.y,i.x,i.y].join(" ")),this.fire("update")}},_initPath:function(t){var i=t._path=Vn("path");t.options.className&&fi(i,t.options.className),t.options.interactive&&fi(i,"leaflet-interactive"),this._updateStyle(t),this._layers[a(t)]=t},_addPath:function(t){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){ci(t._path),t.removeInteractiveTarget(t._path),delete this._layers[a(t)]},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var i=t._path,e=t.options;i&&(e.stroke?(i.setAttribute("stroke",e.color),i.setAttribute("stroke-opacity",e.opacity),i.setAttribute("stroke-width",e.weight),i.setAttribute("stroke-linecap",e.lineCap),i.setAttribute("stroke-linejoin",e.lineJoin),e.dashArray?i.setAttribute("stroke-dasharray",e.dashArray):i.removeAttribute("stroke-dasharray"),e.dashOffset?i.setAttribute("stroke-dashoffset",e.dashOffset):i.removeAttribute("stroke-dashoffset")):i.setAttribute("stroke","none"),e.fill?(i.setAttribute("fill",e.fillColor||e.color),i.setAttribute("fill-opacity",e.fillOpacity),i.setAttribute("fill-rule",e.fillRule||"evenodd")):i.setAttribute("fill","none"))},_updatePoly:function(t,i){this._setPath(t,$(t._parts,i))},_updateCircle:function(t){var i=t._point,e=Math.max(Math.round(t._radius),1),n="a"+e+","+(Math.max(Math.round(t._radiusY),1)||e)+" 0 1,0 ",o=t._empty()?"M0 0":"M"+(i.x-e)+","+i.y+n+2*e+",0 "+n+2*-e+",0 ";this._setPath(t,o)},_setPath:function(t,i){t._path.setAttribute("d",i)},_bringToFront:function(t){_i(t._path)},_bringToBack:function(t){pi(t._path)}});function Gn(t){return Et||kt?new qn(t):null}kt&&qn.include(Un),ie.include({getRenderer:function(t){var i=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer;return i||(i=this._renderer=this._createRenderer()),this.hasLayer(i)||this.addLayer(i),i},_getPaneRenderer:function(t){if("overlayPane"===t||void 0===t)return!1;var i=this._paneRenderers[t];return void 0===i&&(i=this._createRenderer({pane:t}),this._paneRenderers[t]=i),i},_createRenderer:function(t){return this.options.preferCanvas&&Hn(t)||Gn(t)}});var Kn=rn.extend({initialize:function(t,i){rn.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){return this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return[(t=N(t)).getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}});function Yn(t,i){return new Kn(t,i)}qn.create=Vn,qn.pointsToPath=$,ln.geometryToLayer=un,ln.coordsToLatLng=dn,ln.coordsToLatLngs=_n,ln.latLngToCoords=pn,ln.latLngsToCoords=mn,ln.getFeature=fn,ln.asFeature=gn,ie.mergeOptions({boxZoom:!0});var Jn=_e.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){Ii(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){Di(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){ci(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){0!==this._resetStateTimeout&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||1!==t.which&&1!==t.button)return!1;this._clearDeferredResetState(),this._resetState(),ti(),zi(),this._startPoint=this._map.mouseEventToContainerPoint(t),Ii(document,{contextmenu:Vi,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=ui("div","leaflet-zoom-box",this._container),fi(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t);var i=new D(this._point,this._startPoint),e=i.getSize();bi(this._box,i.min),this._box.style.width=e.x+"px",this._box.style.height=e.y+"px"},_finish:function(){this._moved&&(ci(this._box),gi(this._container,"leaflet-crosshair")),ii(),Ci(),Di(document,{contextmenu:Vi,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){if((1===t.which||1===t.button)&&(this._finish(),this._moved)){this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(o(this._resetState,this),0);var i=new R(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point));this._map.fitBounds(i).fire("boxzoomend",{boxZoomBounds:i})}},_onKeyDown:function(t){27===t.keyCode&&this._finish()}});ie.addInitHook("addHandler","boxZoom",Jn),ie.mergeOptions({doubleClickZoom:!0});var Xn=_e.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var i=this._map,e=i.getZoom(),n=i.options.zoomDelta,o=t.originalEvent.shiftKey?e-n:e+n;"center"===i.options.doubleClickZoom?i.setZoom(o):i.setZoomAround(t.containerPoint,o)}});ie.addInitHook("addHandler","doubleClickZoom",Xn),ie.mergeOptions({dragging:!0,inertia:!st,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0});var $n=_e.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new ye(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on("predrag",this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDragWrap,this),t.on("zoomend",this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))}fi(this._map._container,"leaflet-grab leaflet-touch-drag"),this._draggable.enable(),this._positions=[],this._times=[]},removeHooks:function(){gi(this._map._container,"leaflet-grab"),gi(this._map._container,"leaflet-touch-drag"),this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},moving:function(){return this._draggable&&this._draggable._moving},_onDragStart:function(){var t=this._map;if(t._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity){var i=N(this._map.options.maxBounds);this._offsetLimit=O(this._map.latLngToContainerPoint(i.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(i.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))}else this._offsetLimit=null;t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(t){if(this._map.options.inertia){var i=this._lastTime=+new Date,e=this._lastPos=this._draggable._absPos||this._draggable._newPos;this._positions.push(e),this._times.push(i),this._prunePositions(i)}this._map.fire("move",t).fire("drag",t)},_prunePositions:function(t){for(;this._positions.length>1&&t-this._times[0]>50;)this._positions.shift(),this._times.shift()},_onZoomEnd:function(){var t=this._map.getSize().divideBy(2),i=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.getPixelWorldBounds().getSize().x},_viscousLimit:function(t,i){return t-(t-i)*this._viscosity},_onPreDragLimit:function(){if(this._viscosity&&this._offsetLimit){var t=this._draggable._newPos.subtract(this._draggable._startPos),i=this._offsetLimit;t.xi.max.x&&(t.x=this._viscousLimit(t.x,i.max.x)),t.y>i.max.y&&(t.y=this._viscousLimit(t.y,i.max.y)),this._draggable._newPos=this._draggable._startPos.add(t)}},_onPreDragWrap:function(){var t=this._worldWidth,i=Math.round(t/2),e=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-i+e)%t+i-e,s=(n+i+e)%t-i-e,a=Math.abs(o+e)0?s:-s))-i;this._delta=0,this._startTime=null,a&&("center"===t.options.scrollWheelZoom?t.setZoom(i+a):t.setZoomAround(this._lastMousePos,i+a))}});ie.addInitHook("addHandler","scrollWheelZoom",to),ie.mergeOptions({tap:!0,tapTolerance:15});var io=_e.extend({addHooks:function(){Ii(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){Di(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){if(t.touches){if(Ui(t),this._fireClick=!0,t.touches.length>1)return this._fireClick=!1,void clearTimeout(this._holdTimeout);var i=t.touches[0],e=i.target;this._startPos=this._newPos=new A(i.clientX,i.clientY),e.tagName&&"a"===e.tagName.toLowerCase()&&fi(e,"leaflet-active"),this._holdTimeout=setTimeout(o((function(){this._isTapValid()&&(this._fireClick=!1,this._onUp(),this._simulateEvent("contextmenu",i))}),this),1e3),this._simulateEvent("mousedown",i),Ii(document,{touchmove:this._onMove,touchend:this._onUp},this)}},_onUp:function(t){if(clearTimeout(this._holdTimeout),Di(document,{touchmove:this._onMove,touchend:this._onUp},this),this._fireClick&&t&&t.changedTouches){var i=t.changedTouches[0],e=i.target;e&&e.tagName&&"a"===e.tagName.toLowerCase()&&gi(e,"leaflet-active"),this._simulateEvent("mouseup",i),this._isTapValid()&&this._simulateEvent("click",i)}},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_onMove:function(t){var i=t.touches[0];this._newPos=new A(i.clientX,i.clientY),this._simulateEvent("mousemove",i)},_simulateEvent:function(t,i){var e=document.createEvent("MouseEvents");e._simulated=!0,i.target._simulatedClick=!0,e.initMouseEvent(t,!0,!0,window,1,i.screenX,i.screenY,i.clientX,i.clientY,!1,!1,!1,!1,0,null),i.target.dispatchEvent(e)}});!bt||Lt&&!ct||ie.addInitHook("addHandler","tap",io),ie.mergeOptions({touchZoom:bt&&!st,bounceAtZoomLimits:!0});var eo=_e.extend({addHooks:function(){fi(this._map._container,"leaflet-touch-zoom"),Ii(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){gi(this._map._container,"leaflet-touch-zoom"),Di(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var i=this._map;if(t.touches&&2===t.touches.length&&!i._animatingZoom&&!this._zooming){var e=i.mouseEventToContainerPoint(t.touches[0]),n=i.mouseEventToContainerPoint(t.touches[1]);this._centerPoint=i.getSize()._divideBy(2),this._startLatLng=i.containerPointToLatLng(this._centerPoint),"center"!==i.options.touchZoom&&(this._pinchStartLatLng=i.containerPointToLatLng(e.add(n)._divideBy(2))),this._startDist=e.distanceTo(n),this._startZoom=i.getZoom(),this._moved=!1,this._zooming=!0,i._stop(),Ii(document,"touchmove",this._onTouchMove,this),Ii(document,"touchend",this._onTouchEnd,this),Ui(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length&&this._zooming){var i=this._map,e=i.mouseEventToContainerPoint(t.touches[0]),n=i.mouseEventToContainerPoint(t.touches[1]),s=e.distanceTo(n)/this._startDist;if(this._zoom=i.getScaleZoom(s,this._startZoom),!i.options.bounceAtZoomLimits&&(this._zoomi.getMaxZoom()&&s>1)&&(this._zoom=i._limitZoom(this._zoom)),"center"===i.options.touchZoom){if(this._center=this._startLatLng,1===s)return}else{var a=e._add(n)._divideBy(2)._subtract(this._centerPoint);if(1===s&&0===a.x&&0===a.y)return;this._center=i.unproject(i.project(this._pinchStartLatLng,this._zoom).subtract(a),this._zoom)}this._moved||(i._moveStart(!0,!1),this._moved=!0),z(this._animRequest);var r=o(i._move,i,this._center,this._zoom,{pinch:!0,round:!1});this._animRequest=M(r,this,!0),Ui(t)}},_onTouchEnd:function(){this._moved&&this._zooming?(this._zooming=!1,z(this._animRequest),Di(document,"touchmove",this._onTouchMove,this),Di(document,"touchend",this._onTouchEnd,this),this._map.options.zoomAnimation?this._map._animateZoom(this._center,this._map._limitZoom(this._zoom),!0,this._map.options.zoomSnap):this._map._resetView(this._center,this._map._limitZoom(this._zoom))):this._zooming=!1}});ie.addInitHook("addHandler","touchZoom",eo),ie.BoxZoom=Jn,ie.DoubleClickZoom=Xn,ie.Drag=$n,ie.Keyboard=Qn,ie.ScrollWheelZoom=to,ie.Tap=io,ie.TouchZoom=eo,t.version=i,t.Control=ne,t.control=oe,t.Browser=At,t.Evented=Z,t.Mixin=me,t.Util=C,t.Class=S,t.Handler=_e,t.extend=e,t.bind=o,t.stamp=a,t.setOptions=_,t.DomEvent=Qi,t.DomUtil=Ai,t.PosAnimation=te,t.Draggable=ye,t.LineUtil=Ae,t.PolyUtil=Be,t.Point=A,t.point=B,t.Bounds=D,t.bounds=O,t.Transformation=G,t.transformation=K,t.Projection=Re,t.LatLng=j,t.latLng=F,t.LatLngBounds=R,t.latLngBounds=N,t.CRS=W,t.GeoJSON=ln,t.geoJSON=yn,t.geoJson=xn,t.Layer=He,t.LayerGroup=We,t.layerGroup=Ue,t.FeatureGroup=Ve,t.featureGroup=qe,t.ImageOverlay=wn,t.imageOverlay=Pn,t.VideoOverlay=Ln,t.videoOverlay=bn,t.SVGOverlay=Tn,t.svgOverlay=Mn,t.DivOverlay=zn,t.Popup=Cn,t.popup=Sn,t.Tooltip=En,t.tooltip=kn,t.Icon=Ge,t.icon=Ke,t.DivIcon=Zn,t.divIcon=An,t.Marker=Xe,t.marker=$e,t.TileLayer=Dn,t.tileLayer=On,t.GridLayer=In,t.gridLayer=Bn,t.SVG=qn,t.svg=Gn,t.Renderer=jn,t.Canvas=Fn,t.canvas=Hn,t.Path=Qe,t.CircleMarker=tn,t.circleMarker=en,t.Circle=nn,t.circle=on,t.Polyline=sn,t.polyline=an,t.Polygon=rn,t.polygon=hn,t.Rectangle=Kn,t.rectangle=Yn,t.Map=ie,t.map=ee;var no=window.L;t.noConflict=function(){return window.L=no,this},window.L=t})(o.exports);class s{static getIconColor(t){return t.color&&s.supportedIconColors.includes(t.color)?t.color:"red"}static sanitizeAndFilterFrames(t,i){var n,o;let s=(null===(n=t.radar)||void 0===n?void 0:n.past)||[],a=(null===(o=t.radar)||void 0===o?void 0:o.nowcast)||[];if(i.maxHistoryFrames>=0&&s.length>=i.maxHistoryFrames)try{s=s.slice(s.length-i.maxHistoryFrames)}catch(t){e.warn("Error to limit history frames",t)}if(i.maxForecastFrames>=0&&a.length>=i.maxForecastFrames)try{a=a.slice(a.length-i.maxForecastFrames)}catch(t){e.warn("Error to limit forecast frames",t)}return{historyFrames:s,forecastFrames:a}}static changeSubstituteModuleVisibility(t,i){if(i.substitudeModules)try{for(const n of i.substitudeModules){const i=MM.getModules().find((t=>t.name===n));i?t?i.show(300,(()=>{}),{lockString:"MMM-RAIN-MAP"}):i.hide(300,(()=>{}),{lockString:"MMM-RAIN-MAP"}):e.warn(`No substitute module found with name ${n}`)}}catch(t){e.error(t)}}}s.supportedIconColors=["black","blue","gold","green","grey","orange","red","violet","yellow"],s.rainConditions=["09d","09n","10d","10n","11d","11n","13d","13n","showers","thunderstorm","sleet","rain","snow"],Module.register("MMM-RAIN-MAP",{defaults:{animationSpeedMs:400,colorizeTime:!0,colorScheme:2,defaultZoomLevel:8,displayClockSymbol:!0,displayTime:!0,displayTimeline:!0,displayHoursBeforeRain:-1,substitudeModules:[],extraDelayLastFrameMs:2e3,extraDelayCurrentFrameMs:2e3,markers:[{lat:49.41,lng:8.717,color:"red"},{lat:48.856,lng:2.35,color:"green"}],mapPositions:[{lat:49.41,lng:8.717,zoom:9,loops:1},{lat:49.41,lng:8.717,zoom:6,loops:2},{lat:48.856,lng:2.35,zoom:6,loops:1},{lat:48.856,lng:2.35,zoom:9,loops:2},{lat:49.15,lng:6.154,zoom:5,loops:2}],mapUrl:"https://a.tile.openstreetmap.de/${z}/${x}/${y}.png",mapHeight:"420px",mapWidth:"420px",maxHistoryFrames:-1,maxForecastFrames:-1,timeFormat:config.timeFormat||24,timezone:null,updateIntervalInSeconds:300},runtimeData:{animationPosition:0,animationTimer:null,map:null,mapPosition:0,numHistoryFrames:0,numForecastFrames:0,loopNumber:1,radarLayers:[],timeDiv:null,timeframes:[]},getStyles:()=>["font-awesome.css","leaflet.css","MMM-RAIN-MAP.css"],getScripts:()=>["moment.js","moment-timezone.js"],getTranslations:()=>({en:"translations/en.json",de:"translations/de.json"}),getDom(){const t=document.createElement("div");if(t.classList.add("rain-map-wrapper"),this.config.displayTime){const i=document.createElement("div");if(i.classList.add("rain-map-time-wrapper"),i.innerHTML=""+(this.config.displayClockSymbol?"":""),this.runtimeData.timeDiv=document.createElement("span"),this.runtimeData.timeDiv.classList.add("rain-map-time"),i.appendChild(this.runtimeData.timeDiv),this.config.displayTimeline){const t=document.createElement("span");t.classList.add("rain-map-timeline-wrapper"),this.runtimeData.sliderDiv=document.createElement("span"),this.runtimeData.sliderDiv.classList.add("rain-map-timeslider"),t.appendChild(this.runtimeData.sliderDiv),this.runtimeData.timelineDiv=document.createElement("span"),this.runtimeData.timelineDiv.classList.add("rain-map-timeline"),t.appendChild(this.runtimeData.timelineDiv),i.appendChild(t)}t.appendChild(i)}const i=document.createElement("div");i.style.height=this.config.mapHeight,i.style.width=this.config.mapWidth,t.appendChild(i),document.body.appendChild(t);const e=this.config.mapPositions[0];this.runtimeData.map=o.exports.map(i,{zoomControl:!1,trackResize:!1,attributionControl:!1}).setView([e.lat,e.lng],e.zoom),o.exports.tileLayer(this.config.mapUrl.split("$").join("")).addTo(this.runtimeData.map);for(const t of this.config.markers)o.exports.marker([t.lat,t.lng],{icon:new o.exports.Icon({iconUrl:this.file(`img/marker-icon-2x-${s.getIconColor(t)}.png`),shadowUrl:this.file("img/marker-shadow.png"),iconSize:[25,41],shadowSize:[41,41]})}).addTo(this.runtimeData.map);return document.body.removeChild(t),t},start(){this.config.displayOnlyOnRain&&e.warn("MMM-RAIN-MAP option 'displayOnlyOnRain# is deprecated. Use 'displayHoursBeforeRain' instead."),this.scheduleUpdate(),this.play()},scheduleUpdate(){this.loadData(),setInterval((()=>{this.loadData()}),1e3*this.config.updateIntervalInSeconds)},play(){let t=0;this.runtimeData.animationPosition===this.runtimeData.timeframes.length-1?t=this.config.extraDelayLastFrameMs:this.runtimeData.animationPosition===this.runtimeData.numHistoryFrames-1&&(t=this.config.extraDelayCurrentFrameMs),this.runtimeData.animationTimer=setTimeout((()=>{this.tick(),this.play()}),this.config.animationSpeedMs+t)},tick(){if(!this.runtimeData.map||0===this.runtimeData.timeframes.length)return;const t=this.runtimeData.animationPosition1){const t=this.config.mapPositions[this.runtimeData.mapPosition];if(this.runtimeData.loopNumber===(t.loops||1)){this.runtimeData.loopNumber=1;const t=this.runtimeData.mapPosition===this.config.mapPositions.length-1?0:this.runtimeData.mapPosition+1;this.runtimeData.mapPosition=t;const i=this.config.mapPositions[t];this.runtimeData.map.setView(new o.exports.LatLng(i.lat,i.lng),i.zoom||this.config.defaultZoomLevel,{animation:!1})}else this.runtimeData.loopNumber+=1}const i=this.runtimeData.timeframes[this.runtimeData.animationPosition],e=this.runtimeData.radarLayers[i.time],n=this.runtimeData.timeframes[t],s=this.runtimeData.radarLayers[n.time];if(s&&s.setOpacity(1),e&&e.setOpacity(.001),this.config.displayTime){const i=moment(1e3*n.time);this.config.timezone&&i.tz(this.config.timezone);const e=24===this.config.timeFormat?"HH":"h";this.runtimeData.timeDiv.innerHTML=`${i.format(`${e}:mm`)}`,this.config.colorizeTime&&(tn(this,void 0,void 0,(function*(){if(t.ok){const i=yield t.json(),{historyFrames:n,forecastFrames:a}=s.sanitizeAndFilterFrames(i,this.config);this.runtimeData.numHistoryFrames=n.length,this.runtimeData.numForecastFrames=a.length,this.runtimeData.timeframes=[...n,...a],this.runtimeData.map.eachLayer((t=>{t instanceof o.exports.TileLayer&&t._url.includes("rainviewer.com")&&this.runtimeData.map.removeLayer(t)})),this.runtimeData.radarLayers=[];for(const t of this.runtimeData.timeframes){const i=new o.exports.TileLayer(`https://tilecache.rainviewer.com${t.path}/256/{z}/{x}/{y}/${this.config.colorScheme}/1_1.png`,{tileSize:256,opacity:.001,zIndex:t});this.runtimeData.radarLayers[t.time]=i,this.runtimeData.map.hasLayer(i)||this.runtimeData.map.addLayer(i)}if(this.runtimeData.animationPosition=0,this.config.displayTimeline)try{this.runtimeData.percentPerFrame=100/(this.runtimeData.numHistoryFrames+this.runtimeData.numForecastFrames);const t=(this.runtimeData.numHistoryFrames-1)*this.runtimeData.percentPerFrame,i=this.runtimeData.numForecastFrames*this.runtimeData.percentPerFrame;this.runtimeData.timelineDiv.style.background=`linear-gradient(to right, var(--color-history) 0% ${t}%, var(--color-now) ${t}% ${t+this.runtimeData.percentPerFrame}%, var(--color-forecast) ${i}%)`}catch(t){e.warn("Error rendering the map timeline")}e.log("Done processing latest RainViewer API request.")}else e.error("Error fetching RainViewer timeframes",t.statusText)}))))},notificationReceived(t,i){var e,n;if(this.config.displayHoursBeforeRain>=0)if("DOM_OBJECTS_CREATED"===t&&s.changeSubstituteModuleVisibility(!1,this.config),0==this.config.displayHoursBeforeRain){if("OPENWEATHER_FORECAST_WEATHER_UPDATE"===t){const t=null===(n=null===(e=i.current)||void 0===e?void 0:e.weather[0])||void 0===n?void 0:n.icon;this.handleCurrentWeatherCondition(t)}else if("CURRENTWEATHER_TYPE"===t){const t=i.type;this.handleCurrentWeatherCondition(t)}}else this.config.displayHoursBeforeRain>0&&"WEATHER_UPDATED"===t&&this.handleWeatherUpdate(i)},handleWeatherUpdate(t){const i=t.hourlyArray;let n=1/0;const o=Date.now();for(const t of i)s.rainConditions.findIndex((i=>t.weatherType.includes(i)))>=0&&t.date-ot.includes(i)))>=0?this.runtimeData.animationTimer||(s.changeSubstituteModuleVisibility(!1,this.config),this.show(300,(()=>{}),{lockString:this.identifier}),this.play()):this.runtimeData.animationTimer&&(this.hide(300,(()=>{}),{lockString:this.identifier}),clearTimeout(this.runtimeData.animationTimer),this.runtimeData.animationTimer=null,s.changeSubstituteModuleVisibility(!0,this.config))}})}(Log); diff --git a/README.md b/README.md index fc5f4f6..a33122d 100644 --- a/README.md +++ b/README.md @@ -9,9 +9,7 @@ Contribution welcome. #### Support -If you like this module and want to thank, please rate this repository with a star or buy me a coffee :-) - -Buy Me A Beer +If you also like this module and want to thank, please rate this repository with a star or [donate a small amount that is worth it to you](https://paypal.me/jalibu). ## Features @@ -50,7 +48,7 @@ https://user-images.githubusercontent.com/25933231/130909536-e096d342-19d5-4139- displayTime: true, displayTimeline: true, displayClockSymbol: true, - displayOnlyOnRain: false, + displayHoursBeforeRain: -1, extraDelayLastFrameMs: 1000, extraDelayCurrentFrameMs: 3000, markers: [ @@ -77,28 +75,28 @@ https://user-images.githubusercontent.com/25933231/130909536-e096d342-19d5-4139- ### Options -| Option | Description | -| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `animationSpeedMs` | Determines how fast the frames are played.

**Type:** `int`
**Default value:** `400` (time per frame in milliseconds) | -| `colorizeTime` | Set true, to colorize history and forecast timestamps.

**Type:** `boolean`
**Default value:** `true` | -| `colorScheme` | Set the color scheme for the rain layers. Click [here](https://www.rainviewer.com/api/color-schemes.html) to find your favorite scheme.

**Type:** `number` (0 - 8)
**Default value:** `2` (Universal Blue) | -| `defaultZoomLevel` | Fallback/default zoom value that is used if it is not explicitly set in a MapPostion.

**Type:** `int`
**Range:** `0 (whole world) - 20 (small building)`
**Default value:** `8` | -| `displayTime` | Set true, to display the time for each frame.

**Type:** `boolean`
**Default value:** `true` | -| `displayClockSymbol` | Set true, to display a clock symbol as time prefix.

**Type:** `boolean`
**Default value:** `true` | -| `displayTimeline` | Set true, to display a timeline.

**Type:** `boolean`
**Default value:** `true` | -| `displayOnlyOnRain` | Set true, to only show the map if supported weather modules broadcast a current rainy weather condition.
Supported weather modules are: [weather](https://github.com/MichMich/MagicMirror/tree/master/modules/default/weather) and [MMM-OpenWeatherForecast](https://github.com/jclarke0000/MMM-OpenWeatherForecast).

**Type:** `boolean`
**Default value:** `false` | -| `extraDelayLastFrameMs` | Add an extra delay to pause the animation on the last frame (last available forecast weather situation).

**Type:** `int`
**Default value:** `1000` (time in milliseconds) | -| `extraDelayCurrentFrameMs` | Add an extra delay to pause the animation on the frame for the current weather situation.

**Type:** `int`
**Default value:** `3000` (time in milliseconds) | -| `markers` | Optional list of markers on the map.
See examples and Markers-Object documentation below for details.

**Type:** `array[Marker]`
**Default value:** `Sample set` | -| `mapPositions` | **Required:** List of zoom/center positions for the map.
See examples and MapPosition-Object documentation below for details.

**Type:** `array[MapPosition]`
**Default value:** `Sample set` | -| `mapHeight` | Height of the map. Must be string with pixels and "px" postfix. Percentage values won't work.

**Type:** `string` (pixels)
**Default value:** `'420px'` | -| `mapWidth` | Width of the map. Must be a string with pixels and "px" postfix. Percentage values won't work.

**Type:** `string` (pixels)
**Default value:** `'420px'` | -| `mapUrl` | Option to use an alternative map. In most cases you are fine with the default but you can find more maps [here](https://wiki.openstreetmap.org/wiki/Tile_servers).

**Type:** `string`
**Default value:** `'https://a.tile.openstreetmap.de/{z}/{x}/{y}.png'`
**Alternative uncolored map:** '`https://tiles.wmflabs.org/bw-mapnik/${z}/${x}/${y}.png`' | -| `maxHistoryFrames` | Maximum number of history frames. There is one frame every 10 minutes. Setting this to 6 would show history radar layers of the last hour until now. If set to -1, all available history frames are shown.
As of today, the **API provides 12 history frames** -> 2h.

**Type:** `int`
**Default value:** `-1` | -| `maxForecastFrames` | Maximum number of forecast frames. There is one frame every 10 minutes. Setting this to 2 would show forecast radar layers from now to 20 minutes in the future. If set to -1, all available forecast frames are shown.
As of today, the **API provides 3 forecast frames** -> 30min.

**Type:** `int`
**Default value:** `-1` | -| `substitudeModules` | (Experimental) If `displayOnlyOnRain` is turned on, you can define a list of module names that are hidden in favor of the map.

**Type:** `array[string]`
**Default value:** `[]`
**Example:** `['MMM-Jast', 'calendar']` | -| `timeFormat` | Option to override the Magic Mirror's global time format to 12 or 24 for this module.

**Type:** `int`
**Default value:** `[Global Config]` or `24` | -| `updateIntervalMs` | Update interval for fetching new radar frames from the RainViewer.com API. (New frames are released every 10 minutes)

**Type:** `int`
**Default value:** `300000` (time in milliseconds) | +| Option | Description | +| -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `animationSpeedMs` | Determines how fast the frames are played.

**Type:** `int`
**Default value:** `400` (time per frame in milliseconds) | +| `colorizeTime` | Set true, to colorize history and forecast timestamps.

**Type:** `boolean`
**Default value:** `true` | +| `colorScheme` | Set the color scheme for the rain layers. Click [here](https://www.rainviewer.com/api/color-schemes.html) to find your favorite scheme.

**Type:** `number` (0 - 8)
**Default value:** `2` (Universal Blue) | +| `defaultZoomLevel` | Fallback/default zoom value that is used if it is not explicitly set in a MapPostion.

**Type:** `int`
**Range:** `0 (whole world) - 20 (small building)`
**Default value:** `8` | +| `displayTime` | Set true, to display the time for each frame.

**Type:** `boolean`
**Default value:** `true` | +| `displayClockSymbol` | Set true, to display a clock symbol as time prefix.

**Type:** `boolean`
**Default value:** `true` | +| `displayTimeline` | Set true, to display a timeline.

**Type:** `boolean`
**Default value:** `true` | +| `displayHoursBeforeRain` | This option allows, to show or hide the map depending on the expected or current weather situation. The allowed values and options depend on your weather module which feeds MMM-RAIN-MAP with weather conditions under the hood.
If set to `0` the map shows up on rain, if set to `-1` the map is always displayed.
Supported weather modules:
  • [weather](https://github.com/MichMich/MagicMirror/tree/master/modules/default/weather)
    When used with type `hourly` allowes you to use the weather forecast data and to display the map when rain is expected within a defined number of hours by setting a value greater `0`.
  • [MMM-OpenWeatherForecast](https://github.com/jclarke0000/MMM-OpenWeatherForecast)
**Type:** `number`
**Default value:** `-1` | +| `extraDelayLastFrameMs` | Add an extra delay to pause the animation on the last frame (last available forecast weather situation).

**Type:** `int`
**Default value:** `1000` (time in milliseconds) | +| `extraDelayCurrentFrameMs` | Add an extra delay to pause the animation on the frame for the current weather situation.

**Type:** `int`
**Default value:** `3000` (time in milliseconds) | +| `markers` | Optional list of markers on the map.
See examples and Markers-Object documentation below for details.

**Type:** `array[Marker]`
**Default value:** `Sample set` | +| `mapPositions` | **Required:** List of zoom/center positions for the map.
See examples and MapPosition-Object documentation below for details.

**Type:** `array[MapPosition]`
**Default value:** `Sample set` | +| `mapHeight` | Height of the map. Must be string with pixels and "px" postfix. Percentage values won't work.

**Type:** `string` (pixels)
**Default value:** `'420px'` | +| `mapWidth` | Width of the map. Must be a string with pixels and "px" postfix. Percentage values won't work.

**Type:** `string` (pixels)
**Default value:** `'420px'` | +| `mapUrl` | Option to use an alternative map. In most cases you are fine with the default but you can find more maps [here](https://wiki.openstreetmap.org/wiki/Tile_servers).

**Type:** `string`
**Default value:** `'https://a.tile.openstreetmap.de/{z}/{x}/{y}.png'`
**Alternative uncolored map:** '`https://tiles.wmflabs.org/bw-mapnik/${z}/${x}/${y}.png`' | +| `maxHistoryFrames` | Maximum number of history frames. There is one frame every 10 minutes. Setting this to 6 would show history radar layers of the last hour until now. If set to -1, all available history frames are shown.
As of today, the **API provides 12 history frames** -> 2h.

**Type:** `int`
**Default value:** `-1` | +| `maxForecastFrames` | Maximum number of forecast frames. There is one frame every 10 minutes. Setting this to 2 would show forecast radar layers from now to 20 minutes in the future. If set to -1, all available forecast frames are shown.
As of today, the **API provides 3 forecast frames** -> 30min.

**Type:** `int`
**Default value:** `-1` | +| `substitudeModules` | (Experimental) If `displayOnlyOnRain` is turned on, you can define a list of module names that are hidden in favor of the map.

**Type:** `array[string]`
**Default value:** `[]`
**Example:** `['MMM-Jast', 'calendar']` | +| `timeFormat` | Option to override the Magic Mirror's global time format to 12 or 24 for this module.

**Type:** `int`
**Default value:** `[Global Config]` or `24` | +| `updateIntervalMs` | Update interval for fetching new radar frames from the RainViewer.com API. (New frames are released every 10 minutes)

**Type:** `int`
**Default value:** `300000` (time in milliseconds) | ### Marker Object diff --git a/package.json b/package.json index 925318e..002a18f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mmm-rain-map", - "version": "2.6.2", + "version": "2.7.0", "description": "A Rain Radar Map based on the Rainviewer API for the MagicMirror² platform.", "main": "MMM-RAIN-MAP.js", "repository": { diff --git a/src/frontend/Frontend.ts b/src/frontend/Frontend.ts index e8f5c4d..b30b10c 100644 --- a/src/frontend/Frontend.ts +++ b/src/frontend/Frontend.ts @@ -17,7 +17,7 @@ Module.register('MMM-RAIN-MAP', { displayClockSymbol: true, displayTime: true, displayTimeline: true, - displayOnlyOnRain: false, + displayHoursBeforeRain: -1, substitudeModules: [], extraDelayLastFrameMs: 2000, extraDelayCurrentFrameMs: 2000, @@ -139,6 +139,9 @@ Module.register('MMM-RAIN-MAP', { }, start() { + if (this.config.displayOnlyOnRain) { + Log.warn("MMM-RAIN-MAP option 'displayOnlyOnRain# is deprecated. Use 'displayHoursBeforeRain' instead.") + } this.scheduleUpdate() this.play() }, @@ -298,16 +301,43 @@ Module.register('MMM-RAIN-MAP', { }, notificationReceived(notificationIdentifier: string, payload: any) { - if (this.config.displayOnlyOnRain) { - if (notificationIdentifier === 'OPENWEATHER_FORECAST_WEATHER_UPDATE') { - const currentCondition = payload.current?.weather[0]?.icon - this.handleCurrentWeatherCondition(currentCondition) - } else if (notificationIdentifier === 'CURRENTWEATHER_TYPE') { - const currentCondition = payload.type - this.handleCurrentWeatherCondition(currentCondition) - } else if (notificationIdentifier === 'DOM_OBJECTS_CREATED') { + if (this.config.displayHoursBeforeRain >= 0) { + if (notificationIdentifier === 'DOM_OBJECTS_CREATED') { Utils.changeSubstituteModuleVisibility(false, this.config) } + if (this.config.displayHoursBeforeRain == 0) { + if (notificationIdentifier === 'OPENWEATHER_FORECAST_WEATHER_UPDATE') { + const currentCondition = payload.current?.weather[0]?.icon + this.handleCurrentWeatherCondition(currentCondition) + } else if (notificationIdentifier === 'CURRENTWEATHER_TYPE') { + const currentCondition = payload.type + this.handleCurrentWeatherCondition(currentCondition) + } + } else if (this.config.displayHoursBeforeRain > 0) { + if (notificationIdentifier === 'WEATHER_UPDATED') { + this.handleWeatherUpdate(payload) + } + } + } + }, + + handleWeatherUpdate(update: any) { + const hourlyData = update.hourlyArray + let closestRain = Infinity + const now = Date.now() + for (const entry of hourlyData) { + if (Utils.rainConditions.findIndex((condition) => entry.weatherType.includes(condition)) >= 0) { + if (entry.date - now < closestRain) { + closestRain = entry.date - now + } + } + } + closestRain = closestRain / 1000 / 60 / 60 // convert to hours + Log.log('Next rain will be in %.1f hours.', closestRain) + if (closestRain < this.config.displayHoursBeforeRain) { + this.handleCurrentWeatherCondition('rain') + } else { + this.handleCurrentWeatherCondition('') } }, diff --git a/src/types/Config.ts b/src/types/Config.ts index 29ce9a2..26a9c84 100644 --- a/src/types/Config.ts +++ b/src/types/Config.ts @@ -6,7 +6,8 @@ export type Config = { displayClockSymbol: boolean displayTime: boolean displayTimeline: boolean - displayOnlyOnRain: boolean + displayOnlyOnRain?: boolean, + displayHoursBeforeRain: number substitudeModules: string[] extraDelayLastFrameMs: number extraDelayCurrentFrameMs: number