地理数据文件(GDF)读写器
许可选项对于这种格式,从FME专业版开始。
地理数据文件(GDF)阅读器/Writer允许FME读写由欧洲标准化委员会建立的中欧标准化(CEN)标准格式的文件。本章假定您熟悉这种格式。
有关更多背景信息,请参阅
http://www.ertico.com/en/about_ertico/links/gdf_-_geographic_data_files.htm
概述
地理数据文件(GDF) CEN标准通常称为GDF 3.0。国际标准组织(ISO)标准通常被称为GDF 4.0。一些GDF数据生产者,比如NAVTEQ和TeleAtlas,并不严格遵循GDF 3.0或4.0标准,而是遵循他们自己对这些标准稍加修改的版本。
GDF 3.0 (ASCII Sequential)目前由FME支持(包括NAVTEQ、TeleAtlas和ETAK等变体)。
最初的GDF规范(GDF 3.0)是在欧洲开发的,以满足参与创建、更新、供应和应用参考和结构化道路网络数据的专业人士和组织的需求。
它不仅仅是一个通用的GIS标准,因为GDF给出了关于如何捕获数据以及如何定义特征、属性和关系的规则。
GDF是在一个名为EDRM(欧洲数字路线图)的欧洲项目中开发的。它的主要用途是汽车导航系统(如博世、飞利浦、沃尔沃);然而,由于该标准是基于通用的、非特定于应用程序的数据模型,因此它也用于许多其他运输和交通应用程序,包括车队管理、调度管理、交通分析、交通管理和自动车辆定位。
GDF文件格式通常被称为数据库,并且从来没有打算让应用程序直接使用。事实上,当从GDF文件中提取数据时,GDF文件本身的结构造成了显著的效率低下。GDF用户通常会将数据转换为其他一些数据库或格式,以便他们的应用程序直接工作。
当使用FME编写GDF时,构建一个包含简单的意大利式线路图或路线图的文件是很简单的。为智能交通系统(ITS)构建精确的路线图可能需要专业人员对地图文件进行定制。例如,交通流方向和转弯限制等基本信息无法从输入的道路数据中推断出来,因为这些信息没有明确存储。
在GDF文件结构中,特性(或元素)被组织成三层。每一层的特征实际上不包含任何几何图形,但简单地链接到下面的层的特征,从你应该采取的几何图形。
注意:这个词特性在GDF文档中用于引用位于级别1和级别2上的元素。本章使用了这个术语特性以标准FME术语所理解的方式。)
- 0级(拓扑):这个级别包含基本的GIS拓扑组件。没有特征以任何方式重叠,相邻关系是已知的。所有东西都用节点、边和面来描述。
- 1级(特征):级别1是GDF中使用最多的级别。它包含简单的特征,如道路元素、河流、边界和路标。特性可以具有特定于特性的属性(例如,单向、道路的宽度、车道的数量)。特征也可以有关系,这对汽车导航系统是非常重要的。例如,关系可以包括“禁止从道路元素1转向道路元素2”或“道路元素1优先于道路元素2”。
- 二级(复杂功能):在这个级别上,级别1的“简单特性”被聚合为更高级别的特性。例如,在第1级,一个十字路口的所有道路元素都被表示。在第2级,交集只能用一个点表示。下图说明了这一点。
迂回表示:级别1和2
当对道路网络的简化描述足够时,第2级是最有趣的。例如,城市间路线的计算不需要很高的细节。然而,通过GPS接收器定位车辆确实需要对道路网络进行更详细的描述。
GDF读写器和写入器对存储在数据文件中的不同特性类型使用符号名。每个特性都有一个gdf_type属性。
![关闭](http://www.baooytra.com/docs/fme/2017.1/html/FME_Desktop_Documentation/FME_ReadersWriters/Skins/Default/Stylesheets/Images/transparent.gif)
gdf_type | 描述 |
---|---|
gdf_level_0_point |
这些是0级的点特征。 |
gdf_level_0_line |
这些是在关卡0中发现的线性特征。 |
gdf_level_0_polygon |
这些是在关卡0中发现的多边形特征。 |
gdf_level_1_point |
这些是在关卡1中发现的点特征。 |
gdf_level_1_line |
这些是在关卡1中发现的线性特征。 |
gdf_level_1_polygon |
这些是在关卡1中发现的多边形特征。 |
gdf_level_2_point |
这些是在关卡2中发现的(复杂)点特征。 |
gdf_level_2_line |
这些是在关卡2中发现的(复杂)线性特征。 |
gdf_level_2_polygon |
这些是在关卡2中发现的(复杂)多边形特征。 |
gdf_nullrec |
有关NULLREC记录的详细说明,请参阅官方GDF规范。 |
gdf_volhdrec |
有关VOLHDREC记录的详细说明,请参阅GDF官方规范。 |
gdf_volhdrec_link_daset_vol |
该特性类型保存gdf_volhdrec特性和它们的数据集卷之间的映射。 |
gdf_dshdrec_01 |
有关DSHDREC记录的详细说明,请参阅GDF官方规范。 |
gdf_dshdrec_01_link_language |
该特性类型保存了gdf_dshdrec_01特性与其语言之间的映射。 |
gdf_dshdrec_01_link_country |
该特性类型保存了gdf_dshdrec_01特性与其国家之间的映射。 |
gdf_dshdrec_02 gdf_dshdrec_03 gdf_dshdrec_04 gdf_dshdrec_05 gdf_dshdrec_06 gdf_dshdrec_07 |
有关DSHDREC记录的详细说明,请参阅GDF官方规范。 |
gdf_fieldefrec |
有关FIELDEFREC记录的详细说明,请参阅官方GDF规范。 |
gdf_recdefrec |
有关RECDEFREC记录的详细说明,请参阅官方GDF规范。 |
gdf_recdefrec_link_fld_name |
该特性类型保存了gdf_recdefrec特性及其字段名之间的映射。 |
gdf_atdefrec |
有关ATDEFREC记录的详细说明,请参阅官方GDF规范。 |
gdf_direc |
有关此特性类型的完整解释,请参阅官方GDF规范中的direcc记录。 |
gdf_featdefrec |
有关该特性类型的完整解释,请参阅官方GDF规范中的FEATDEFREC记录。 |
gdf_spadorec |
有关SPADOREC记录的详细说明,请参阅官方GDF规范。 |
gdf_feaqualrec |
有关FEAQUALREC记录的详细说明,请参阅官方GDF规范。 |
gdf_atqualrec |
有关ATQUALREC记录的详细说明,请参阅官方GDF规范。 |
gdf_srcerec_01 gdf_srcerec_02 |
请参阅SRCEREC记录的官方GDF规范,以获得该特性类型的完整解释。 |
gdf_srcerec_02_link_language |
该特性类型保存了gdf_srcerec_02特性与其语言之间的映射。 |
gdf_srcerec_02_link_country |
该特性类型保存了gdf_srcerec_02特性与其国家之间的映射。 |
gdf_srcerec_03 gdf_srcerec_04 gdf_srcerec_05 gdf_srcerec_06 gdf_srcerec_07 gdf_srcerec_08 gdf_srcerec_09 |
有关这些特性类型的完整解释,请参阅SRCEREC记录的官方GDF规范。 |
gdf_dattvalrec |
请参阅DATTVALREC记录的官方GDF规范,以了解该特性类型的完整解释。 |
gdf_sechrec_01 gdf_sechrec_02 gdf_sechrec_03 |
有关此特性类型的完整解释,请参阅官方GDF规范中的SECHREC记录。 |
gdf_sechrec_03_link_feature_ |
该特性类型保存了gdf_sechrec_03特性与其特性质量之间的映射。 |
gdf_sechrec_03_link_ |
该特性类型保存了gdf_sechrec_03特性及其属性质量之间的映射。 |
gdf_sechrec_04 |
有关此特性类型的完整解释,请参阅官方GDF规范中的SECHREC记录。 |
gdf_sechrec_04_link_ |
该特性类型保存gdf_sechrec_04特性与其源描述之间的映射。 |
gdf_sechrec_05 |
有关此特性类型的完整解释,请参阅官方GDF规范中的SECHREC记录。 |
gdf_sechrec_05_link_ |
该特性类型保存了gdf_sechrec_05特性与其衰减之间的映射。 |
gdf_sechrec_06 |
有关此特性类型的完整解释,请参阅官方GDF规范中的SECHREC记录。 |
gdf_sechrec_06_link_geoid |
该特性类型保存了gdf_sechrec_06特性及其大地水准面之间的映射。 |
gdf_sechrec_07 gdf_sechrec_08 gdf_sechrec_09 |
有关此特性类型的完整解释,请参阅官方GDF规范中的SECHREC记录。 |
gdf_layhrec |
有关这种特性类型的详细说明,请参阅LAYHREC记录的官方GDF规范。 |
gdf_layhrec_link_them_cod |
该特性类型保存了gdf_layhrec特性及其主题代码之间的映射。 |
gdf_datelrec |
有关DATELREC记录的详细说明,请参阅官方GDF规范。 |
gdf_verdatrec |
请参阅VERDATREC记录的官方GDF规范,以获得该特性类型的完整解释。 |
gdf_verdatrec_link_level |
该特性类型保存了gdf_verdatrec特性及其级别之间的映射。 |
gdf_projecrec |
有关PROJECREC记录的详细说明,请参阅官方GDF规范。 |
gdf_projecrec_link_parms |
该特性类型保存gdf_projecrec特性和它们的投影参数之间的映射。 |
gdf_natgridrec |
有关此特性类型的完整解释,请参阅NATGRIDREC记录的官方GDF规范。 |
gdf_geoidrec |
有关这种特性类型的详细说明,请参阅GEOIDREC记录的官方GDF规范。 |
gdf_magnetrec |
有关这种特征类型的详细说明,请参阅MAGNETREC记录的官方GDF规范。 |
gdf_commentrec |
有关commentrc记录的详细说明,请参阅官方GDF规范。 |
gdf_voltermrec |
有关此特性类型的完整解释,请参阅VOLTERMREC记录的官方GDF规范。 |
gdf_xyzrec_point gdf_xyzrec_line |
请参阅XYZREC记录的官方GDF规范,了解该特性类型的完整解释。 |
gdf_nedgerec |
有关NEDGEREC记录的详细说明,请参阅官方GDF规范。 |
gdf_knotrec |
有关KNOTREC记录的完整说明,请参阅官方GDF规范。 |
gdf_facerec |
请参阅FACEREC记录的官方GDF规范,以了解该特性类型的完整解释。 |
gdf_facerec_link_edge_id |
该特性类型保存gdf_facerec特性与其边缘id之间的映射。 |
gdf_namerec |
有关该特性类型的完整解释,请参阅官方GDF规范中的NAMEREC记录。 |
gdf_dsatrec |
有关DSATREC记录的详细说明,请参阅GDF官方规范。 |
gdf_dsatrec_link_attr |
该特性类型保存了gdf_dsatrec特性及其属性id之间的映射。 |
gdf_timerec |
有关TIMEREC记录的详细说明,请参阅官方GDF规范。 |
gdf_convertrec |
有关此特性类型的完整解释,请参阅官方GDF规范中的CONVERTREC记录。 |
gdf_relatrec |
有关这种特性类型的完整解释,请参阅官方GDF规范中的RELATREC记录。 |
gdf_relatrec_link_feat |
该特性类型保存gdf_relatrec特性和它们的特性id之间的映射。 |
gdf_relatrec_link_attribute |
该特性类型保存gdf_relatrec特性及其属性id之间的映射。 |
gdf_poferec |
有关此特性类型的完整解释,请参阅POFEREC记录的官方GDF规范。 |
gdf_poferec_link_knot |
该特性类型保存gdf_poferec特性和它们的结id之间的映射。 |
gdf_poferec_link_attribute |
该特性类型保存gdf_poferec特性与其属性id之间的映射。 |
gdf_linfrec |
有关LINFREC记录的详细说明,请参阅官方GDF规范。 |
gdf_linfrec_link_edge |
该特性类型保存了gdf_linfrec特性与其边缘id之间的映射。 |
gdf_linfrec_link_attribute |
该特性类型保存了gdf_linfrec特性及其属性id之间的映射。 |
gdf_arferec |
有关ARFEREC记录的详细说明,请参阅官方GDF规范。 |
gdf_arferec_link_face |
该特征类型保存了gdf_arferec特征与其面部id之间的映射。 |
gdf_arferec_link_attribute |
该特性类型保存了gdf_arferec特性及其属性id之间的映射。 |
gdf_compferec |
有关此特性类型的完整解释,请参阅COMPFEREC记录的官方GDF规范。 |
gdf_compferec_link_feat |
该特性类型保存gdf_compferec特性与其特性id之间的映射。 |
gdf_compferec_link_attribute |
该特性类型保存gdf_compferec特性及其属性id之间的映射。 |
gdf_unknown_record |
所有未被FME完全理解的GDF记录都以这种特征类型输出。 |
我们曾经有一个gdf_type除了几何类型之外的所有记录类型。制作几何图形gdf_type更明确地说,我们现在给出gdf_no_geom类型转换为不包含任何几何形状的所有特征类型,例如VOLHDREC。
读者和作者概述
![关闭](http://www.baooytra.com/docs/fme/2017.1/html/FME_Desktop_Documentation/FME_ReadersWriters/Skins/Default/Stylesheets/Images/transparent.gif)
GDF读取器按顺序读取整个文件。因此,首先处理来自Volume级别的头部信息,然后分别处理来自Dataset、Section和Layer级别的信息。在GDF文件头中找到的缩放和偏移因子将应用于从该文件读取的所有坐标。读者每次提取一个特征,然后将其传递给FME的其余部分进行处理。
该阅读器支持基于FIELDEFREC (03)和RECDEFREC (04)记录。对于不同的变体,如Navteq和TeleAtlas 3.4,阅读器有一个默认配置。如果要读取的数据集具有FIELDEFREC (03)和RECDEFREC (04)记录,这些记录将用于调整配置。因此,可以在数据集头中定义新的记录类型,读取器将正确地处理它们。
第1级点的几何形状是所有组件的包围盒的中心。第一级线的几何形状是所有组件的连接。第1级区域的几何形状是通过“分解”所有组件来计算的。
复杂(第2级)特征象征抽象的网络拓扑,因此不能在所有情况下用可视化图形表示来忠实地表示。复杂特性的属性将始终保留所有必要的信息,以完全重建第2级拓扑或以其他方式访问GDF文件中表示的数据的每个方面。在可能的情况下,智能地创建复杂特征的几何图形,以可视化地表示网络拓扑的那些部分。在大多数情况下,复杂特性的几何形状确实有助于通过图形查看器理解网络。
分配给复杂特征的几何图形是线、点或多边形。复杂的特征从/到链接被读取为第2级线,其几何形状被假定为从边界框的中心开始的单线段线从的边界框的中心来特性。如果复杂特性没有从/到链接,然后考虑成员的类型。只有多边形成员的多边形被读为第2级多边形,其几何形状是分解所有多边形成员的结果。最后,那些不完全由多边形成员组成的复杂特征被解读为第2级点,其几何形状被假定为所有组件的边界框的中心。需要注意的是,上述情况有一个例外;所有复杂的特征都没有从/到链接和确切的一个成员将假定完整的几何形状和该成员的类型。包含对未出现在文件中的成员的引用的任何复杂特性都将输出为COMPFEREC没有几何形状的特征。
当GDF读取器遇到它不知道如何处理的记录类型时,它简单地将该元素输出为UNKNOWN_RECORD然后继续阅读下一篇特写。但是,除非记录模式以前没有在RECDEFREC (04)在标题中记录。
除了在GDF术语中称为物理表示的不同记录类型外,读者还需要考虑数据模型来创建FME特性。该数据模型是特定于供应商和版本的,并定义了GDF特性名称、属性名称和值。如果有需要,可以在文本编辑器中编辑GDF的不同变体和版本的数据模型。数据模型在下面的FME安装文件夹中插件/ gdf /模型.
![关闭](http://www.baooytra.com/docs/fme/2017.1/html/FME_Desktop_Documentation/FME_ReadersWriters/Skins/Default/Stylesheets/Images/transparent.gif)
目前,创建GDF文件涉及大量的定制。所有发送到GDF编写器的特性都被假定为“链接”结构,如特性表示部分所述。在将这些特性发送给作者之前,还必须正确地确定它们的顺序。
未来版本的GDF作者可能会获得更多的智能,能够正确地自动生成必要的“链接”特征,给定规则线、多边形等;然而,目前需要定制映射文件。
生成有意义的GDF文件作为输出将需要设置一个自定义映射文件,该文件描述输入模式的详细信息,原因如下:
- 通用(自动)翻译通常适用于大多数格式,因为它们非常简单。(如果某条路在源路径中有一个属性“length”,那么在目标路径中创建一个属性“length”是有意义的。)然而,GDF是一个特例。GDF是如此的复杂以至于这样的“最佳猜测”是不可能的。翻译大多数格式不需要理解模式,只需要了解它。在GDF中,FME不仅需要知道输入数据的模式,而且还必须实际理解其含义。
- GDF有数百个(如果不是数千个的话)预定义的属性和值。当给FME一个源数据集,但没有任何指示源数据中的哪些属性应该用于在输出GDF文件中填写所需属性时,大部分信息将会丢失。(当给出的只是一个不知道模式或输入数据含义的源文件时,没有办法“猜测”任何道路的特性代码值。)因此,“自动”翻译通常不会产生任何有用的东西。需要做的是,用户需要创建一个自定义映射文件,该文件告诉FME在其特定源数据集中在哪里查找所有所需的GDF数据。
- 如果gdf_fieldefrec特性被写入,它们的字段宽度定义将被尊重。这允许用户动态定义自定义字段宽度,以便在生成的GDF文件中使用。例如,在创建TeleAtlas Multinet 3.1和3.2 GDF文件时,这是很有用的,因为这两个文件在几个记录中使用了不同的字段宽度。