首页 理论教育 空间数据库实验教程:常用数据格式转换

空间数据库实验教程:常用数据格式转换

时间:2023-08-29 理论教育 版权反馈
【摘要】:常用的数据格式有OGC的标准格式WKT、WKB和GML,还有ESRI的SHP格式。这一小节只讨论OGC的三种标准格式,ESRI的SHP格式在下一节进行讨论。点在WKT中可以被编码为:POINT一个简单多边形可以编码为:POLYGON可以使用Oracle.spatial.util包中WKT类的fromJGeometry()方法将JGeometry对象转换为WKT格式。

空间数据库实验教程:常用数据格式转换

常用的数据格式有OGC的标准格式WKT、WKB和GML,还有ESRI的SHP格式。这些常见数据格式转换功能函数主要在Oracle.spatial.util包内。这一小节只讨论OGC的三种标准格式,ESRI的SHP格式在下一节进行讨论。下面依次讨论WKT、WKB和GML格式。

7.2.5.1 对WKT的读写

WKT格式是对几何体编码的一个结构化文本格式。它最初被设计为在不同环境下交换几何体的一种标准方法。点在WKT中可以被编码为:

POINT(-111.870478 33.685992)

一个简单多边形可以编码为:

POLYGON((-119.308006 37.778061, ...-119.308006 37.778061))

可以使用Oracle.spatial.util包中WKT类的fromJGeometry()方法将JGeometry对象转换为WKT格式。注意,这个方法将生成一个字节数组,在将它写入到文件前,需要把它转换成一个字符串。如下所示:

也可以用WKT类中的toJGeometry方法把WKT字符串转回JGeometry对象。这个方法的输入也是一个字节数组。过程如下所示:

需要说明的是,WKT格式和WKB格式没用提供任何用来表示几何投影的机制;也就是说,在将几何体转换成另一种格式时,这类信息将丢失。如果想保留这些信息,需要单独对它进行处理,同时用setSRID()方法把它回添到几何体中。

7.2.5.2 对WKB的读写

WKB编码就是把几何体以二进制的方式编码,是一种比WKT更紧凑的格式。它的使用方法与前面的处理相似。WKB类中的fromJGeometry()方法也产生一个字节数组,你可以把该数组写到文件中。

首先把JGeometry转换为WKB格式。这将产生一个字节数组。然后把字节数组的大小和几何体的SRID写入输出流。最后以适当的方式写入字节数组,代码如下:(www.xing528.com)

注意,ByteOrder.BIG_ENDIAN参数表明要使用的二进制编码的类型为大尾段(big endian)或小尾段(little endian)。默认生成大尾段编码。需要使它与用来处理WKB工具所接受的编码相适应。

用WKB类中toJGeometry()方法可以把WKB转换成JGeometry对象。这个方法仍用字节数组作为输入。下面的例子展示了这个过程。假设先从以前的文件中读取数据,首先读取WKB的长度,然后读取几何体的SRID,接下来读取重建WKB所需的字节数,最后把WKB转换为JGeometry对象并用setSRID方法把SRID写回。代码如下:

不需要指定将要使用的二进制编码的格式(大尾段或者小尾段),因为toJGeometry()方法能够自动对编码进行识别并可以对两者进行透明的处理。

7.2.5.3 对GML的读写

WKT格式和WKB格式有许多限制:它们只支持简单的二维形状,而不支持任何三维形状,以及弧或圆。另外,它们也无法指定对几何体的投影。GML(地理标识语言)则是一个强有力的解决方案,它对地理信息进行XML编码。

为了对GML进行读写,将展示使用表7-8中总结的四个类及其方法。存在多个类的原因是GML标准在不断更新中。现在有两个主要的版本:GML2和GML3,其中GML3提供对三维(表面和立方体)和其他高级工具的支持。

表7-8 Oracle Spatial中的GML转换工具

其中,GML3是GML2的超集,所以任意由GML2编码的几何体都可以被GML3读取。反之则不成立。把JGeometry对象转换为GML格式很容易,代码如下所示:

to_GMLGeometry()返回一个可以直接写出的字符串,也可以把结果(一个XML串)包含在其他XML文档中。上面的例子使用了GML2。而对GML3的使用,只要使用合适的类和方法就可以了。

由于方法(GML.fromNodeToGeometry()和GML3g.fromNodeToGeometry())不支持GML字符串直接作为输入,所以把GML字符串转换成JGeometry对象就比较麻烦了。好在这两个方法支持解析文档。所以在使用这些方法之前,必须首先对GML字符串进行解析。下面的例子展示了这个过程:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈