ArcGIS JS API多線程克里金插值


    最近做關於雨量插值的項目,本來使用后台的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);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM