美文网首页
告别GDAL,用Go Lang从ESRI File Geodat

告别GDAL,用Go Lang从ESRI File Geodat

作者: 开源GIS地图与信创 | 来源:发表于2022-07-19 13:29 被阅读0次

    GDB的文件结构

    整个GDB数据库在Windows下实质是一个文件夹,里面通过文件名和文件后缀两个维度。

    到目前为止,GDB也经历了两个大的规范版本9和10,由于现在主要使用10,所以不对9进行展开。

    文件命名格式为a[number in lowercase hex].[extension]

    a00000001 是第一个文件, a00000002是第二个文件,且数字可能被跳过。

    在 FileGDB v10中,前8个文件 (a00000001 to a00000008) 是固定不变的内置文件,被预留来保存数据库本身的元数据,后续的文件被用来存放实际的要素信息(a00000009, a0000000a, ...)

    GDB看作一个整体,将整个数据库的文件列表、整个数据库的配置信息、每张数据表的坐标系、每张表的metadata、GDB_ItemRelationships、GDB_ItemRelationshipTypes、GDB_ItemTypes等单独抽离出来存储。从a000000009开始的表才真正存放用户的实际数据,且a000000009之后的所有文件内不存放坐标系和metadata,只存放字段信息和每一行数据。暂时还不清楚GDB_ItemRelationships、GDB_ItemRelationshipTypes、GDB_ItemTypes到底是什么,可能是拓扑检查需要的东西。

    • a00000001 也叫 GDB_SystemCatalog 包含一个本数据库中所有文件的列表,也包括它本身。这里记录的表格在磁盘上有可能找不到,比如a00000008。 一行记录中的FID记录了文件名。

    例如,FID 37的记录(这里采用的FID编号惯例是从1开始的)将在文件a00000025中(译者注:10进制的37用16进制表示为25)。在这个目录表中可能有被删除的行,因此在FID编号中存在空白。

    在.a00000001.gdbtable中暂时没找到FID这一个属性列,里面的ID列实际类型是objectid,所以不能直接拿来对比使用。

    这个表里还包含NameFileFormat字段。FileFormat字段的值多数时候是0,在少部分内置保留表中是2。

    • a00000002GDB_DBTune,主要包含本数据库的一些配置信息。

    • a00000003也叫GDB_SpatialRefs,主要用于存储坐标系信息,坐标系以WKT形式存储在SRTEXT字段中,WKT是以ESRI的WKT格式组织的,其它还包括:FalseX, FalseY, XYUnits, FalseZ, ZUnits, FalseM, MUnits, XYTolerance, ZTolerance, MTolerance字段。

    所有行都是唯一的,所以如果有3个Feature类,它们都具有相同的坐标系,但其中一个具有不同的ZTolerance,那么就会有两行记录。

    • a00000004 也叫GDB_Items 并且包含layers的 metadata,以XML格式表示。字段包括 :
    1. UUID (UUID) : UUID
    2. Type (UUID) : item type
    3. Name (string) : item/layer name. Matches the Name field of the GDB_SystemCatalog
    4. PhysicalName (string) : item/layer name in upper case characters.
    5. Path (string) : "\mylayername" for top-level layers or "\myfeaturedataset\mylayername" for layers attached to a feature dataset "myfeaturedataset"
    6. DatasetSubType1 (int32) : 1 for user tables (TBC)
    7. DatasetSubType2 (int32) : layer geometry type. 1 for point layer, 2 for multipoint layers, 3 for linestring layers, 4 for polygon layers
    8. DatasetInfo1 (string) : "SHAPE" for user tables (TBC)
    9. DatasetInfo2 (string) : NULL for user tables (TBC)
    10. URL (string) : empty string (TBC)
    11. Definition (XML) : DEFeatureClassInfo XML element. Contains an XML version of the information that can be obtained by parsing the header of a table : fields, SRS, ...
    12. Documentation (XML) : metadata XML element
    13. ItemInfo (XML) : NULL for user tables (TBC)
    14. Properties (int32) : 1 for user tables (TBC)
    15. Defaults (binary) : absent for user tables (TBC)
    16. Shape (geometry) : 5 point polygon listing the corner of the bounding box of the layer reprojected into EPSG:4326 (even if the layer SRS is not EPSG:4326). Or missing if the layer SRS is undefined.

    一些特殊记录:

    1. The first record is reserved for a kind of root item ( Name = "", Path = "" ).
    2. The second record is reserved for a Name = "Workspace" item, Path = "", Definition containing a DEWorkspace XML element
    3. When there are feature datatesets, they also appear as records : e.g. Name = "featuredataset", PhysicalName = "FEATUREDATASET", Path = "\FEATUREDATASET", Definition containing a DEFeatureDataset XML element
    • a00000005, a00000006 and a00000007 are one of GDB_ItemRelationships,GDB_ItemRelationshipTypes or GDB_ItemTypes (order may vary depending on datasets)

    • a00000008虽然在记录中有,但实际磁盘上可能会不存在。

    大佬们如果觉得有用请支持点赞

    相关文章

      网友评论

          本文标题:告别GDAL,用Go Lang从ESRI File Geodat

          本文链接:https://www.haomeiwen.com/subject/hjojirtx.html