ArcGIS JS API多線程克里金插值

    最近作關於雨量插值的項目,原本使用後臺的GP工具作的,可是處理時間比較長鬚要十幾秒鐘左右,因此研究怎麼經過前臺來計算。
    參考下克里金例子,思路是生成要計算區域的100乘以100網格,而後經過函數進行計算該網格克里金值,最後利用網格和值進行渲染,使用該方法繪製速度有所提升,七秒左右就能繪製完成,不過速度仍是能提升的,提升的要訣是使用多線程。
    多線程使用比較簡單,只要new worker('krigingworker.js'),而後經過postmessage以及onmessage與主線程和多線程中通信。下面給出例子web

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);

相關文章
相關標籤/搜索