常见GIS文件格式

2023年 9月 16日 36.7k 0

GeoJSON

GeoJSON是用于描述地理空间信息的数据格式,它不是一种新的格式,其语法规范是符合JSON格式的,只不过对其名称进行了规范,专门用于表示地理信息。

GeoJSON的最外层是一个单独的对象(object)。这个对象可表示:
① 几何体(Geometry);
② 要素(Feature);
③ 要素集合(FeatureCollection);

最外层的 GeoJSON 里可能包含有很多子对象,每一个 GeoJSON 对象都有一个 type 属性,表示对象的类型,其type 的值可以是:Point、MultiPoint、LineString、MultiLineString、Polygon、MultiPolygon、GeometryCollection、Feature、FeatureCollection。下面是一个GeoJSON示例:

{ "type": "Feature", "geometry": { "type": "Point", "coordinates": [125.6, 10.1] }, "properties": { "name": "Dinagat Islands" } }
详见geojson规范

KML

KML (keyhole markup language)是一种基于XML语法格式的文件,用来描述和存储地理信息数据(点、线、面、多边形、多面体以及模型等),通常应用于 Google 地球相关软件中(Google Earth,Google Map 等),它跟XML文件最大的不同就是KML描述的是地理信息数据,同时KML已正式被OGC采用,成为OGC众多规范中的一个。KML文件有两个文件扩展名:​.KML 和​.KMZ(一个或几个 KML 文件的压缩集,采用 zip 格式压缩)。Cesium从1.7版开始就支持KML,目前对KML的支持还不完整,但是支持大量的标准以及Google的gx扩展名称空间。

Shp文件
概述

Shapefile属于一种矢量图形格式,它能够保存几何图形的位置及相关属性。但这种格式没法存储地理数据的拓扑信息。Shapefile在九十年代初的ArcView GIS的第二个版本被首次应用。目前,许多自由的程序或商业的程序都可以读取Shapefile。

Shapefile是一种比较原始的矢量数据存储方式,它仅仅能够存储几何体的位置数据,而无法在一个文件之中同时存储这些几何体的属性数据。因此,Shapefile还必须附带一个二维表用于存储Shapefile中每个几何体的属性信息。Shapefile中许多几何体能够代表复杂的地理事物,并为他们提供强大而精确的计算能力。

Shapefile文件指的是一种文件存储的方法,实际上该种文件格式是由多个文件组成的。其中,要组成一个Shapefile,有三个文件是必不可少的,它们分别是".shp", ".shx"与 ".dbf"文件。表示同一数据的一组文件其文件名前缀应该相同。例如,存储一个关于湖的几何与属性数据,就必须有lake.shp,lake.shx与lake.dbf三个文件。而其中“真正”的Shapefile的后缀为shp,然而仅有这个文件数据是不完整的,必须要把其他两个附带上才能构成一组完整的地理数据。除了这三个必须的文件以外,还有八个可选的文件,使用它们可以增强空间数据的表达能力。所有的文件名都必须遵循MS DOS的8.3文件名标准(文件前缀名8个字符,后缀名3个字符,如shapefil.shp),以方便与一些老的应用程序保持兼容性,尽管现在许多新的程序都能够支持长文件名。此外,所有的文件都必须位于同一个目录之中。

必须的文件:

.shp — 图形格式,用于保存元素的几何实体。
.shx — 图形索引格式。几何体位置索引,记录每一个几何体在shp文件之中的位置,能够加快向前或向后搜索一个几何体的效率。
.dbf — 属性数据格式,以dBase III+ 的数据表格式存储每个几何形状的属性数据。

其他可选的文件:

.prj — 投帧式,用于保存地理坐标系统与投影信息,是一个存储well-known text投影描述符的文本文件。
.sbn and .sbx — 几何体的空间索引
.fbn and .fbx — 只读的Shapefiles的几何体的空间索引
.ain and .aih — 列表中活动字段的属性索引。
.ixs — 可读写Shapefile文件的地理编码索引
.mxs — 可读写Shapefile文件的地理编码索引(ODB格式)
.atx — .dbf文件的属性索引,其文件名格式为shapefile.columnname.atx (ArcGIS 8及之后的版本)
.shp.xml — 以XML格式保存元数据。
.cpg — 用于描述.dbf文件的代码页,指明其使用的字符编码。

在每个.shp, .shx与.dbf文件之中,图形在每个文件的排序是一致的。也就是说,.shp的第一条记录与.shx及.dbf之中的第一条记录相对应,如此类推。此外,在.shp与.shx之中,有许多字段的字节序是不一样的。因此用户在编写读取这些文件格式的程序时,必须十分小心地处理不同文件的不同字节序。

Shapefile通常以X与Y的方式来处理地理坐标,一般X对应经度,Y对应纬度,用户必须注意X,Y的顺序。

Shapefile图形格式 (.shp)

Shapefile格式的主文件包含了地理参照数据。该文件由一个定长的文件头和一个或若干个变长的记录数据组成。每一条变长数据记录包含一个记录头和一些记录内容。详细的数据存储格式由Esri Shapefile技术描述.[1]提供。注意,虽然Shapefile文件的后缀名与AutoCAD的图形字体源格式它们的文件后缀名相同的,都是.shp ,请不要把它们混淆。

主文件头包含17个字段,共100个字节,其中包含九个4字节(32位有符号整数,int32)整数字段,紧接着是八个8字节(双精度浮点数)有符号浮点数字段。

字节 类型 字节序 用途
0–3 int32 大端序 文件编号 (永远是十六进制数0x0000270a)
4–23 int32 大端序 五个没有被使用的32位整数
24–27 int32 大端序 文件长度,包括文件头。(用16位整数表示)
28–31 int32 小端序 版本
32–35 int32 小端序 图形类型(参见下面)
36–67 double 小端序 最小外接矩形 (MBR),也就是一个包含shapefile之中所有图形的矩形。以四个浮点数表示,分别是X坐标最小值,Y坐标最小值,X坐标最大值,Y坐标最大值。
68–83 double 小端序 Z坐标值的范围。以两个浮点数表示,分别是Z坐标的最小值与Z坐标的最大值。
84–99 double 小端序 M坐标值的范围。以两个浮点数表示,分别是M坐标的最小值与M坐标的最大值。

然后这个文件包含不定数目的变长数据记录,每个数据记录以一个8字节记录头开始:

字节 类型 字节序 用途
0–3 int32 大端序 记录编号 (从1开始)
4–7 int32 大端序 记录长度(以16位整数表示)

在记录头的后面就是实际的记录:

字节 类型 字节序 用途
0–3 int32 小端序 图形类型(参见下面)
4– - - 图形内容

变长记录的内容由图形的类型决定。Shapefile支持以下的图形类型:

值 图形类型 字段
0 空图形 无
1 Point(点) X, Y
3 Polyline(折线) (最小包围矩形)MBR,组成部分数目,点的数目,所有组成部分,所有点
5 Polygon(多边形) (最小包围矩形)MBR,组成部分数目,点的数目,所有组成部分,所有点
8 MultiPoint(多点) (最小包围矩形)MBR,点的数目,所有点
11 PointZ(带Z与M坐标的点) X, Y, Z, M
13 PolylineZ(带Z或M坐标的折线) 必须的: (最小包围矩形)MBR,组成部分数目,点的数目,所有组成部分,所有点,Z坐标范围, Z坐标数组 可选的: M坐标范围, M坐标数组
15 PolygonZ(带Z或M坐标的多边形) 必须的: (最小包围矩形)MBR,组成部分数目,点的数目,所有组成部分,所有点,Z坐标范围, Z坐标数组 可选的: M坐标范围, M坐标数组
18 MultiPointZ(带Z或M坐标的多点) 必须的: (最小包围矩形)MBR,点的数目,所有点, Z坐标范围, Z坐标数组 可选的: M坐标范围, M坐标数组
21 PointM(带M坐标的点) X, Y, M
23 PolylineM(带M坐标的折线) 必须的: (最小包围矩形)MBR,组成部分数目,点的数目,所有组成部分,所有点 可选的: M坐标范围, M坐标数组
25 PolygonM(带M坐标的多边形) 必须的: (最小包围矩形)MBR,组成部分数目,点的数目,所有组成部分,所有点 可选的: M坐标范围, M坐标数组
28 MultiPointM(带M坐标的多点) 必须的: (最小包围矩形)MBR,点的数目,所有点 可选的: M坐标范围, M坐标数组
31 MultiPatch 必须的: (最小包围矩形)MBR,组成部分数目,点的数目,所有组成部分,所有点,Z坐标范围, Z坐标数组 可选的: M坐标范围, M坐标数组

在普通的使用中,Shapefile通常包含点、折线与多边形。带有Z坐标的形状是三维的。带有M坐标的形状是包含一个用户指定的测量值,该测量值定义在每一个点坐标之上。三维的Shapefile十分罕见。此外,实际应用中通常,Shapefile的M测量值这个功能已经被其他功能更加强大和稳健的数据库取代,Shapefile一般只负责几何数据。

Shapefile图形索引格式(.shx)

Shapefile的文件索引包含与.shp文件相同的100个字节的文件头,然后跟随着不定数目的8字节定长记录,每个记录都有两个字段:

字节 类型 字节序 用途
0–3 int32 大端序 记录位移(用16位整数表示)
4–7 int32 大端序 记录长度(用16位整数表示)

因为这个图形索引每个数据项都是定长的,因此程序只要在这个图形索引中向前或向后遍历,读取索引中所记录的记录位移与记录长度,程序就可以很快地向前或向后遍历整个Shapefile,在.shp文件中找到任意一个几何体的正确位置。

Shapefile属性格式(.dbf)

每个图形的属性数据存储在dBase格式的数据表之中。属性数据也可以存储在另一种开放的数据表格式xBase格式之中。在开源Shapefile函数库Shapefile C library[2]中就是这样存储。

Shapefile投帧式(.prj)

.prj文件中的信息包含了.shp文件中几何数据所使用的经纬度坐标系统。尽管这个文件不是必须的,一般使用都会提供它,这样用户就无需猜测所给的坐标的经纬度系统。ArcGIS Desktop 9及以后的版本使用well-known text格式来生成坐标系统描述信息。以前的ArcGIS版本和某些第三方软件通常生成如下的这种格式:

老的投影文件格式样例:

Projection UTM

Zunits NO

Units METERS

Spheroid CLARKE1866

Xshift 0.0000000000

Yshift -4000000.0000000000

Parameters

-108 0 0.000 /* longitude

36 0 0.000 /* latitude

新的WKT格式样例:

GEOGCS["GCS_North_American_1927",DATUM["D_North_American_1927",SPHEROID["Clarke_1866",6378206.4,294.9786982]],PRIMEM["Greenwich",0],UNIT["Degree",0.0174532925199433]]

.prj文件中包含以下信息:

经纬度坐标系统或地图投影的名称
测量基准
椭球体参数
本初子午线
所使用的单位
用于定义地图投影的参数,例如:
纬度原点
缩放比例
中央经线
北伪偏移
东伪偏移
标准纬线
Shapefile空间索引格式(.sbn)

这是一个二进制的空间索引文件,仅仅可以应用在ESRI的软件之中。其文件格式没有公开的文档,其他厂商也没有实现这个文件。.sbn并不是必须的,因为.shp文件之中已经包含了所有的解析空间数据所需的信息。

限制
Shapefile与拓扑

Shapefile无法存储拓扑信息。在ESRI的文件格式中,ArcInfo 的Coverage、以及Personal/File/Enterprise地理数据库,能够保存地理要素的拓扑信息。

空间表达

在shapefile文件之中,所有的折线与多边形都是用点来定义,点与点之间采用线性插值,也就是说点与点之间都是用线段相连。在数据采集时,点与点之间的距离决定了该文件所使用的比例。当图形放大超过一定比例的时候,图形就会呈现出锯齿。要使图形看上去更加平滑,那么就必须使用更多的点,这样就会消耗更大的存储空间。在这种情况下,样条函数可以很精确地表达不同形状的曲线而且占据相对更少的空间,但是目前shapefile并不支持样条曲线。

数据存储量

.shp文件或.dbf文件最大的体积不能够超过2 GB(或231位)。也就是说,一个shapefile最多只能够存储七千万个点坐标。[3]文件所能够存储的几何体的数目取决于单个要素所使用的顶点的数目。

属性数据库格式所使用的.dbf文件基于一个比较古老的dBase标准。这种数据库格式天生有许多限制,例如:[3]

无法存储空值。这对于数量数据来说是一个严重的问题,因为空值通常都用0来代替,这样会歪曲很多统计表达的结果。
对字段名或存储值中的Unicode支持不理想。
字段名最多只能够有10个字符。
最多只能够有255个字段。
只支持以下的数据类型:浮点类型(13字节存储空间),整数(4或9字节存储空间),日期(不能够存储时间,8字节存储空间)和文本(最大254字节存储空间)
浮点数有可能包含舍入错误,因为它们以文本的形式保存。
混合几何类型

由于在每一条几何记录中都有该记录的几何类型,所以理论上一个shapefile是可以存储混合的几何类型。但实际上规范中指出在同一shapefile之中所有非空的几何体都必须是同一类型。因此shapefile被限制为仅仅可以混合存储空几何体和另一单一几何体,该几何体的类型必须与文件头中定义的类型一致。例如,一个shapefile文件不可能同时包含折线与多边形数据,所以,在实际的地理事物描述中,井(点类型)、河(折线类型)与湖(多边形类型)必须分开存储在三个不同的文件之中。

BIM

建筑信息模型(Building Information Modeling)是建筑学、工程学及土木工程的新工具。建筑信息模型或建筑资讯模型一词由Autodesk所创的。它是来形容那些以三维图形为主、物件导向、建筑学有关的电脑辅助设计。当初这个概念是由Jerry Laiserin把Autodesk、奔特力系统软件公司、Graphisoft所提供的技术向公众推广。--------百度百科

BIM的核心是通过建立虚拟的建筑工程三维模型,利用数字化技术,为这个模型提供完整的、与实际情况一致的建筑工程信息库。该信息库不仅包含描述建筑物构件的几何信息、专业属性及状态信息,还包含了非构件对象(如空间、运动行为)的状态信息。借助这个包含建筑工程信息的三维模型,大大提高了建筑工程的信息集成化程度,从而为建筑工程项目的相关利益方提供了一个工程信息交换和共享的平台。

BIM(Building Information Modeling)技术是一种应用于工程设计、建造、管理的数据化工具,通过对建筑的数据化、信息化模型整合,在项目策划、运行和维护的全生命周期过程中进行共享和传递,使工程技术人员对各种建筑信息作出正确理解和高效应对,为设计团队以及包括建筑、运营单位在内的各方建设主体提供协同工作的基础,在提高生产效率、节约成本和缩短工期方面发挥重要作用。

GeoTiff

Tiff(Tag Image File Format)是图形图像处理中常用的格式之一。Geo TIFF是作为Tiff的一种扩展,在Tiff的基础上定义了一些Geo Tag(地理标签),从而对坐标系统进行定义,使得原本的图像数据具有了地理信息。

遥感影像文件格式,遥感影像就是地球自拍照,一般文件很大,一张文件5GB左右,这些影像文件大多数都保存为 TIFF 格式(而不是JPEG),因为TIFF格式记录的内容是比较原始的多个波段的信息,也不会因为压缩丢失信息。

TIFF是一个灵活适应性强的文件格式,能够在一个文件中保存多幅图像。然后每幅影像带一个标签目录(多个标签),记录它的像素深度、每像素波段信息,RGB编码等详细信息。

注意:这些属性之间没有顺序要求,都通过offset查找。实际上是链表的形式:

因此,TIFF文件内部各Block块之间的顺序可以很灵活自由。

COG格式(Cloud optimized GeoTIFF)

为了让云优化的GeoTIFF格式更加的普及,专门成立了COG(Cloud optimized GeoTIFF)标准。规范可以参考:www.cogeo.org/

3D Tiles规范(三维瓦片)

3D Tiles 专为流式传输和渲染大量 3D 地理空间内容而设计,例如摄影测量、3D 建筑、BIM/CAD、实例化特征和点云。它定义了一个分层数据结构和一组提供可渲染内容的图块格式。3D Tiles 没有为内容的可视化定义明确的规则;客户可以可视化 3D Tiles 数据,但它认为合适。

在 3D Tiles 中,tileset是在空间数据结构树中组织的一组图块。一个tileset由至少一个tileset JSON文件描述,该文件包含tileset元数据和一个tile对象树,每个对象都可以引用以下格式之一的可渲染内容:

类型 英文名称 文件后缀名
批量三维模型 Batch 3D Model b3dm
实例三维模型 Instance 3D Model i3dm
点云 PointCloud pnts
复合模型 Component cmpt

格式 用途
批量 3D 模型 ( b3dm) 异构 3D 模型。例如带纹理的地形和表面、3D 建筑外部和内部、大型模型。
实例化 3D 模型 ( i3dm) 3D 模型实例。例如树木、风车、螺栓。
点云 ( pnts) 海量点数。
复合 ( cmpt) 将不同格式的图块连接到一个图块中。

瓦片类型 对应实际数据
b3dm 传统三维建模数据、BIM数据、倾斜摄影数据
i3dm 一个模型多次渲染的数据,灯塔、树木、椅子等
pnts 点云数据
cmpt 前三种数据的复合(允许一个cmpt文件内嵌多个其他类型的瓦片)

建筑的话,shp -> b3dm格式 使用Cesiumlab 通用模型切片,然后设置高度字段,选择八叉树处理器(Lod策略选择尺寸过滤【适用于个数非常多的BIM模型】),记得选择保存字段,否则根据高度区分建筑颜色,字段不会被识别,选择同一个目录输出,导出的b3dm数据会被覆盖掉(批量处理的时候,时间可能会超长)

注:如果在转换时设置贴图纹理效果的话,那么转换时间会超长!!!!!

目前的想法,把获取到的带有高程的.shp建筑数据转为.b3dm数据后,分别部署后,单独引入cesium

目前的地球地图的坐标系是GCJ-02,建筑等模型数据的坐标系是WGS84,需要利用QGIS 扩展-- GeoHey工具将shp数据进行坐标转换后(注意3857和4326,需要3857-GCJ-02数据)可批量转换**(大概10分钟60个shp文件,处理过多可能卡住)**,再进行转b3dm格式

注:cesium请求已发布的3DTileset数据时,是先加载json索引文件,后加载b3dm文件,所以会有些延迟(如果Lod策略选择尺寸过滤【适用于个数非常多的BIM模型】会好得多)

www.cnblogs.com/onsummer/p/…

www.cnblogs.com/onsummer/p/…

3dTiles 是一种规范,在规范的指导下,各种资源文件可以是独立存在于硬盘中的目录、文件,也可以以二进制形式写入数据库中。目前,3dTiles 的官方实现只有 “散列文件”,也就是文件、文件夹的形式存储在硬盘中,有关如何存储到数据库中的讨论,官方仍在进行中 。

3dTiles还有一个特点:那就是不记录模型数据,只记录各级“Tile”的逻辑关系,以及“Tile”自己的属性信息。所谓的模型数据,是指三维模型的顶点、贴图材质、法线、颜色等信息。逻辑关系是指,各级Tile是如何在空间中保持连续的,LOD是如何组织的。属性信息就很简单啦,门有门的生产商,窗户有窗户的使用年限等,往大了说,建筑还有它自己的寿命、法人、施工单位等属性信息。

3dTiles的特点总结如下:

三维模型使用了 glTF 规范,继承它的渲染高性能
除了嵌入的 glTF,3dTiles 自己 只记录各级Tile的空间逻辑关系(如何构成整个3dtiles)和属性信息,以及模型与属性如何挂接在一起的信息

一份3dtiles数据集:

入口文件是tileset.json
各级瓦片用文件夹(目录)来组织

3dTiles 数据目前的具体文件实现,是一些零散的文件。

数据集的名称与所在文件夹的名称并无关系,数据集的名称写在入口文件中。

3dTiles至少有一个 tileset.json 文件,作为整个数据集的入口。它是一个 json 文件,描述了整个三维瓦片数据集,它记录的是上一节提及的“逻辑信息”,还包括一些其他的元数据。而“属性信息”、“嵌入的gltf模型” 则位于各个二进制瓦片文件中,这些二进制文件则由 tileset.json 中的瓦片中的 uri 来引用。

3dtiles十分灵活

3dTiles的文件名可以不是tileset.json
3dTiles允许套娃

原则上,只要被引用的子一级3dtiles 不循环引用父级3dtiles,那么就OK(规范如是说)。

3dTiles在空间上允许数据集使用如下几种树结构: 四叉树 、八叉树、KD树、格网结构

四叉树

四元树又称四叉树是一种树状数据结构,在每一个节点上会有四个子区块。四元树常应用于二维空间数据的分析与分类。 它将数据区分成为四个象限。数据范围可以是方形或矩形或其他任意形状。

八叉树

八叉树是一种用于描述三维空间的树状数据结构,八叉树的每个节点表示一个正方体的体积元素,每个节点有八个子节点,将八个子节点所表示的体积元素加在一起就等于父节点的体积。

KD树

Kd-树 其实是K-dimension tree的缩写,是对数据点在k维空间中划分的一种数据结构。其实,Kd-树是一种平衡二叉树。

格网结构

格网结构是以格网单元为基础的地理空间数据组织方式,通过对制图区域按一定大小划分而构成的格网炬阵。

每个格网单元是最基本的信息存贮和处理单元。格网形式有三角形、六边形、正方形、矩形等,但多采用正方形格网形式。格网结构是地理信息系统常采用的数据结构之一。对于每一格网数据矩阵来说,其行、列号隐含了地理实体的空间分布位置及其空间关系。每个格网单元记录相应空间实体的属性类型码,即属性编码。如果对同一区域内格网单元不同专题类型的空间实体作属性编码,则在地学综合分析中每个格网单元成为多维判别空间中的一点,并可根据分析数学模型对各格网单元进行判别分类与制图。以格网结构为基础的地理信息系统,优点是数据结构与数据处理方法较简单,适用于地学综合分析,但几何精度较低,且占用较多存贮空间。通常采用游程编码(runlength encoding)方法进行格网数据的压缩。

glTF格式

一个简单的三角形

{
"scenes" : [
{
"nodes" : [ 0 ]
}
],

"nodes" : [
{
"mesh" : 0
}
],

"meshes" : [
{
"primitives" : [ {
"attributes" : {
"POSITION" : 1
},
"indices" : 0
} ]
}
],

"buffers" : [
{
"uri" : "data:application/octet-stream;base64,AAABAAIAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAA=",
"byteLength" : 44
}
],
"bufferViews" : [
{
"buffer" : 0,
"byteOffset" : 0,
"byteLength" : 6,
"target" : 34963
},
{
"buffer" : 0,
"byteOffset" : 8,
"byteLength" : 36,
"target" : 34962
}
],
"accessors" : [
{
"bufferView" : 0,
"byteOffset" : 0,
"componentType" : 5123,
"count" : 3,
"type" : "SCALAR",
"max" : [ 2 ],
"min" : [ 0 ]
},
{
"bufferView" : 1,
"byteOffset" : 0,
"componentType" : 5126,
"count" : 3,
"type" : "VEC3",
"max" : [ 1.0, 1.0, 0.0 ],
"min" : [ 0.0, 0.0, 0.0 ]
}
],

"asset" : {
"version" : "2.0"
}}

元素概述

scene: glTF格式的场景结构描述条目。它通过引用node来定义场景图;

node: 场景图层次中的一个节点。它可以包含一个变换(比如旋转或平移),并且可以引用其他(子)节点 。此外,它可以引用网格和相机,以及描述网格变换的蒙皮;

camera: 定义了用于渲染场景的视锥体配置;

mesh: 描述了出现在场景中几何对象实际的几何数据。它是指accessor用于访问实际几何数据material的对象,并且是指在渲染对象时定义其外观的 ;

skin: 定义了用于蒙皮的参数,参数的值通过一个accessor对象获得。

animation: 描述了一些结点如何随时间进行变换(比如旋转或平移);

accessor: 一个访问任意数据的抽象数据源。被mesh、skin和animation元素使用来提供几何数据、蒙皮参数和基于时间的动画值。它通过引用一个bufferView对象,来引用实际的二进制数据;

material: 包含了定义3D对象外观的参数。它通常引用了用于3D对象渲染的texture对象;

texture: 定义了一个sampler对象和一个image对象。sampler对象定义了image对象在3D对象上的张贴方式。

更多详情,可查阅glTF 2.0规范(github.com/KhronosGrou…

glTF和3DTiles的选用

参考博客

glTF小模型只是Primitive 或Entity的其中一种数据类型;

Cesium支持包含关键帧(key-frame)动画,骨骼(skinning)动画的glTF格式的三维模型,且支持模型节点(node)的拾取。glTf是Khronns Group定义的一个基于web的新兴三维模型格式行业标准;

3D Tiles是一个开发的规范,用于传输海量的异构三维地理空间数据集,使用概念类似terrain和imagery的瓦片流技术,3D Tiles使得建筑物数据集、BIM模型、点云和摄影测量模型等大模型比较流畅的在web端进行浏览展示。

glTF表示了渲染一个模型的几何数据、纹理数据、材质数据、元数据等。glTF一般用于表示一个具体模型,比如汽车、树木等,不会用于表示一个数字城市,数字城市一般用3DTiles来表示。

/bin/bash^M: 坏的解释器: 没有那个文件或目录 的解决方法

原因:
由于windows系统下换行符为 \r\n,linux下换行符为 \n,所以导致在windows下编写的文件会比linux下多回车符号 \r。

解决方法:
只需要去掉多余的 \r 回车符 即可。操作办法可以用sed命令进行全局替换
sed 's/\r//' -i gen_cert.sh
TopoJSON

TopoJSON是对拓扑进行编码的 GeoJSON 的扩展。TopoJSON文件中的几何不是离散地表示几何.

TopoJSON是 GeoJSON 按拓扑学编码后的扩展形式,是由 D3 的作者 Mike Bostock 制定的。相比 GeoJSON 直接使用Polygon、Point之类的几何体来表示图形的方法,TopoJSON中的每一个几何体都是通过将共享边(被称为arcs)整合后组成的。对比简易图如下:

TopoJSON使用坐标(点)、弧(线、多边形)来表示地理图形,它由transform、objects和arcs三部分组成。transform描述了变换参数;objects描述地理实体包含空间及属性信息;arcs描述了有向弧的空间关系,弧由一系列起点及相对于起点的有向偏移坐标表示。基于这种弧的存储方式可以表达出拓扑关系,由于弧只记录一次及地理坐标使用整数,不使用浮点数,相对于GeoJSON,TopoJSON 消除了冗余,文件大小缩小了 80%。

在线工具推荐​:
JSON在线解析及格式化:​ ​www.json.cn/​​
在线生成 GeoJSON:​ ​geojson.io/​​
shp数据转 GeoJSON 和 TopoJSON:​ ​mapshaper.org/​​
GeoJson和TopopJson在线转换:​ ​jeffpaine.github.io/geojson-top…

NetCDF

网络公用数据格式,是一种用来存储温度,湿度,气压,风速和风向等多位科学数据(变量)的文件格式。在 ArcGIS 中通过根据 NetCDF 文件创建图层或表视图,可以用一个维度(例如时间)来显示上述所有变量。

NetCDF 文件中的数据以数组形式存储,例如,某个位置处随时间变化的温度以一维数组的形式存储。某个区域内在指定时间的温度以二维数组的形式存储。

文件后缀是.nc 可以使用 ArcGIS 加载

多维工具-创建 NetCDF 栅格图层:加载.nc 数据

前端 netcdfjs github.com/cheminfo/ne…

后端 geotools gt-netcdf www.unidata.ucar.edu/software/ne…

气象数据 Panoply QGIS ArcGIS matlab 可打开

可用 java python 等处理

Cesium 加载 nc 例子github.com/AlbertEjies…

OSGB - 倾斜摄影

倾斜摄影三维模型数据获取快,效果好(看起来),在智慧城市、全景三维中国、CIM等等平台建设中的重要性不言而喻。另一方面,相应的问题也不少。如:数据量大(占空间)、大区域显示效果不好(卡)、只有一张皮(也就是当前提的比较多的没有语义)等等,这些都是倾斜三维模型的诟病。

一、OSGB格式

OSGB的全称Open Scene Gragh Binary,它是OSG引擎的自有格式(开源三维引擎OSG、osgEarth,国内很多三维桌面平台都是基于它改的),它是一种二进制格式,它可以转换为文本格式,即OSG格式(osgconv工具)。OSGB的内部结构主要由两部分组成,即结构数据和纹理数据,结构数据主要由Group、PagedLOD、Geode、Geometry四个关键节点组成(依次包含),其中Geometry节点包括具体的顶点数据结构。(详情可以参考blog.csdn.net/kasteluo/ar…

二、当前osgb简化/压缩的主要方式

倾斜三维模型基于对地物多角度的拍照及实时测量进行三维建模,区别于一般的人工模型,其三维结构复杂(各类细部都进行了体现),数据量大(越精细、分辨率越高,占的空间越大)。在数据范围大时,往往在三维展示中会出现加载速度慢、卡顿的情况,这个时候就需要考虑对数据进行简化或压缩。
当前对osgb进行简化/压缩主要有两种方式,一种是直接对osgb格式进行操作,输出还是osgb格式,另一种是面向具体应用,在转换为其他格式时对三维模型进行操作,输出的是其他格式。

1.第一种 输出osgb格式

主要流程流程如下
(1)读取osgb文件
读取osgb文件也有两种方式。一种利用osg库(c++)进行读取,接口现成,读取过程相对简单,但是仅限于c++语言(参考blog.csdn.net/u010608964/…
(2)根据相关算法对结构进行重构,对纹理进行压缩
按照某种算法对解析后的osgb文件的顶点结构、纹理结构、顶点简化(合并顶点、删除面等),根据需要对纹理数据进行压缩(这里可以对纹理进行一些操作,如引入图像识别算法、机器学习算法)。
(3)重组文件
对重构的三维结构、纹理进行文件重组,保持文件层级、块的结构不变(应该也可以采取变的方式,没有实践过),形成新的osgb文件。

2.第二种 输出其他格式

这种方式也是在读取osgb文件的基础上,基于其他文件格式的要求,在转换过程中对纹理和结构进行压缩和简化。cesiumlab以及一些其他的3Dtile生产功能或多或少带有相关功能,简化和压缩效率一般(因为这个功能不是其主要功能点,在输出效率和质量上一般)。

当前一些主流的商用软件都宣传自己支持对倾斜摄影三维模型轻量化、简化、压缩,往往在模型大小、压缩质量上宣传过度,面对这些宣传的时候,大家需要明白一点:简化和压缩肯定会损失质量,简化和压缩比越大质量损失越大。具体应用的时候还得看实际需求,例如,如果你用的是超图的引擎支撑倾斜,就可以考虑他自己的简化工具(商用软件一般压缩后变成了自己的格式),如果你要使用3Dtile进行展示,那你可以选择在输出的时候进行简化和压缩。

地形数据的获取

航天飞机雷达地形测量任务(Shuttle Radar Topography Mission, SRTM)

SRTM 数据 —— 高程栅格,文件后缀为.hgt

使用ArcGIS对SRTM数据进行转换:

.hgt -> .tif b3dm格式 使用Cesiumlab 通用模型切片,然后设置高度字段,选择八叉树处理器(Lod策略选择尺寸过滤【适用于个数非常多的BIM模型】),记得选择保存字段,否则根据高度区分建筑颜色,字段不会被识别,选择同一个目录输出,导出的b3dm数据会被覆盖掉(批量处理的时候,时间可能会超长)

注:如果在转换时设置贴图纹理效果的话,那么转换时间会超长!!!!!

目前的想法,把获取到的带有高程的.shp建筑数据转为.b3dm数据后,分别部署后,单独引入cesium

目前的地球地图的坐标系是GCJ-02,建筑等模型数据的坐标系是WGS84,需要利用QGIS 扩展-- GeoHey工具将shp数据进行坐标转换后(注意3857和4326,需要3857-GCJ-02数据)可批量转换**(大概10分钟60个shp文件,处理过多可能卡住)**,再进行转b3dm格式

注:cesium请求已发布的3DTileset数据时,是先加载json索引文件,后加载b3dm文件,所以会有些延迟(如果Lod策略选择尺寸过滤【适用于个数非常多的BIM模型】会好得多)

www.cnblogs.com/onsummer/p/…

www.cnblogs.com/onsummer/p/…

3dTiles 是一种规范,在规范的指导下,各种资源文件可以是独立存在于硬盘中的目录、文件,也可以以二进制形式写入数据库中。目前,3dTiles 的官方实现只有 “散列文件”,也就是文件、文件夹的形式存储在硬盘中,有关如何存储到数据库中的讨论,官方仍在进行中 。

3dTiles还有一个特点:那就是不记录模型数据,只记录各级“Tile”的逻辑关系,以及“Tile”自己的属性信息。所谓的模型数据,是指三维模型的顶点、贴图材质、法线、颜色等信息。逻辑关系是指,各级Tile是如何在空间中保持连续的,LOD是如何组织的。属性信息就很简单啦,门有门的生产商,窗户有窗户的使用年限等,往大了说,建筑还有它自己的寿命、法人、施工单位等属性信息。

3dTiles的特点总结如下:

三维模型使用了 glTF 规范,继承它的渲染高性能
除了嵌入的 glTF,3dTiles 自己 只记录各级Tile的空间逻辑关系(如何构成整个3dtiles)和属性信息,以及模型与属性如何挂接在一起的信息

一份3dtiles数据集:

入口文件是tileset.json
各级瓦片用文件夹(目录)来组织

3dTiles 数据目前的具体文件实现,是一些零散的文件。

数据集的名称与所在文件夹的名称并无关系,数据集的名称写在入口文件中。

3dTiles至少有一个 tileset.json 文件,作为整个数据集的入口。它是一个 json 文件,描述了整个三维瓦片数据集,它记录的是上一节提及的“逻辑信息”,还包括一些其他的元数据。而“属性信息”、“嵌入的gltf模型” 则位于各个二进制瓦片文件中,这些二进制文件则由 tileset.json 中的瓦片中的 uri 来引用。

3dtiles十分灵活

3dTiles的文件名可以不是tileset.json
3dTiles允许套娃

原则上,只要被引用的子一级3dtiles 不循环引用父级3dtiles,那么就OK(规范如是说)。

3dTiles在空间上允许数据集使用如下几种树结构: 四叉树 、八叉树、KD树、格网结构

四叉树

四元树又称四叉树是一种树状数据结构,在每一个节点上会有四个子区块。四元树常应用于二维空间数据的分析与分类。 它将数据区分成为四个象限。数据范围可以是方形或矩形或其他任意形状。

八叉树

八叉树是一种用于描述三维空间的树状数据结构,八叉树的每个节点表示一个正方体的体积元素,每个节点有八个子节点,将八个子节点所表示的体积元素加在一起就等于父节点的体积。

KD树

Kd-树 其实是K-dimension tree的缩写,是对数据点在k维空间中划分的一种数据结构。其实,Kd-树是一种平衡二叉树。

格网结构

格网结构是以格网单元为基础的地理空间数据组织方式,通过对制图区域按一定大小划分而构成的格网炬阵。

每个格网单元是最基本的信息存贮和处理单元。格网形式有三角形、六边形、正方形、矩形等,但多采用正方形格网形式。格网结构是地理信息系统常采用的数据结构之一。对于每一格网数据矩阵来说,其行、列号隐含了地理实体的空间分布位置及其空间关系。每个格网单元记录相应空间实体的属性类型码,即属性编码。如果对同一区域内格网单元不同专题类型的空间实体作属性编码,则在地学综合分析中每个格网单元成为多维判别空间中的一点,并可根据分析数学模型对各格网单元进行判别分类与制图。以格网结构为基础的地理信息系统,优点是数据结构与数据处理方法较简单,适用于地学综合分析,但几何精度较低,且占用较多存贮空间。通常采用游程编码(runlength encoding)方法进行格网数据的压缩。

glTF格式

一个简单的三角形

{
"scenes" : [
{
"nodes" : [ 0 ]
}
],

"nodes" : [
{
"mesh" : 0
}
],

"meshes" : [
{
"primitives" : [ {
"attributes" : {
"POSITION" : 1
},
"indices" : 0
} ]
}
],

"buffers" : [
{
"uri" : "data:application/octet-stream;base64,AAABAAIAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAA=",
"byteLength" : 44
}
],
"bufferViews" : [
{
"buffer" : 0,
"byteOffset" : 0,
"byteLength" : 6,
"target" : 34963
},
{
"buffer" : 0,
"byteOffset" : 8,
"byteLength" : 36,
"target" : 34962
}
],
"accessors" : [
{
"bufferView" : 0,
"byteOffset" : 0,
"componentType" : 5123,
"count" : 3,
"type" : "SCALAR",
"max" : [ 2 ],
"min" : [ 0 ]
},
{
"bufferView" : 1,
"byteOffset" : 0,
"componentType" : 5126,
"count" : 3,
"type" : "VEC3",
"max" : [ 1.0, 1.0, 0.0 ],
"min" : [ 0.0, 0.0, 0.0 ]
}
],

"asset" : {
"version" : "2.0"
}}

元素概述

scene: glTF格式的场景结构描述条目。它通过引用node来定义场景图;

node: 场景图层次中的一个节点。它可以包含一个变换(比如旋转或平移),并且可以引用其他(子)节点 。此外,它可以引用网格和相机,以及描述网格变换的蒙皮;

camera: 定义了用于渲染场景的视锥体配置;

mesh: 描述了出现在场景中几何对象实际的几何数据。它是指accessor用于访问实际几何数据material的对象,并且是指在渲染对象时定义其外观的 ;

skin: 定义了用于蒙皮的参数,参数的值通过一个accessor对象获得。

animation: 描述了一些结点如何随时间进行变换(比如旋转或平移);

accessor: 一个访问任意数据的抽象数据源。被mesh、skin和animation元素使用来提供几何数据、蒙皮参数和基于时间的动画值。它通过引用一个bufferView对象,来引用实际的二进制数据;

material: 包含了定义3D对象外观的参数。它通常引用了用于3D对象渲染的texture对象;

texture: 定义了一个sampler对象和一个image对象。sampler对象定义了image对象在3D对象上的张贴方式。

更多详情,可查阅glTF 2.0规范(github.com/KhronosGrou…

glTF和3DTiles的选用

参考博客

glTF小模型只是Primitive 或Entity的其中一种数据类型;

Cesium支持包含关键帧(key-frame)动画,骨骼(skinning)动画的glTF格式的三维模型,且支持模型节点(node)的拾取。glTf是Khronns Group定义的一个基于web的新兴三维模型格式行业标准;

3D Tiles是一个开发的规范,用于传输海量的异构三维地理空间数据集,使用概念类似terrain和imagery的瓦片流技术,3D Tiles使得建筑物数据集、BIM模型、点云和摄影测量模型等大模型比较流畅的在web端进行浏览展示。

glTF表示了渲染一个模型的几何数据、纹理数据、材质数据、元数据等。glTF一般用于表示一个具体模型,比如汽车、树木等,不会用于表示一个数字城市,数字城市一般用3DTiles来表示。

/bin/bash^M: 坏的解释器: 没有那个文件或目录 的解决方法

原因:
由于windows系统下换行符为 \r\n,linux下换行符为 \n,所以导致在windows下编写的文件会比linux下多回车符号 \r。

解决方法:
只需要去掉多余的 \r 回车符 即可。操作办法可以用sed命令进行全局替换
sed 's/\r//' -i gen_cert.sh
TopoJSON

TopoJSON是对拓扑进行编码的 GeoJSON 的扩展。TopoJSON文件中的几何不是离散地表示几何.

TopoJSON是 GeoJSON 按拓扑学编码后的扩展形式,是由 D3 的作者 Mike Bostock 制定的。相比 GeoJSON 直接使用Polygon、Point之类的几何体来表示图形的方法,TopoJSON中的每一个几何体都是通过将共享边(被称为arcs)整合后组成的。对比简易图如下:

TopoJSON使用坐标(点)、弧(线、多边形)来表示地理图形,它由transform、objects和arcs三部分组成。transform描述了变换参数;objects描述地理实体包含空间及属性信息;arcs描述了有向弧的空间关系,弧由一系列起点及相对于起点的有向偏移坐标表示。基于这种弧的存储方式可以表达出拓扑关系,由于弧只记录一次及地理坐标使用整数,不使用浮点数,相对于GeoJSON,TopoJSON 消除了冗余,文件大小缩小了 80%。

在线工具推荐​:
JSON在线解析及格式化:​ ​www.json.cn/​​
在线生成 GeoJSON:​ ​geojson.io/​​
shp数据转 GeoJSON 和 TopoJSON:​ ​mapshaper.org/​​
GeoJson和TopopJson在线转换:​ ​jeffpaine.github.io/geojson-top…

NetCDF

网络公用数据格式,是一种用来存储温度,湿度,气压,风速和风向等多位科学数据(变量)的文件格式。在 ArcGIS 中通过根据 NetCDF 文件创建图层或表视图,可以用一个维度(例如时间)来显示上述所有变量。

NetCDF 文件中的数据以数组形式存储,例如,某个位置处随时间变化的温度以一维数组的形式存储。某个区域内在指定时间的温度以二维数组的形式存储。

文件后缀是.nc 可以使用 ArcGIS 加载

多维工具-创建 NetCDF 栅格图层:加载.nc 数据

前端 netcdfjs github.com/cheminfo/ne…

后端 geotools gt-netcdf www.unidata.ucar.edu/software/ne…

气象数据 Panoply QGIS ArcGIS matlab 可打开

可用 java python 等处理

Cesium 加载 nc 例子github.com/AlbertEjies…

OSGB - 倾斜摄影

倾斜摄影三维模型数据获取快,效果好(看起来),在智慧城市、全景三维中国、CIM等等平台建设中的重要性不言而喻。另一方面,相应的问题也不少。如:数据量大(占空间)、大区域显示效果不好(卡)、只有一张皮(也就是当前提的比较多的没有语义)等等,这些都是倾斜三维模型的诟病。

一、OSGB格式

OSGB的全称Open Scene Gragh Binary,它是OSG引擎的自有格式(开源三维引擎OSG、osgEarth,国内很多三维桌面平台都是基于它改的),它是一种二进制格式,它可以转换为文本格式,即OSG格式(osgconv工具)。OSGB的内部结构主要由两部分组成,即结构数据和纹理数据,结构数据主要由Group、PagedLOD、Geode、Geometry四个关键节点组成(依次包含),其中Geometry节点包括具体的顶点数据结构。(详情可以参考blog.csdn.net/kasteluo/ar…

二、当前osgb简化/压缩的主要方式

倾斜三维模型基于对地物多角度的拍照及实时测量进行三维建模,区别于一般的人工模型,其三维结构复杂(各类细部都进行了体现),数据量大(越精细、分辨率越高,占的空间越大)。在数据范围大时,往往在三维展示中会出现加载速度慢、卡顿的情况,这个时候就需要考虑对数据进行简化或压缩。
当前对osgb进行简化/压缩主要有两种方式,一种是直接对osgb格式进行操作,输出还是osgb格式,另一种是面向具体应用,在转换为其他格式时对三维模型进行操作,输出的是其他格式。

1.第一种 输出osgb格式

主要流程流程如下
(1)读取osgb文件
读取osgb文件也有两种方式。一种利用osg库(c++)进行读取,接口现成,读取过程相对简单,但是仅限于c++语言(参考blog.csdn.net/u010608964/…
(2)根据相关算法对结构进行重构,对纹理进行压缩
按照某种算法对解析后的osgb文件的顶点结构、纹理结构、顶点简化(合并顶点、删除面等),根据需要对纹理数据进行压缩(这里可以对纹理进行一些操作,如引入图像识别算法、机器学习算法)。
(3)重组文件
对重构的三维结构、纹理进行文件重组,保持文件层级、块的结构不变(应该也可以采取变的方式,没有实践过),形成新的osgb文件。

2.第二种 输出其他格式

这种方式也是在读取osgb文件的基础上,基于其他文件格式的要求,在转换过程中对纹理和结构进行压缩和简化。cesiumlab以及一些其他的3Dtile生产功能或多或少带有相关功能,简化和压缩效率一般(因为这个功能不是其主要功能点,在输出效率和质量上一般)。

当前一些主流的商用软件都宣传自己支持对倾斜摄影三维模型轻量化、简化、压缩,往往在模型大小、压缩质量上宣传过度,面对这些宣传的时候,大家需要明白一点:简化和压缩肯定会损失质量,简化和压缩比越大质量损失越大。具体应用的时候还得看实际需求,例如,如果你用的是超图的引擎支撑倾斜,就可以考虑他自己的简化工具(商用软件一般压缩后变成了自己的格式),如果你要使用3Dtile进行展示,那你可以选择在输出的时候进行简化和压缩。

地形数据的获取

航天飞机雷达地形测量任务(Shuttle Radar Topography Mission, SRTM)

SRTM 数据 —— 高程栅格,文件后缀为.hgt

使用ArcGIS对SRTM数据进行转换:

.hgt -> .tif

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论