udx映射

udx映射

Posted by Lan on September 19, 2019

udx映射

本文设计了可扩展的数据格式映射方法。

对于原始数据格式而言,数据内容都是通过读写API来操控的;而对于UDX的Node-Kernel结构而言,数据的读与写都需要通过访问与构造数据节点Node来完成。

由此,原始的领域通用数据格式到基于Node-Kernel结构的UDX Data之间,可以通过API函数和数据节点操作两者的映射来进行直接的交换。

数据读写API函数可以根据不同的原始数据格式进行定制和扩展,从而实现前文所述两种类型的数据格式都向统一的Node-Kernel结构进行映射。

原始数据格式可以是单个文件的形式,也是可以是多个文件的组合形式;将其映射到Node-Kernel结构时,模型程序的数据读写操作对外部会暴露成数据节点的操作,而在数据节点的操作内部则会映射为具体数据格式相关的API函数。

ReadFromNode&&WriteToNode

数据节点的操作主要包含两个接口函数:一个负责从UDX Node中获取数据内容ReadFromNode(),一个负责向UDX Node中填充数据内容WriteToNode()。

ReadFromNode接口函数和WriteToNode接口函数的具体实现内部都会对应到某个API函数,将模型程序的数据接口统一包装起来形成外观一致的Node-Kernel结构,而在内部则映射到相应的数据格式的数据读写API函数。

1.0

数据读写API有很多种实现形式,有的是动态链接库形式(DLL),有的是可执行程序形式(EXE),有的是组件形式(COM)等

但无论是何种形式,都会对外暴露相应的读取和写入数据的接口函数。

映射举例

多边形Polygon数据的典型API函数映射

  • ReadFromNode

当地理模型数据接口向外部请求“几何类型”的信息时,通过ReadFromNode函数映射到GDAL/ORG的getGeometryType函数;当请求“多边形外环”信息时,则通过ReadFromNode函数映射到GDAL/ORG的getExteriorRing函数。此外还有其他相关的函数。

2.0

  • WriteToNode

当地理模型数据接口向外部输出“多边形”数据时,通过WriteToNode函数其“几何类型”信息会直接蕴含在GDAL/ORG的new OGRPolygon()函数中;当地理模型数据接口向外部输出“多边形外环”信息时,通过WriteToNode函数映射到GDAL/ORG的addRing函数。

2.0

数据格式映射方法库

支撑地理模型提供者将所构建的UDX Data与API函数映射的结果积累下来,成为可共享的资源

在数据格式映射方法库中,主要包含了各种原始数据格式与UDX Data之间的转换方法。数据格式映射方法库中的资源条目主要用于描述某个映射方法,并对外提供统一的数据节点操作方法。

2.0

如上图所示,AbstractGeneralData接口中:

  • 一个映射方法的唯一标识id,

  • 名称信息name,

  • 相关解释性的信息description,

  • 本地化描述信息localization,

  • 以及相关联的UDX Schema信息

  • UDX Schema信息schemaInfo

关于schemaInfo这一属性的具体值

可以是通过引用“通用数据表达模板库”中某个数据表达模板的ID,

也可以是直接描述成UDX Schema的XML序列化字符串。

如果是引用的数据表达模板ID,则schemaType是TemplateId类型;

如果是XML序列化字符串,则schemaType是Internal类型;

如果没用描述相关的UDX Schema信息,则schemaType是Unknown类型。

映射方法的具体实现

如上图所示,数据格式映射方法库中包含了一系列的AbstractGeneralData的具体实现,比如ShapefileData是Shapefile格式的数据与UDX Data之间的API函数映射,其在实现AbstractGeneralData的ReadFromNode和WriteToNode函数的同时,还定制了LoadOGR的函数来加载OGR开源库来作为数据节点操作的底层API函数;GeoTIFFData是GeoTIFF格式的数据与UDX Data之间的API函数映射,其定制的LoadGDAL函数来加载GDAL开源库来作为数据节点操作的底层API函数。此外还有SWATHruData,AsciiGridData等数据格式映射方法。

*数据格式映射方法库中的资源条目(知道即可)

都对应着两部分内容:一部分是数据格式映射的具体方法实现,主要是由一个实现AbstractGeneralData抽象类的动态链接库DLL,以及该DLL所依赖的其他资源(例如前文所述的ShapefileData映射方法还需要依赖与GDAL/OGR库的DLL);另一部分内容是对该数据映射方法的描述文档。 2.0

总结

继承接口,写具体数据对应的映射方法,进行映射,将写好的各种映射方法累积到映射方法库中

利用readfromnode()去获取节点数据,利用writetonode()去给节点添加内容