Selafin files

司机简称

Selafin

Driver built-in by default

This driver is built-in by default

OGR支持读取2D Selafin/Seraphin文件。Selafin/Seraphin是开放源码中地理文件的通用输出和输入格式 Telemac hydraulic model . 该文件格式适合于描述一组不同时间点特征的数值属性。这些特征通常对应于有限元模型中的节点。该文件还包含一个连接表,该表描述由这些节点组成的元素,并且驱动程序也可以读取这些元素。

驱动程序支持将VSI虚拟文件用作Selafin数据源。

驱动程序对Selafin文件提供完全的读写支持。但是,由于Selafin文件的特殊性质,其中元素(多边形)特征和节点(点)特征密切相关,因此在Selafin层上编写可能会导致不直观的结果。一般来说,在Selafin数据源的任何一层上进行写操作都会对其他所有层产生副作用。而且,这是非常重要的 不能在更新模式下多次打开同一数据源 . 在单个数据源上同时写入两个进程可能会导致不可逆的数据损坏。每次以更新模式打开数据源时,驱动程序都会发出警告。

驱动程序功能

Supports Create()

This driver supports the GDALDriver::Create() operation

Supports Georeferencing

This driver supports georeferencing

Supports VirtualIO

This driver supports virtual I/O operations (/vsimem/, etc.)

魔法字节

Selafin文件没有通用扩展名。通过查看文件开头的十几个魔法字节来测试适当的格式:

  • 文件的前四个字节应包含值(十六进制):00 00 00 50。这实际上表示文件中长度为80的字符串的开头。

  • 在文件的84位,接下来的8个字节应该读取(十六进制):00 00 00 50 00 00 04。

符合这两个条件的文件被认为是Selafin文件,驱动程序将报告它已成功打开它们。

格式

Selafin格式被设计成以可移植和紧凑的方式保存数据结构,并允许对数据进行有效的随机访问。为此,Selafin文件是具有通用结构的二进制文件。

元素

Selafin files 是由并置的元素。元素具有以下类型之一:

  • 整数,

  • 字符串,

  • 浮点值,

  • 整数数组,

  • 浮点值数组。

元素

内部代表

评论

整数

a、b、c、d

整数以big endian格式存储在4个字节上(最重要的字节优先)。整数的值是224 .a+2:su p:16 .b+28 . c+d。

浮点

a、b、c、d

浮点值以IEEE 754格式存储在4个字节上,并遵循big-endian约定(最重要的字节优先)。读取第一个浮点值时,只在运行时检测一次Endianness。

长度12。。。长度

字符串存储在三个部分中:

  • 一个整数,包含字符串的长度(以字符为单位),超过4个字节;

  • 字符串的字符序列,每个字符在一个字节上;

  • 字符串长度重复的同一整数

整数数组

长度12。。。长度

整数数组存储在三个部分中:

  • 一个整数,包含数组的长度(字节,因此是元素数的4倍),超过4字节;

  • 数组中的整数序列,如前所述,每个整数在4字节上;

  • 数组长度重复的同一整数

浮点值数组

长度12。。。长度

浮点值数组存储在三个部分中:

  • 一个整数,包含数组的长度(字节,因此是元素数的4倍),超过4字节;

  • 数组中浮点值的序列,如前所述,每个值在4字节上;

  • 数组长度重复的同一整数

全结构

Selafin文件的头按正确的顺序保存以下元素:

  • 一串 书名80字,后8字为“塞拉芬”或“塞拉芬”或“塞拉芬”;

  • 一个 整数数组 总共2个元素,第一个是变量(属性)的数量 nVar ,忽略第二个;

  • nVar字符串 变量名,每个变量的长度为32;

  • 一个 整数数组 总共10个元素:

    • 第三个元素是模型原点的x坐标;

    • 第四个元素是模型原点的y坐标;

    • 第十元素 isDate公司 指示是否必须读取模型的日期(请参阅后面的内容);

    • 另外,第二个元件目前未被液压软件使用,它被驱动程序用来存储数据源的空间参考系统,以具有投影EPSG数的单个整数的形式;

  • 如果 isDate公司 =1,安 整数数组 共6个元素,其中包括模型的开始日期(年、月、日、时、分、秒);

  • 一个 整数数组 共4个元素:

    • 第一个元素是元素的数量 内蒙

    • 第二个元素是点数 非点

    • 第三个元素是每个元素的点数nPointsPerElement公司

    • 第四个元素必须是1;

  • 一个 整数数组 确切地说 内蒙 nPointsPerElement公司 元素,每个连续的 nPointsPerElement*是构成元素的点数(数字以1开头)的列表;

  • 一个 整数数组 确切地说 非点 驱动程序忽略的元素(对于内部点,元素应为0,对于应用限制条件的边界点,元素应为另一个值);

  • 一个 浮点值数组 确切地说 非点 具有点的x坐标的元素;

  • 一个 浮点值数组 确切地说 非点 具有点的y坐标的元素;

文件的其余部分实际上保存了每个连续时间步的数据。时间步包含以下元素:

  • 浮点值数组 精确到1个元素,是相对于模拟开始日期的时间步的日期(通常以秒为单位);

  • 浮点数nVar数组 ,每个都有 非点 元素,其中包含当前时间点上每个点的每个属性的值。

文件和层之间的映射

Selafin数据源中的层

Selafin驱动程序只接受Selafin文件作为数据源。

每个Selafin文件可以包含一个或多个时间步。驱动程序读取所有时间步,并为每个时间步生成两层:

  • 一层,包含节点(点)及其属性:其名称是数据源的基本名称,后跟“_p”(点);

  • 一个层,其中元素(多边形)及其属性计算为其顶点属性值的平均值:其名称是数据源的基名称,后跟“_e”(用于元素)。

最后,将时间步骤的编号或时间步骤的计算日期(基于开始日期和经过的秒数)添加到名称中。因此,名为Results的文件中的数据源可以读作几个层:

  • Results_p2014_05_01_20_00_00 ,表示层保存节点的属性,结果保存时间为2014年5月1日晚上8:00;

  • Results_e2014_05_01_20_00_00 ,表示层保存元素的属性,结果保存时间为2014年5月1日晚上8:00;

  • Results_p2014_05_01_20_15_00 ,这意味着层保存元素的属性,结果保存时间为2014年5月1日晚上8:15;

层上的约束

因为 format of the Selafin file ,单个Selafin数据源中的层彼此不独立。改变一个图层肯定会对所有其他图层产生副作用。驱动程序将更新所有图层以匹配约束:

  • 所有点图层具有相同数量的要素。在一个图层中添加或删除要素时,也会在所有其他图层中添加或删除该要素。

  • 不同点图层中的要素共享相同的几何图形。当一个点的位置改变时,它也会在所有其他层中改变。

  • 所有元素层具有相同数量的特征。在一个图层中添加或删除要素时,也会在所有其他图层中添加或删除该要素。

  • 元素层中的所有多边形具有相同数量的顶点。当第一个特征被添加到元素层时,顶点的数量是固定的,并且如果不从头开始重新创建数据源,就不能在之后进行更改。

  • 不同元素图层中的要素共享相同的几何图形。在一个图层中添加或删除元素时,也会在所有其他图层中添加或删除该元素。

  • 元素层中每个特征的每个顶点在点层中都有对应的点特征。添加元素要素时,如果其顶点尚不存在,则它们将在点图层中创建。

  • 点和元素层只支持“REAL”类型的属性。不能更改实数的格式(宽度和精度)。

层过滤规范

由于一个Selafin文件可能包含数百万个层,而且用户通常只对其中的几个层感兴趣,因此驱动程序支持语法糖来在读取层之前过滤它们。

当指定数据源时,它后面可能紧跟着 层过滤规范。 ,如 Results[0:10] . 层过滤规范的作用是指示应从所有Selafin文件加载的时间步长。

图层过滤规范是一个逗号分隔的范围规范序列,由方括号分隔,前面可以是字符“e”或“p”。字符“e”和“p”的作用是分别选择元素或节点。如果未添加任何字符,则会同时选择节点和元素。每个范围规格为:

  • 一个数字,表示一个时间步(其数字以0开头),

  • 或一组由冒号分隔的两个数字:在这种情况下,将选择这两个数字之间的所有时间步(包括这两个数字);如果缺少第一个数字,则范围从文件的开头开始(第一个时间步);如果缺少第二个数字,则范围将转到文件的结尾(最后一个时间步);

数字也可以是负数。在本例中,它们从文件末尾开始计数,-1是最后一个时间步骤。

层过滤规范的一些示例:

[0]

只返回第一次步骤,但同时返回点和元素

[e:9]

仅前10个时间步,且仅包含元素的层

[p-4:]

仅最后4个时间步,且仅具有节点的层

[3,10,-2:-1]

4th ,11年th ,以及最后两个时间步骤,对于节点和元素

数据源创建选项

在ogr2ogr中,可以使用“-dsco”标志指定数据源创建选项。

TITLE

数据源的标题,存储在Selafin文件中。标题不能超过72个字符。如果它较长,将被截断以适合文件。

DATE

模拟的开始日期。Selafin文件中的每一层都有一个日期,从参考日期算起,以秒为单位。此选项允许提供参考日期。此字段的格式必须为YYYY-MM-DD_hh:MM:ss。格式中没有提到时区。

数据源创建选项的示例如下: -dsco TITLE="My simulation" -dsco DATE=2014-05-01_10:00:00 .

图层创建选项

在ogr2ogr中,可以使用“-lco”标志指定层创建选项。

DATE

相对于模拟开始日期的时间步长日期(请参见 Datasource creation options ). 这是一个单浮点值,给出自开始日期起的秒数。

数据源创建选项的示例如下: -lco DATE=24000 .

关于创建和更新Selafin数据源的说明

驱动程序支持创建和写入Selafin数据源,但这样做时需要注意一些问题。

创建新数据源时,它不包含任何层、功能或属性。

创建新层时,它将自动继承与数据源中已存在的相同类型(点或元素)的其他层相同数量的功能和属性。这些特征继承的几何图形与其在其他图层中对应的几何图形相同。属性设置为0。如果数据源中还没有图层,则创建的新图层没有特征和属性。无论如何,创建新图层时,实际上会添加两个图层:一个用于点,一个用于元素。

新的特征和属性可以添加到图层或删除。行为取决于图层的类型(点或元素)。下表说明了驾驶员在不同情况下的行为。

操作

点图层

元素层

更改特征的几何图形

点的坐标在当前层和数据源中的所有其他层中都会更改。

元素的所有顶点的坐标在当前层和数据源中的所有其他层中都会更改。无法更改顶点数。顶点的顺序很重要。

更改特征的属性

该点的属性仅在当前图层中更改。

没有效果。

添加新功能

将在要素列表的末尾为该图层和所有其他图层添加一个新点。其属性设置为新功能的值。

仅当新特征的顶点数与层中其他特征的顶点数相同时,才允许该操作。将检查顶点以查看它们当前是否存在于点集中。如果顶点的距离小于某个最大距离(约等于1/1000),则认为该顶点等于该点th 点图层中两点之间的平均距离。当找到对应的点时,它将用作元素的顶点。如果找不到点,将在所有关联图层中创建新图层。

删除要素

该点将从当前层和数据源中的所有点层中删除。使用此点作为顶点的所有元素也将从数据源中的所有元素层中移除。

元素将从当前层和数据源中的所有元素层中移除。

通常,这种操作的实现正是您所期望的。例如,可以使用ogr2ogr重新投影文件,而不更改点和元素之间的内部链接。

需要注意的是,Selafin数据源上的更新操作非常慢。这是因为格式不允许快速插入或删除功能,并且必须为每个操作重新创建文件。

VSI虚拟文件系统API支持

驱动程序支持读取和写入由VSI虚拟文件系统API管理的文件,这些文件包括“常规”文件以及/vsizip/(读写)、/vsigzip/(只读)、/vsicurl/(只读)域中的文件。

其他注记

Selafin标准中没有SRS规范。SRS的实现是对驱动程序的补充,并将SRS存储在文件中未使用的数据字段中。将来使用Selafin标准的软件可能会使用此字段并破坏SRS规范。在这种情况下,Selafin文件仍然可以被驱动程序读取,但是它们的写入将覆盖一个可能有其他用途的值。