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>


分享到:


相關文章: