GML已经成为大家所接受并且容易理解的一种空间信息的交换格式标准,所以将其它GIS数据转换为GML格式进行发布就具有广泛的实用价 值和市场前景。不久的将来,空间信息会大量的以GML格式存在,人们可以方便的进行空间信息的共享与交换。由此就会引发出一个非常重要的问题,那就是如何将现有的一些空间信息转换成GML格式,更好的实现各类空间数据共享。
目前,大量的空间数据都是以特定的文本数据格式进行存储的,最常见的GIS数据格式包括ArcInfo公司的Shp文件,MapInfo公司的Mif文件等等。在我们所开发的中间件中,包含一个转换工具,实现了对Shp文件,Mif文件到GML文件的转化。
根据GML3规范中的Schema的描述、Shp文件和Mif文件的格式,就能将Shp文件和Mif文件转换为GML文件。在转换过程中,首先要创建一个GML格式文档,添加GML描述信息,然后循环的将Shp或者Mif文件中的地理信息元素转换为GML中的几何图元。
以ArcInfo公司的Shp文件为例。该文件是一个二进制文件,包含一个固定长度的头文件。该头文件长度为100个字节,其中包含整个文件的重要属性信息。例如:从第24个字节开始到28个字节描述的是文件的长度;从第28个字节开始到第32个字节描述的是文件的版本;从第32个字节开始到第36个字节描述的是文件中包含图形的类型;从第36个字节到第84个字节,每八个字节为一组,分别描述该图形文件的边界范围(Xmin,Ymin,Xmax,Ymax,Zmin,Zmax)。第100个字节以后是关于对象数据的描述,其中包括对point,line,polygon等几何类型的描述。每个地理对象是由一组字节决定,每组字节的长度根据所描述的几何类型的不同,字节长度也相应不同。以其中的Point点对象为例,从第0-4个字节描述对象的类型,从第4-12个字节描述点对象的X坐标,从第12-20个字节描述点对象的Y坐标。
我们将Shp文件中描述的各种地理信息与GML几何图元进行对应,其对应关系如下表所示。
Shp文件 | GML文件 |
Point | Point |
PointM | Point |
PointZ | Point |
MultiPoint | Point 或 MultiPoint |
MultiPointM | Point 或 MultiPoint |
MultiPointZ | Point 或 MultiPoint |
Polyline | LineString |
PolylineM | LineString |
PolylineZ | LineString |
Null shape | DBNull.Value |
Polygon | Polygon |
PolygonM | Polygon |
PolygonZ | Polygon |
MultiPatch | Polygon |
除了以特定文本数据格式存储以外,还有相当一部分地理信息是存储在数据库中的(一般都是存储在关系数据库中)。将这些地理信息转换为GML文件的原理和上述方法是类似的,只要找到地理信息与GML几何图元之间的对应关系,就可以编程进行转换。
还有一种常见的地理信息格式就是栅格数据( Raster Data )。栅格数据是由正方形或者矩形栅格点组成,每个栅格点或者像素的位置由栅格所在的行列号来定义,所对应的数值为栅格所要表达的内容的属性值。栅格图像的编码和 XML 格式的编码完全不同。它不能从语法上进行分析,不能验证正确性,也没有良好的格式。而且,它的每一个栅格点的数据值都是固定不变的,将其转化 XML 标准的格式的时候,没有任何操作的灵活性 。将栅格图像转换为 GML ,可以将其中所有的栅格点转换成为 GML 中的 Point 。由于通常栅格图像都包含着大量的信息,因此转换后的 GML 文件一般也都包含了大量的点信息。目前来看,将栅格数据转换为 GML ,并没有太多的实际意义。况且, GML3 中已经支持栅格数据,其中对覆盖模式的描述与栅格数据集是等价的。