arcgis js多執行緒克里金插值初體驗

weixin_34249678發表於2018-03-20

    最近做關於雨量插值的專案,本來使用後臺的GP工具做的,但是處理時間比較長需要十幾秒鐘左右,所以研究怎麼通過前臺來計算。     參考下克里金例子,思路是生成要計算區域的100乘以100網格,然後通過函式進行計算該網格克里金值,最後利用網格和值進行渲染,使用該方法繪製速度有所提高,七秒左右就能繪製完成,不過速度還是能提高的,提高的要訣是使用多執行緒。     多執行緒使用比較簡單,只要new worker('krigingworker.js'),然後通過postmessage以及onmessage與主執行緒和多執行緒中通訊。下面給出例子

var myWorker = new Worker("krigingworker.js");
myWorker.postMessage = myWorker.webkitPostMessage || myWorker.postMessage;
myWorker.postMessage();
複製程式碼

    krigingworker.js中

importScripts("kriging.js")
self.postMessage = self.webkitPostMessage || self.postMessage;
self.onmessage = function(e) {
self.postMessage();
複製程式碼

    worker中使用別的指令碼要使用importScripts匯入,當需要傳遞引數可以transferable object(通訊時會比較快,參考worker使用),本次專案中使用Float64Array.看幾個初始化範例

//定義一個位元組為10248的Float64Array
var buffer=new ArrayBuffer(10248)
var a =new Float64Array(buffer);
//定義一個長度為1000的Float64Array
var a =new Float64Array(1000);
//定義一個[1,1,1]的Float64Array
var a =new Float64Array([1,1,1])
複製程式碼

我們嘗試定義一個並接收到資料

var size =1000;
var result = new ArrayBuffer(size);
var gridPoint = new Float64Array(result);
self.postMessage(gridPoint.buffer, [gridPoint.buffer]);
複製程式碼
myWorker.onmessage = function(e) {
var data = new Float64Array(e.data);
複製程式碼

相關文章