我们还是去上面说的github官方文档查询store的文档:https://github.com/Esri/i3s-spec/blob/master/docs/1.7/store.cmn.md
json文件很容易通过官方文档+明文阅读的方式了解每个属性的含义,如果是二进制文件,那就需要费一番功夫了。
以几何数据二进制文件(0.bin)为例,二进制几何文件的文档在这里:
https://github.com/Esri/i3s-spec/blob/master/docs/1.7/geometryBuffer.cmn.md
https://github.com/Esri/i3s-spec/blob/master/docs/1.7/vertexAttribute.cmn.md
这两个文档讲得并不是很详细,在我的实践中,已知用python或者js的ArrayBuffer进行读取,1~4字节是顶点数量,5~8是要素数量。
然后每4*3个字节为一组3个Float32数字(x,y,z),一共“顶点数量”组。
紧接着便是下一个几何数据,可能是法线、uv等,要看3dSceneLayer.json内的store属性下的defaultGeometrySchema属性下的order属性值。
这个建议看ogc的标准文档:
8.2节就是几何数据二进制文件的格式,虽然也比较简陋,不过比esri的文档好一些。
这张图虚线框大概表达的是“非必要属性”。
笔者不才,在3dSceneLayer.json中找到的vertexAttributes属性并没出现offset的值(plus:在每个节点目录下的feature目录下的json里!),尽管vertexAttributes每个属性在二进制文件中的的偏移量均可自己用已知数字计算,但是终究没有直接给值来的方便,也没有能力将读取到的position。
日后有机会,还会介绍如何用python或js来读取二进制文件内的vertexAttributes,甚至二进制要素属性数据。
3.2. i3s 1.6版本 建筑slpkBIM数据是有多个分层的(楼板、机电、门窗、外立面等),每个分层用子图层(sublayers)表示。
每一个sublayers相当于一个独立的3d模型slpk:
此例为1.6的slpk,所以没有nodepages目录,在每个节点上,描述节点的文件仍旧是3dNodeIndexDocument.json。
这是一个BIM文件打包成slpk后的树状结构(发布成场景服务,以URL访问的形式)。因为没有nodepages,所以在1.6版本中,节点文件夹的名称会出现"0-1-1"的表示,即0节点下的1节点下的1节点。
4. slpk中的主要json的类定义①3dSceneLayerInfo.json.gz
位于slpk压缩包内的根目录,用于描述整个slpk的信息;可以人为继续往这个json里加属性,不影响已有属性的查询。
查询文档:https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DSceneLayer.cmn.md
②3dNodeIndexDocument.json.gz
位于slpk压缩包内根目录下nodes文件夹下的每个顶点文件夹下,root节点也有,1.7为了兼容1.6保留了这个文件,1.7改用nodepages来提高性能。
查询文档:https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DNodeIndexDocument.cmn.md
③节点页
slpk压缩包根目录下的nodepages下的*.json.gz(可能有多个)是节点页信息,用来描述整个slpk节点树形结构和每个节点的大致信息。
查询文档(node的文档,因为节点页json就是节点json数组):https://github.com/Esri/i3s-spec/blob/master/docs/1.7/node.cmn.md
④统计数据
slpk压缩包根目录下的statistics目录下的每个字段文件夹(f_*)下的0.json.gz文件,用来描述这个字段的统计信息。
查询文档:https://github.com/Esri/i3s-spec/blob/master/docs/1.7/statsInfo.cmn.md
⑤要素数据
slpk压缩包根目录下的nodes文件夹下的每个顶点文件夹下的features文件夹下的*.json.gz文件,描述的是要素的信息(要素包括几何数据和属性数据)。
查询文档:https://github.com/Esri/i3s-spec/blob/master/docs/1.7/featureData.cmn.md
⑥共享资源
1.7兼容1.6的json文档,位于每个顶点文件夹下的shared文件夹下,*.json.gz文件。
查询文档:https://github.com/Esri/i3s-spec/blob/master/docs/1.7/sharedResource.cmn.md
主要的json文件就是这么多(以3d模型的slpk为例,bim的slpk应该类似),二进制文件的读写主要一烤要素数据的json,这个以后再谈(其实是笔者没有整理好)。
5. 同类标准3dtiles/gltf与s3m既然说到标准,就不得不提一下同类竞争对手。
cesium是一个做3dWebGIS的api,主推的标准是3dtiles/gltf,主要资料如下:
https://github.com/KhronosGroup/glTF
https://www.khronos.org/gltf/
https://github.com/AnalyticalGraphicsInc/3d-tiles
s3m是我国推动的三维地理数据标准,主要由超图等公司建设设计,主要资料如下:
https://download.csdn.net/download/cRGBc/12082994