I3S服务中属性数据解析——基于JS的编程方式

I3S数据发布服务后,属性数据的查询其实非常麻烦的,而且特别的不友好。所以本文至少抛转引玉。

 

第一步:尝试获得属性的地址,

 由于I3S是以树的结构来存储的,所以叶子节点的数据是最全的。要获得哪些节点是叶子节点,可以通过变量的方式来获得;

1)首先通过ajax获得根节点的数据:根目录地址是http://myService/Host/MyLayer/SceneServer/layers/0/nodes/root?f=json

2)  在获得这个数据的JSON后,可以看到Children是包含了子节点的数据。如果children有那么就继续遍历。直到children为空。

3) 这里需要注意的是,由于遍历是很深的,有时候达到上万,需要写一个小小的堆栈,获得要遍历的树节点的地址,然后出栈来进行遍历。

 

第二步:完成第一步后就可以获得叶子节点的地址啦。比如叶子节点的地址http://myService/Host/MyLayer/SceneServer/layers/0/nodes/77-0-0-1-2?f=json

那么这个叶子节点的属性地址是

http://myService/Host/MyLayer/SceneServer/layers/0/nodes/77-0-0-1-2/attributes/f_0

1) 其中的尾号f_0是第0个字段,f_1是第1个字段,这个图层有多少字段,就有多少f_x。

2)叶子节点存储的属性数据是一个片的数据,也就是一个tile的数据,所以是可变的,具体数量看第三步

3)I3S对每个属性数据单独放置一个文件,以tile进行切割。所以读取一个对象的数据,需要请求N次。

 

第三步:读取root节点下对字段信息的描述。

地址是http://myService/Host/MyLayer/SceneServer/layers?f=json

在这个JSON下有一个attributeStorageInfo,里面解释了每个字段的描述信息

其中header表示属性数据存储的头部信息。

可以看到里面包含了UInt32之类的东西,说明属性数据是利用二进制的方式来写的,并且跟文件一样,包含了头部,其中头部是说明内容。

 

第四步:利用XMLHttpRequest来读取数据

1)设置responseType='blob'

2) 读取完成后会得到一个二进制串(blob)。

3)创建一个FileReader; var fr=new FileReader();fr.readAsArrayBuffer(response);

file.οnlοad=function(){ var n=new UInt32Array(file.result.slice(0,4) }

4) 完成。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值