import get from 'lodash-es/get.js'
import size from 'lodash-es/size.js'
import isearr from 'wsemi/src/isearr.mjs'
import isestr from 'wsemi/src/isestr.mjs'
import isnum from 'wsemi/src/isnum.mjs'
import ispint from 'wsemi/src/ispint.mjs'
import isbol from 'wsemi/src/isbol.mjs'
import ispm from 'wsemi/src/ispm.mjs'
import isfun from 'wsemi/src/isfun.mjs'
import cdbl from 'wsemi/src/cdbl.mjs'
import cint from 'wsemi/src/cint.mjs'
import pmSeries from 'wsemi/src/pmSeries.mjs'
import _kriging from './interp2Kriging.mjs'
/**
* 不規則點內插至規則網格
*
* Unit Test: {@link https://github.com/yuda-lyu/w-gis/blob/master/test/interp2Grid.test.mjs Github}
* @memberOf w-gis
* @param {Array} pts 輸入二維座標加觀測數據點陣列,為[{x:x1,y:y1,z:z1},{x:x2,y:y2,z:z2},...]點物件之陣列
* @param {Number} xmin 輸入網格x向最小座標數字
* @param {Number} xmax 輸入網格x向最大座標數字
* @param {Number} dx 輸入網格x向間距數字
* @param {Number} ymin 輸入網格y向最小座標數字
* @param {Number} ymax 輸入網格y向最大座標數字
* @param {Number} dy 輸入網格y向間距數字
* @param {Object} [opt={}] 輸入設定物件,預設{}
* @param {String} [opt.keyX='x'] 輸入點物件之x座標欄位字串,預設'x'
* @param {String} [opt.keyY='y'] 輸入點物件之y座標欄位字串,預設'y'
* @param {String} [opt.keyZ='z'] 輸入點物件之z座標或值欄位字串,預設'z'
* @param {String} [opt.modePick='min'] 輸入挑選方式字串,可選'min'、'max',預設'min'
* @param {Function} [opt.funValid=(x,y)=>{return true}] 輸入確認點座標(x,y)是否有效函數,回傳布林值,可使用Promise回傳,預設(x,y)=>{return true}
* @param {Function} [opt.funKriging=interp2Kriging] 輸入克利金處理函數,預設使用內建interp2Kriging
* @param {Number} [opt.scale=1] 輸入當funKriging使用interp2Kriging時,正規化範圍數值,預設1是正規化0至1之間,使用scaleXY則是正規化為0至scaleXY之間,預設1
* @param {String} [opt.method='friedrich'] 輸入當funKriging使用interp2Kriging時,後端引擎字串,可選'friedrich'(Gaussian Process Regression,核函數)、'invall'(經典Ordinary Kriging,半變異圖擬合),預設'friedrich'
* @param {String} [opt.model='exponential'] 輸入當funKriging使用interp2Kriging時,擬合模式字串,method='invall'時可選'exponential'、'gaussian'、'spherical';method='friedrich'時'gaussian'對應SquaredExp、其餘(含spherical)對應Exponential,預設'exponential'
* @param {Number} [opt.sigma2=0] 輸入當funKriging使用interp2Kriging時,自動擬合參數sigma2數值,僅method='invall'時有效,預設0
* @param {Number} [opt.alpha=100] 輸入當funKriging使用interp2Kriging時,自動擬合參數alpha數值,僅method='invall'時有效,預設100
* @param {Number} [opt.ls=0.5] 輸入當funKriging使用interp2Kriging時,friedrich核函數lengthscale數值(對應正規化後值域),僅method='friedrich'時有效,預設0.5
* @param {Number} [opt.noise=0.01] 輸入當funKriging使用interp2Kriging時,friedrich觀測噪音標準差(對應正規化後值域),僅method='friedrich'時有效,預設0.01
* @param {String} [opt.variogram_model='spherical'] 輸入內建interp2Kriging之變異函數模型字串,預設'spherical'
* @param {Number} [opt.nlags=9] 輸入內建interp2Kriging之分箱數量整數,預設9
* @param {Function} [opt.funAdjust=(x,y,z)=>{return z}] 輸入內插後值調整函數,用於修正不合理值或做後處理,回傳布林值,可使用Promise回傳,預設(x,y,z)=>{return z}
* @param {Boolean} [opt.returnGrid=true] 輸入是否回傳規則網格物件布林值,若false則回傳內插後點物件陣列,預設true
* @param {Boolean} [opt.inverseKeyY=false] 輸入是否反轉y方向索引布林值,用於輸出grds之y向(列)順序,預設false
* @returns {Object} 回傳規則網格物件,物件內grds為規則網格之二維陣列
* @example
*
* let ps
* let r
* let xmin = 0
* let xmax = 1200
* let dx = 100
* let ymin = 0
* let ymax = 400
* let dy = 50
*
* ps = [{ x: 243, y: 206, z: 95 }, { x: 233, y: 225, z: 146 }, { x: 21, y: 325, z: 22 }, { x: 953, y: 28, z: 223 }, { x: 1092, y: 290, z: 39 }, { x: 744, y: 200, z: 191 }, { x: 174, y: 3, z: 22 }, { x: 537, y: 368, z: 249 }, { x: 1151, y: 371, z: 86 }, { x: 814, y: 252, z: 125 }]
* r = await interp2Grid(ps, xmin, xmax, dx, ymin, ymax, dy)
* console.log(JSON.stringify(r))
* // => {"xnum":13,"xmin":0,"xmax":1200,"dx":100,"ynum":9,"ymin":0,"ymax":400,"dy":50,"zmin":16.512783233481855,"zmax":231.02291267903476,"grds":[[16.512783233481855,20.23409417491429,32.203625688948094,70.75829586852394,106.29636289446873,136.26157338695208,159.3302458664105,176.25056037849853,190.25786783010236,208.01067802043715,195.67301155057046,151.54915883167763,120.51937473398982],[18.670069518965356,26.370054453909752,42.98280773749285,79.28874835169871,116.37124953737602,146.98832777847986,168.95081783516096,182.80223646139953,191.18326740289348,204.18321706306358,188.9657876207688,143.38210943136056,113.93130619543027],[21.828546726543525,36.05637587267176,57.373792310240724,90.34856320598314,128.4472824532458,158.99040294768733,178.78011988484207,188.19684159072483,186.51549159341783,184.7082177477019,165.48916314538053,128.3396222418216,104.24709613853675],[24.88890449369414,46.85374758060586,73.69322667317512,103.3529462466819,142.48327633504744,172.27317590951117,188.6531137901406,192.77718231958355,176.83033675995694,160.50749860532554,138.19315899439047,108.18561006710624,92.51859554539308],[26.5094340288963,56.8067290122589,99.77534599302606,121.47125283926437,157.96929144819265,186.73988465771058,198.26553251236888,194.36120211350593,160.19043809323122,136.5056223941274,112.06171835195147,84.98946116025365,80.73632966471126],[25.475697367771218,63.06533481036112,124.1952058247717,144.1671677232606,173.08015590337862,202.17932782175728,207.5946149622372,188.796369113342,136.2309506837413,117.46855227040241,90.87059113844559,60.169796488759246,72.21191660931672],[21.625472477473117,65.00630241398409,122.46750886104104,154.6550161786314,184.81872537919347,218.04346446527518,216.62503620605096,183.79223945245124,135.09770859198227,107.76106937863402,79.60283256550423,45.03290311345721,71.11647763753926],[24.686304503971378,66.68912350006042,118.45391057707072,156.15100322991165,190.51535861983996,231.02291267903476,222.32787417658628,180.65927594027391,136.62983890889296,105.30934095447489,79.219350309576,65.89133299839179,77.27194342654504],[35.01112331719393,70.0851421042986,115.06190031313791,153.43674970776914,188.96139449378788,226.04593742222826,216.80118887307228,176.39074312651772,136.6893187515272,105.88799266233814,83.56164434566028,77.98996785803848,80.92651427041218]]}
*
* ps = [{ a: 243, b: 206, c: 95 }, { a: 233, b: 225, c: 146 }, { a: 21, b: 325, c: 22 }, { a: 953, b: 28, c: 223 }, { a: 1092, b: 290, c: 39 }, { a: 744, b: 200, c: 191 }, { a: 174, b: 3, c: 22 }, { a: 537, b: 368, c: 249 }, { a: 1151, b: 371, c: 86 }, { a: 814, b: 252, c: 125 }]
* r = await interp2Grid(ps, xmin, xmax, dx, ymin, ymax, dy, { keyX: 'a', keyY: 'b', keyZ: 'c' })
* console.log(JSON.stringify(r))
* // => {"xnum":13,"xmin":0,"xmax":1200,"dx":100,"ynum":9,"ymin":0,"ymax":400,"dy":50,"zmin":16.512783233481855,"zmax":231.02291267903476,"grds":[[16.512783233481855,20.23409417491429,32.203625688948094,70.75829586852394,106.29636289446873,136.26157338695208,159.3302458664105,176.25056037849853,190.25786783010236,208.01067802043715,195.67301155057046,151.54915883167763,120.51937473398982],[18.670069518965356,26.370054453909752,42.98280773749285,79.28874835169871,116.37124953737602,146.98832777847986,168.95081783516096,182.80223646139953,191.18326740289348,204.18321706306358,188.9657876207688,143.38210943136056,113.93130619543027],[21.828546726543525,36.05637587267176,57.373792310240724,90.34856320598314,128.4472824532458,158.99040294768733,178.78011988484207,188.19684159072483,186.51549159341783,184.7082177477019,165.48916314538053,128.3396222418216,104.24709613853675],[24.88890449369414,46.85374758060586,73.69322667317512,103.3529462466819,142.48327633504744,172.27317590951117,188.6531137901406,192.77718231958355,176.83033675995694,160.50749860532554,138.19315899439047,108.18561006710624,92.51859554539308],[26.5094340288963,56.8067290122589,99.77534599302606,121.47125283926437,157.96929144819265,186.73988465771058,198.26553251236888,194.36120211350593,160.19043809323122,136.5056223941274,112.06171835195147,84.98946116025365,80.73632966471126],[25.475697367771218,63.06533481036112,124.1952058247717,144.1671677232606,173.08015590337862,202.17932782175728,207.5946149622372,188.796369113342,136.2309506837413,117.46855227040241,90.87059113844559,60.169796488759246,72.21191660931672],[21.625472477473117,65.00630241398409,122.46750886104104,154.6550161786314,184.81872537919347,218.04346446527518,216.62503620605096,183.79223945245124,135.09770859198227,107.76106937863402,79.60283256550423,45.03290311345721,71.11647763753926],[24.686304503971378,66.68912350006042,118.45391057707072,156.15100322991165,190.51535861983996,231.02291267903476,222.32787417658628,180.65927594027391,136.62983890889296,105.30934095447489,79.219350309576,65.89133299839179,77.27194342654504],[35.01112331719393,70.0851421042986,115.06190031313791,153.43674970776914,188.96139449378788,226.04593742222826,216.80118887307228,176.39074312651772,136.6893187515272,105.88799266233814,83.56164434566028,77.98996785803848,80.92651427041218]]}
*
* ps = [{ x: 243, y: 206, z: 95 }, { x: 233, y: 225, z: 146 }, { x: 21, y: 325, z: 22 }, { x: 953, y: 28, z: 223 }, { x: 1092, y: 290, z: 39 }, { x: 744, y: 200, z: 191 }, { x: 174, y: 3, z: 22 }, { x: 537, y: 368, z: 249 }, { x: 1151, y: 371, z: 86 }, { x: 814, y: 252, z: 125 }]
* r = await interp2Grid(ps, xmin, xmax, dx, ymin, ymax, dy, { scale: 1000, method: 'invall' }) //scale-robust為invall專屬, friedrich固定kernel非scale-robust
* console.log(JSON.stringify(r))
* // => {"xnum":13,"xmin":0,"xmax":1200,"dx":100,"ynum":9,"ymin":0,"ymax":400,"dy":50,"zmin":27.716420638719953,"zmax":229.93464715826363,"grds":[[44.75150359539723,33.3731130456213,33.898285959160816,75.75470490990179,111.95710473149887,141.1498265462182,162.9459009371747,178.5859300936557,191.48293861156722,208.81802511395625,199.48735656974148,162.3010652278742,139.58229163878707],[43.278487385601736,36.56178372212586,43.70097267468564,81.34411459253306,118.98473675109445,149.02943152384924,170.1140778466147,183.179952389838,190.7561365867865,203.31673250583924,190.93888531046477,152.18106412879473,131.1303732840151],[43.188448792813944,44.65140466690163,58.49967415560579,90.73641845998743,128.7782694260323,158.79276063034584,178.11277546087098,187.40687634934702,185.37913042930217,183.4194561959133,166.72664102123443,135.5945265305907,119.75833215759324],[43.01723687928934,53.805263181724015,74.78037419059208,102.80931089174139,141.2308220822208,170.46799156406598,186.77594170674982,191.60033532320872,175.79675777808842,159.46469201580726,139.1261747237881,114.04299018304688,106.38160257786514],[41.08480660653358,61.698862792557975,100.50549432728357,120.4075127328534,155.7753896524789,183.98181777819244,195.76812296601736,193.304061251412,159.6797783607982,136.06558026941445,112.82889049770114,89.27300522673426,92.8537338093916],[35.967488458888354,65.74413088706663,124.53720660721237,142.9397535622437,170.60148308554733,199.17487480394269,205.06424627939438,187.86800147223812,136.21583771498067,117.90972253067889,91.6262819436468,62.417613690228954,82.44922512861409],[27.716420638719953,66.37302553897003,123.09560307481306,153.90890176196856,182.78671416843704,215.5841197140003,214.71430540817065,183.44168933500427,136.1609898169329,109.45391646724778,80.8624102184981,45.28745840459231,79.54913115775784],[31.847991354360566,69.51355338701046,120.62450343623853,156.78399055536397,189.72044252660112,229.93464715826363,221.71844479339836,181.5468968539019,139.24108529554678,108.74457142842883,81.95639661703564,66.50915956751138,84.78931182091229],[48.71434172098658,77.18149833637538,120.04944872983332,156.36419684697321,190.18663173864695,226.8039064989942,218.03385229477985,179.15549143493547,141.35776216308315,111.63930150324393,88.90310614106163,81.63042177987194,90.7749456396484]]}
*
* ps = [{ x: 243, y: 206, z: 95 }, { x: 233, y: 225, z: 146 }, { x: 21, y: 325, z: 22 }, { x: 953, y: 28, z: 223 }, { x: 1092, y: 290, z: 39 }, { x: 744, y: 200, z: 191 }, { x: 174, y: 3, z: 22 }, { x: 537, y: 368, z: 249 }, { x: 1151, y: 371, z: 86 }, { x: 814, y: 252, z: 125 }]
* r = await interp2Grid(ps, xmin, xmax, dx, ymin, ymax, dy, { model: 'gaussian' }) //friedrich默認, gaussian對應SquaredExp核
* console.log(JSON.stringify(r))
* // => {"xnum":13,"xmin":0,"xmax":1200,"dx":100,"ynum":9,"ymin":0,"ymax":400,"dy":50,"zmin":-150.359484303797,"zmax":367.8241983091519,"grds":[[-147.0070301178658,-54.41692259738224,48.88733882660926,153.3630879270968,247.54126827100538,319.94891314865407,361.5159678683489,367.8241983091519,340.47817298141837,287.0677669674716,219.60593037485478,151.818719623391,96.04696543464625],[-150.359484303797,-57.50499219816213,42.79716789188603,140.95807086705173,226.14186622860672,288.14140305116683,319.5896566629187,317.89910575931606,286.2755876027249,233.3582618757871,171.44537710854212,113.73184640136677,71.3269109725768],[-143.52044012272995,-50.50343735563035,46.28747065296875,137.2964363113794,212.46391628160927,263.0307512442952,283.5165571190492,273.3082395918249,237.28308005300602,185.11000294125,129.26950215544264,82.26539311631845,53.79768995790759],[-126.50856989826792,-33.404809565561344,59.47761030368624,142.69529489865175,207.0914502683236,245.50493520052527,254.48277590328527,235.48402807961384,195.08711341619363,143.94403255167333,94.60573523957889,58.735978900115285,44.475933197097866],[-99.79006903623063,-6.66146150636547,82.02966984636832,157.02987534587479,210.19083424904193,236.0618557170019,233.30963458605268,205.51249501229162,160.9367180075023,111.14367697967215,68.63692139037666,44.106611206736204,44.01850517923465],[-64.25809160129721,28.83389600640423,113.16260742294965,179.7382714201468,221.50277618451264,234.78674169117318,220.41653108518574,184.08368022638976,135.68535869803742,87.59294439068327,52.14173104528095,38.934145743638354,52.680893426311826],[-21.187812339712984,71.79308173486547,151.69229193765008,209.85194392092683,240.35956047240995,241.35405878411277,215.8075970113826,171.46532375610315,119.75578162493987,73.73783366125755,45.45800231939301,43.33960644566442,70.29810057461933],[27.829902298421807,120.59979801448347,196.09473066137198,246.0498601924446,265.726191196513,255.05353760097515,219.08271363238066,167.50120991664988,113.12984747744976,69.5728774318707,48.47133751109904,57.00339594109268,96.28955650207985],[80.97173106267283,173.39488514969847,244.58815148182572,286.73246473230716,296.262412108808,274.83820585914145,229.47170204998474,171.63380300772806,115.36357645184434,74.65344925151008,60.62948592496307,79.1856654013652,129.68786751859457]]}
*
* ps = [{ x: 243, y: 206, z: 95 }, { x: 233, y: 225, z: 146 }, { x: 21, y: 325, z: 22 }, { x: 953, y: 28, z: 223 }, { x: 1092, y: 290, z: 39 }, { x: 744, y: 200, z: 191 }, { x: 174, y: 3, z: 22 }, { x: 537, y: 368, z: 249 }, { x: 1151, y: 371, z: 86 }, { x: 814, y: 252, z: 125 }]
* r = await interp2Grid(ps, xmin, xmax, dx, ymin, ymax, dy, { sigma2: 0.001, alpha: 70, method: 'invall' }) //sigma2/alpha為invall半變異圖擬合參數, friedrich不適用
* console.log(JSON.stringify(r))
* // => {"xnum":13,"xmin":0,"xmax":1200,"dx":100,"ynum":9,"ymin":0,"ymax":400,"dy":50,"zmin":26.701776096728345,"zmax":231.16722254290013,"grds":[[44.11259991617855,32.58450881510232,32.76678140889048,74.2917476479156,110.8906140074769,140.71177964055232,163.06616115295472,179.11502822658102,192.29078928968042,209.95815571466474,200.55109691937588,162.85705779717352,139.89170721934147],[42.61820720122279,35.71041576002229,42.20317945504952,79.46948139766397,117.76066932315202,148.59606792401644,170.29707464354252,183.76349937447452,191.5061647507026,204.2911682442632,191.7981952284658,152.53751223841732,131.30395530835756],[42.539549140517906,43.8682532885825,56.67719512603222,88.39339544912986,127.49833508140833,158.44006523651268,178.39437462529554,188.06459836041196,185.98874971121745,183.9624064738573,167.1064571105411,135.6435755796063,119.76026775033723],[42.40373922516747,53.363687192570794,73.04828246858823,100.13694358752468,140.12379463484046,170.29909587800478,187.1850067213191,192.35842981670092,176.16886158624536,159.48169146034536,138.9684068006453,113.70615799956849,106.20087092877779],[40.475947890621654,61.84636782352866,100.87164130491789,118.51969471321917,155.17367785922463,184.10530910814234,196.31283310410095,194.0800848116069,159.58692053597147,135.55390133035564,112.17296618268094,88.50580626168168,92.52730118195944],[35.241030309738626,66.37032301391976,127.92631718109324,143.48034347842253,170.73957790937519,199.67024834314628,205.7419513911939,188.38823643531202,135.36768638962553,117.01563653626947,90.61097302023494,61.19704954557336,82.09912411624504],[26.701776096728345,67.08365868969182,126.02587930956292,155.6532451767952,183.60847488953968,216.47538395931667,215.53334174966398,183.76978391699137,135.4260482049657,108.47833203695497,79.76360673569025,43.90263898577459,79.40538262088131],[30.87691293677275,70.13688477331618,122.88731890916635,158.7167710050036,190.97418094947915,231.16722254290013,222.66784391843683,181.84273299017318,138.739345167688,107.91389402110133,81.0648238841768,65.98340433363867,85.04412844530214],[48.14919037640777,77.76315260022243,121.8147111056278,158.17170146686848,191.6135973149057,228.14610013364904,219.01737089705114,179.49014246253026,141.06205182632874,111.03450527633353,88.31839228901936,81.59594088565929,91.24372341789248]]}
*
*/
async function interp2Grid(pts, xmin, xmax, dx, ymin, ymax, dy, opt = {}) {
//check
if (!isearr(pts)) {
throw new Error(`no pts`)
}
//check xmin
if (!isnum(xmin)) {
throw new Error(`xmin[${xmin}] is not an effective number`)
}
xmin = cdbl(xmin)
//check xmax
if (!isnum(xmax)) {
throw new Error(`xmax[${xmax}] is not an effective number`)
}
xmax = cdbl(xmax)
//check dx
if (!isnum(dx)) {
throw new Error(`dx[${dx}] is not an effective number`)
}
dx = cdbl(dx)
//check xmin>xmax
if (xmin > xmax) {
throw new Error(`xmin[${xmin}]>xmax[${xmax}]`)
}
//check ymin
if (!isnum(ymin)) {
throw new Error(`ymin[${ymin}] is not an effective number`)
}
ymin = cdbl(ymin)
//check ymax
if (!isnum(ymax)) {
throw new Error(`ymax[${ymax}] is not an effective number`)
}
ymax = cdbl(ymax)
//check dy
if (!isnum(dy)) {
throw new Error(`dy[${dy}] is not an effective number`)
}
dy = cdbl(dy)
//check ymin>ymax
if (ymin > ymax) {
throw new Error(`ymin[${ymin}]>ymax[${ymax}]`)
}
//keyX
let keyX = get(opt, 'keyX')
if (!isestr(keyX)) {
keyX = 'x'
}
//keyY
let keyY = get(opt, 'keyY')
if (!isestr(keyY)) {
keyY = 'y'
}
//keyZ
let keyZ = get(opt, 'keyZ')
if (!isestr(keyZ)) {
keyZ = 'z'
}
//funValid
let funValid = get(opt, 'funValid')
if (!isfun(funValid)) {
funValid = () => {
return true
}
}
//funKriging
let funKriging = get(opt, 'funKriging')
if (!isfun(funKriging)) {
funKriging = _kriging
}
//variogram_model
let variogram_model = get(opt, 'variogram_model')
if (!isestr(variogram_model)) {
variogram_model = 'spherical'
}
//nlags
let nlags = get(opt, 'nlags')
if (!ispint(nlags)) {
nlags = 9
}
nlags = cint(nlags)
//funAdjust
let funAdjust = get(opt, 'funAdjust')
if (!isfun(funAdjust)) {
funAdjust = (x, y, z) => {
return z
}
}
//returnGrid
let returnGrid = get(opt, 'returnGrid')
if (!isbol(returnGrid)) {
returnGrid = true
}
//inverseKeyY
let inverseKeyY = get(opt, 'inverseKeyY')
if (!isbol(inverseKeyY)) {
inverseKeyY = false
}
//xnum
let xnum = 0
for (let x = xmin; x <= xmax; x += dx) {
xnum++
}
//ynum
let ynum = 0
for (let y = ymin; y <= ymax; y += dy) {
ynum++
}
//vpts
let vpts = []
let kpInx = {}
let k = -1
let ix = -1
for (let x = xmin; x <= xmax; x += dx) {
ix++
let iy = -1
for (let y = ymin; y <= ymax; y += dy) {
iy++
k++
//funValid
let b = funValid(x, y)
if (ispm(b)) {
b = await b
}
//check
if (!b) {
continue
}
//push
vpts.push({
[keyX]: x,
[keyY]: y,
[keyZ]: '',
})
//save
kpInx[`${ix}:${iy}`] = k
}
}
// console.log('rs', rs)
//check
if (size(vpts) === 0) {
console.log(xmin, xmax, dx, ymin, ymax, dy)
throw new Error(`no vpts`)
}
//funKriging
let ipts = await funKriging(pts, vpts, {
keyX,
keyY,
keyZ,
...opt,
//interp2Kriging設定參數
// scale,
// model,
// sigma2,
// alpha,
//WKriging設定參數
// variogram_model,
// nlags,
})
//調整不合理值
ipts = await pmSeries(ipts, async (m) => {
// console.log('m', m)
//funAdjust
let z = funAdjust(m[keyX], m[keyY], m[keyZ])
if (ispm(z)) {
z = await z
}
//update
m[keyZ] = z
return m
})
// console.log('ipts(adjust)', ipts)
//returnGrid
let rs = null
if (!returnGrid) {
rs = ipts
}
else {
let grds = []
let zmin = 1e20
let zmax = -1e20
for (let iy = 0; iy < ynum; iy++) {
grds[iy] = []
let _iy = iy
if (inverseKeyY) {
_iy = ynum - 1 - iy
}
for (let ix = 0; ix < xnum; ix++) {
let k = kpInx[`${ix}:${_iy}`]
grds[iy][ix] = ipts[k][keyZ]
zmin = Math.min(zmin, ipts[k][keyZ])
zmax = Math.max(zmax, ipts[k][keyZ])
}
}
rs = {
xnum,
xmin,
xmax,
dx,
ynum,
ymin,
ymax,
dy,
zmin,
zmax,
grds,
}
}
return rs
}
export default interp2Grid