arcgis js多線程克里金插值初體驗

    最近做關於雨量插值的項目,本來使用後臺的GP工具做的,但是處理時間比較長需要十幾秒鐘左右,所以研究怎麼通過前臺來計算。

    參考下克里金例子,思路是生成要計算區域的100乘以100網格,然後通過函數進行計算該網格克里金值,最後利用網格和值進行渲染,使用該方法繪製速度有所提高,七秒左右就能繪製完成,不過速度還是能提高的,提高的要訣是使用多線程。

    多線程使用比較簡單,只要new worker('krigingworker.js'),然後通過postmessage以及onmessage與主線程和多線程中通訊。下面給出例子

<code>

var

myWorker =

new

Worker(

"krigingworker.js"

); myWorker.postMessage = myWorker.webkitPostMessage || myWorker.postMessage; myWorker.postMessage(); /<code>

    krigingworker.js中

<code>importScripts(

"kriging.js"

)

self

.postMessage =

self

.webkitPostMessage ||

self

.postMessage;

self

.onmessage =

function

(e)

{

self

.postMessage(); /<code>

    worker中使用別的腳本要使用importScripts導入,當需要傳遞參數可以transferable object(通訊時會比較快,參考worker使用),本次項目中使用Float64Array.看幾個初始化範例

<code> 

var

buffer=

new

ArrayBuffer

(

10248

)

var

a =

new

Float64Array

(buffer);

var

a =

new

Float64Array

(

1000

);

var

a =

new

Float64Array

([

1

,

1

,

1

]) /<code>

我們嘗試定義一個並接收到數據

<code>

var

size =

1000

;

var

result =

new

ArrayBuffer

(size);

var

gridPoint =

new

Float64Array

(result); self.postMessage(gridPoint.buffer, [gridPoint.buffer]); /<code>
<code>myWorker.onmessage = 

function

(

e

)

{

var

data =

new

Float64Array

(e.data);/<code>


分享到:


相關文章: