1import{L as t}from"./chunk-BzSrTqFP.js";import{C as i}from"./chunk-DjrCYCQI.js";import{I as e}from"./chunk-wgvU54-3.js";import{n as s,P as a}from"./chunk-BIodJjId.js";import{i as h}from"./chunk-D8A3YXSB.js";import{i as n}from"./chunk-aNFFeM4Q.js";import{S as o}from"./chunk-DshOqNmZ.js";import{a as r,b as _,c as m,i as d,g}from"./chunk-Dr5piOmZ.js";/* empty css */import"./chunk-CHPXP26E.js";import"./chunk-BhLMWRjL.js";import"./chunk-xtG4Eayc.js";const l=[e.AVG,e.NDVI,e.EVI,e.CIRE,e.NDMI,e.CVI,e.GVMI,e.GNDVI,e.NDRE,e.NDSI,e.NDTI,e.LPI,e.TGI,e.VARI],c=t.Polygon.extend({hasData(t){return this._pixels?.[t+3]>2},hasDataAtLatLng(t){if(this.__disabled)return!0;const i=this._map.latLngToLayerPoint(t),e=this._pxBounds;if(!e.contains(i))return!1;const s=e.getSize(),a=s.x/this._image.width,h=s.y/this._image.height,n=Math.floor((i.x-e.min.x)/a),o=Math.floor((i.y-e.min.y)/h);if(n<0||n>=this._image.width||o<0||o>=this._image.height)return!1;const r=4*(o*this._image.width+n);return this.hasData(r)},getValueAtLatLng(t){if(this.__disabled)return 0;const i=this._map.latLngToLayerPoint(t),s=this._pxBounds;if(!s.contains(i))return null;const a=s.getSize(),h=a.x/this._image.width,n=a.y/this._image.height,o=Math.floor((i.x-s.min.x)/h),r=4*(Math.floor((i.y-s.min.y)/n)*this._image.width+o);return this.hasData(r)?g(this._imageType,this._pixels[r],e):null},async setRegionsProps(t={}){const{regions:i,norm:e,isZonesVisible:s,isZonesNormVisible:a,callback:n}=t,o=!h(this._regions,i)||!h(this._norm,e)||this._isZonesVisible!==s||this._drawNorm!==a;return void 0!==i&&(this._regions=i),void 0!==e&&(this._norm=e),this._isZonesVisible=s,this._callback=n,this._drawNorm=a,o&&(this._updateGradientNorm(),await this._updateRegions(),this._map?.fire("moveend")),this},_setCanvasSource(t){this.canvasIndexGL=new i(t,!0)},async resetProps(){return this._shouldReset=!0,this},removeImageListeners(){Object.values(this._images||{}).forEach(t=>t.removeEventListener("load",this._updateImage.bind(this))),this._imageColor?.removeEventListener("load",this._updateImage.bind(this)),this._images={}},async setProps(t={}){this.__disabled=0===Object.keys(t).length,this._interactive=!!t.interactive,this.options.color=t.color,t.onClick&&(this._onClick=t.onClick),this._max=t.max,this._min=t.min,(this._url!==t.url||this._shouldReset)&&this.removeImageListeners(),this._area=t.area,this._shouldDrawSpin=!t.noSpin,t.gradient&&!h(this._gradientValues,t.gradient)&&(this._gradientValues=t.gradient,await this._initGradient(t.gradient));if(this._url!==t.url||this.isMedianSmoothing!==t.isMedianSmoothing||this._imageType!==(t.imageType?.imageType??t.imageType)||this._shouldReset){this._shouldUpdate=!0,this._imageType=t.imageType?.zones?t.imageType.imageType:t.imageType,this.progress=0,this.zonesIndex=this.zonesIndex||e.NDVI,this.isMedianSmoothing=!!t.isMedianSmoothing,l.includes(this._imageType)&&(this.zonesIndex=this._imageType),this._imageType===e.TRUECOLOR&&(this.zonesIndex=e.TRUECOLOR);const i=this.zonesIndex,s=[e.TOPO,e.ZONES].includes(this._imageType)?e.NDVI:this._imageType;if(this._url=t.url||"",t.url&&this._imageType&&this._imageType!==e.SOILS){t.gradient||await this._initGradient();try{this._imageLoading=!1,this._images[i]?(this._image=this._images[i],this._setCanvasSource(this._image)):(this._imageLoading=!0,this._images[i]=new Image,this._image=this._images[i],this._image.src=this._url,this._image.addEventListener("load",this._updateImage.bind(this))),this._images[s]?this._imageColor=this._images[s]:(this._imageLoading=!0,this._images[s]=new Image,this._imageColor=this._images[s],this._imageColor.src=this._url,this._imageColor.addEventListener("load",this._updateImage.bind(this)))}catch{this._imageLoading=!1,this._shouldUpdate=!0,this.removeImageListeners()}}else!t.url&&this._canvasImage&&this._canvasImage.getContext("2d",{willReadFrequently:!0}).clearRect(0,0,this._canvasImage.width,this._canvasImage.height);this._shouldReset=!1}return this.setRegionsProps(t).then(),this._updatePath().then(),this},getRate(t){const i=Math.max(...this._norm||[0,1]),e=Math.min(...this._norm||[0,1]);return this._pixelsNorm?Math.abs(i-e)*(this._pixelsNorm[t]/255)+e:0},handleMouseOut(){this.__hovered=!1,this._tooltip.style.opacity="0"},handleMouseOver(){this._interactive&&(this.__hovered=!0,this._tooltip.style.opacity="1")},handleMouseMove(t){this._pixels&&this._url&&this._pxBounds&&this.__hovered&&!this.__disabled?requestAnimationFrame(()=>{this._tooltip.style.opacity="1";const i=this._pxBounds.getSize(),n=i.x/this._image.width,o=i.y/this._image.height,r=t.clientX,_=t.clientY,d=this._map.latLngToContainerPoint(this._bounds._northEast),l=Math.floor((r-d.x)/n),c=4*(Math.floor((_-d.y)/o)*this._image.width+l),p=g(this._imageType,this._pixels[c],e,!1);if(!this.hasData(c))return void(this._tooltip.style.opacity="0");let u="";
1if(this._isZonesVisible&&!this._drawNorm){const t=this._zonesGAPixels,i=[t[c],t[c+1],t[c+2]],e=this._zonesGa?.find(t=>h(t.color,i));if(e){const t=e.index,i=m(this),[h,n,o,r]=this._regions||[],_=t=>(t-this._min)/(this._max-this._min),d=this._area||0,g=[d*Math.abs(_(h)),d*Math.abs(Math.max(0,_(n)-_(h))),d*Math.abs(Math.max(0,_(o)-_(n))),d*Math.abs(Math.max(0,_(r)-_(o))),d*Math.abs(1-_(r))].map(t=>t/1e4),l=t=>i[t]?`rgb(${i[t].join(",")})`:"transparent",c=t=>s(t,2,!0),[p,v]=[c(this._regions[t-1]),c(this._regions[t])];let y;y=0===t?`0 - ${v}`:3===t?`${v} - 1`:`${p} - ${v}`,u=`\n <div class="valueTip-content-marker" style="background: ${l(t)};"></div>\n <div>${a(g[t])} Ðа</div>\n <div>${y}</div>\n `}}this._tooltip.innerHTML=`<div class='valueTip-content'>${u}${s(p,2,!0)}</div>`,this._tooltip.style.transform=`translate3d(calc(${r}px - 50%), ${_-40}px, 0) translateZ(0)`}):this._tooltip.style.opacity="0"},async _updateImage(){this._setCanvasSource(this._image),this._shouldUpdate=!0,this._imageLoading=!1,await this._updatePath(),this._map?.fire("stopimageloading")},_initImage(){this._canvasGray||["_canvasGray","_canvasImage","_canvasZones","_canvasZonesNorm"].forEach(t=>{this[t]=this._createCanvas()})},getShape(){this._shapeData=[];const i=this._pxBounds,s=i.getSize(),a=s.x/this._image.width,h=s.y/this._image.height,o=10*Math.max(a,h),r=this.toGeoJSON(),{min:{x:_,y:m},max:{x:d,y:l}}=i;for(let c=m;c<l;c+=o)for(let i=_;i<d;i+=o){const s=this._map.layerPointToLatLng(t.point(i-.5*o,c-.5*o)),d=this._map.layerPointToLatLng(t.point(i+.5*o,c+.5*o)),l=Math.floor((i-_)/a),p=4*(Math.floor((c-m)/h)*this._image.width+l);if(this.hasData(p)){const i=[[s.lat,s.lng],[d.lat,s.lng],[d.lat,d.lng],[s.lat,d.lng],[s.lat,s.lng]],a=new t.Polygon(i).toGeoJSON(),h=n(r,a);this._shapeData.push({poly:h?.geometry?.coordinates||i,value:g(this._imageType,this._pixels[p],e),rate:this.getRate(p)})}}return this._shapeData},_createCanvas(t=100,i=100){const e=new OffscreenCanvas(t,i);return e.width=t,e.height=i,e},async _initGradient(t){return d(this,!1,t),t&&this._image&&(this._setCanvasSource(this._image),await this._updatePath()),this},_updateGradientNorm(){const t=Math.max(...this._norm||[0,1]),i=Math.min(...this._norm||[0,1]),e=(this._norm||[0,1]).map(e=>{const s=Math.abs(this._perc(e,t,i));return[255*s||0,255*s||0,255]});this._canvasNormGradient||(this._canvasNormGradient=this._createCanvas(1,100));const s=this._canvasNormGradient.getContext("2d",{willReadFrequently:!0}),a=s.createLinearGradient(0,0,1,100);return e.forEach(([t,i,e],s)=>a.addColorStop(s/(this._norm||[0,1]).length,`rgb(${t},${i},${e})`)),s.fillStyle=a,s.fillRect(0,0,1,100),this._gradientNorm=s.getImageData(0,0,1,100).data,this},_perc:(t,i,e)=>(t-i)/(e-i),scriptImage:_(),async _manageCanvas(t,i,e=!1){const s=t.getContext("2d",{willReadFrequently:!0}),{width:a,height:h}=i;if(!a||!h)return!0;if(s.canvas.width=a,s.canvas.height=h,e){s.clearRect(0,0,a,h),s.fillStyle="#000",s.drawImage(i,0,0,a,h);const t=s.getImageData(0,0,a,h);return this._pixels=t.data,await this._updateRegions(),s.clearRect(0,0,a,h),!0}this._setCanvasSource(this._image);const n=await this.canvasIndexGL.render(this._imageType,{source:this._image,medianSmoothing:this.isMedianSmoothing});return s.drawImage(n,0,0,a,h),this.workerImage||(this.workerImage=new Worker(this.scriptImage)),this.workerImage.postMessage({width:a,pixels:this._pixels,_norm:this._norm,_imageType:this._imageType,_drawNorm:this._drawNorm,_gradient:this._gradient,_gradientNorm:this._gradientNorm}),this.workerImage.onmessage=async t=>(this._dataOutput=t.data.dataOutput,this.workerImage?.terminate?.(),this.workerImage=void 0,!0),!0},async getZonesImages(){return await this._updateRegions(),await this._updateRegions(!0),{zonesImage:this._canvasZones,zonesRegionsImage:this._canvasZonesNorm}},scriptZones:r(),async _updateRegions(t=this._drawNorm&&this._norm?.length,i=this._isZonesVisible||this._drawNorm){if(!i)return!0;const e=t?this._canvasZonesNorm:this._canvasZones;if(!this._image||this._image.width===e.width&&this._image.height===e.height||(e.width=this._image.width,e.height=this._image.height),!e.width||!this._pixels)return!1;const s=e.getContext("2d",{willReadFrequently:!0});this.worker||(this.worker=new Worker(this.scriptZones));const a=m(this,t),h=s.getImageData(0,0,e.width,e.height);if(this._pixels?.length!==h?.data?.length)return!0;h.data.fill(0),h.data.set(this._pixels,0),this._setCanvasSource(this._image);const n=await this.canvasIndexGL.render(this._imageType,{source:this._image,isZones:this._isZ
1onesVisible,isNorm:this._drawNorm,regions:this._regions,medianSmoothing:this.isMedianSmoothing,canvasNorm:this._canvasNormGradient});return s.clearRect(0,0,e.width,e.height),s.drawImage(n,0,0,e.width,e.height),this.worker&&(this.worker.postMessage({colors:a,width:e.width,pixels:this._pixels,_imageType:this._imageType,_regions:this._regions}),this.worker.onmessage=async t=>(i&&(this._pixelsNorm=t.data.data),this._zonesGa=t.data._zonesGa,this._zonesGAPixels=t.data.pixels,this._callback?.(t.data._zonesGa.map(t=>t.count)||[0,0,0,0,0]),this.worker?.terminate?.(),this.worker=void 0,!0)),!0},getData(){return this._dataOutput||[]},async drawSpin(){if(!this._imageLoading)return!1;this._spinnerManager.start(()=>this.getBounds(),()=>this._imageLoading)},isCanvasValid:t=>t?.width&&t?.height,async _updatePath(){if(!this._pxBounds||!this._renderer||!this._url)return;this._imageLoading&&!this._spinnerManager.isAnimating&&this._shouldDrawSpin&&await this.drawSpin(),await new Promise(requestAnimationFrame);const t=this._pxBounds,i=t.getSize(),e=this._renderer._ctx;if(e){if(e.save(),e.imageSmoothingEnabled=!1,this._shouldUpdate){if(await this._manageCanvas(this._canvasGray,this._image,!0),!this.isCanvasValid(this._canvasGray))return;await this._manageCanvas(this._canvasImage,this._imageColor),this._shouldUpdate=!1}if(this._isZonesVisible){const s=this._drawNorm?this._canvasZonesNorm:this._canvasZones;s.width&&e.drawImage(s,t.min.x,t.min.y,i.x,i.y)}else e.drawImage(this._canvasImage,t.min.x,t.min.y,i.x,i.y);e.restore()}},beforeAdd(i){this._map=i,this.routePoints=[],t.Polygon.prototype.beforeAdd.call(this,i);const e=window.popupPortal;e&&!e.contains(this._tooltip)&&(e.appendChild(this._tooltip),e.appendChild(this._spinner))},onAdd(i){t.Polygon.prototype.onAdd.call(this,i),this.off("mouseout",this.handleMouseOut,this),this.off("mouseover",this.handleMouseOver,this),this.handleMouseMoveBinded=this.handleMouseMove.bind(this),document.addEventListener("mousemove",this.handleMouseMoveBinded),this.on("mouseout",this.handleMouseOut,this),this.on("mouseover",this.handleMouseOver,this)},onRemove(){this._frameAnim&&cancelAnimationFrame(this._frameAnim),this.workerImage?.terminate?.(),this.worker?.terminate?.(),this.setProps(),this.removeImageListeners(),[this._canvasGray,this._canvasImage,this._canvasZones,this._canvasZonesNorm,this.tmpCanvas,this._canvasNormGradient].forEach(t=>{t&&(t.getContext("2d",{willReadFrequently:!0})?.clearRect(0,0,t.width,t.height),t.width=t.height=0)});const i=window.popupPortal;i?.contains(this._tooltip)&&(i.removeChild(this._tooltip),i.removeChild(this._spinner)),this.scriptImage&&window.URL.revokeObjectURL(this.scriptImage),this.handleMouseMoveBinded&&document.removeEventListener("mousemove",this.handleMouseMoveBinded),this.off("mouseout",this.handleMouseOut,this),this.off("mouseover",this.handleMouseOver,this),this.canvasIndexGL&&this.canvasIndexGL.dispose(),t.Polygon.prototype.onRemove.call(this)},async redrawCanvas(){await this._updatePath()},async initialize(i,e){return t.Polygon.prototype.initialize.call(this,i,{...e,interactive:e?.interactive??!0,indexOverlayLayer:!0,stroke:!1,fill:!1}),this._url="",this._imageType=void 0,await this._initGradient(),this._initImage(),this._tooltip=Object.assign(document.createElement("div"),{className:"valueTip",style:"opacity:0;pointer-events:none;transition:opacity .2s ease"}),this._spinner=document.createElement("div"),this._spinnerManager=new o(this._spinner),this}});t.polygon.ndvi=(t=[],i={})=>new c(t,i);const p=t.polygon.ndvi;export{p as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.