7.2在Java中操作几何体

7.2在Java中操作几何体如你所见,空间对象以SDO_GEOMETRY类型存储在数据库表中。要在Java中对其进行处理,必须首先使用JDBC从数据库中读取它们,然后把它们映射为Java类。把SDO_GEOMETRY类型映射为Java类是比较简单的,这都归功于OracleSpatial提供的API接口。API本身是比较简单的:它有一个主要的包(oracle.spatial.geometry),该包中包含两个主要的类(JGeometry和J3D_Geometry)。这个API在OracleDatabase11g中被显著地加强了。它现在包含许多几何体的处理函数,同时也包含可以在一些标准格式(GML、WKT和ESRI等格式)间进行几何体格式转换的工具函数。这些工具都位于oracle.spatial.util包中。OracleSpatial的JavaAPI由位于Oracle安装目录($ORACLE_HOME/md/jlib)下的两个JAR文件(sdoapi.jar和sdoutl.jar)组成。要在应用中使用API,须记得要在类路径(classpath)中包含上述目录。你也需要JDBC驱动和XML解析器(仅用于处理GML)。下面是在Windows环境中你的类路径的设置:1.C:\>setclasspath=.;%ORACLE_HOME%\jdbc\lib\ojdbc14.jar;2.%ORACLE_HOME%\md\jlib\sdoapi.jar;%ORACLE_HOME%\md\jlib\sdoutl.jar;3.%ORACLE_HOME%\lib\xmlparserv2.jar;OracleSpatialJavaAPI的文档(Javadoc)在Oracle文档全集中有,也可以在你的Oracle安装目录中的两个文档$ORACLE_HOME/md/doc/sdoapi.zip和sdoutl.zip中找到。在Apress站点中可以找到大量的关于如何读、写和处理几何体的Java完整示例。表7-1中列出了这些程序。表7-1程序示例程序返回信息SdoPrint.java打印出任意表中几何体的结构SdoExport.java把表中一部分或全部的几何体导出到格式为WKT、WKB、GML或其他的文件SdoImport.java把先前导出的几何体导入到表中7.2.1使用JGeometry类Java中操作几何体的主要工具就是JGeometry类。它使你可以对数据库中的几何体进行读写,同时也可以对几何体进行检查,创建新的几何体和对这些几何体进行一系列的转换。1.几何体的读写当你用SQL的SELECT语句读取对象类型(如SDO_GEOMETRY类型)时,JDBC返回一个Java结构--更精确地说,是oracle.sql.STRUCT对象。在写一个对象的时候(用INSERT或UPDATE语句),你仍需要通过oracle.sql.STRUCT对象来传递。对STRUCT的解码和构造都是相当复杂的,而OracleSpatialJavaAPI(JGeometry类)的主要目标就是使得这种操作变得简单。JGeometry类提供了两种把STRUCT转换成JGeometry对象的方法:load()方法用于读入STRUCT,返回JGeometry对象。当你对由SELECT语句返回的几何体进行转换的时候,用该方法。store()方法与load()方法相反。它把JGeometry对象转换成可以通过INSERT或UPDATE语句写回数据库中的STRUCT对象。图7-3展示了转换的过程。(点击查看大图)图7-3在Java中对几何体的读写在OracleDatabase11g中,load()和store()方法得到了强化,以提供自己的为几何体对象而优化的序列化(pickling)及反序列化(unpickling)方法。因此它们应当执行得更好。对于读取一个几何体,首先要把这个对象以字节数组的形式读入,然后把这个数组传递给load()方法。图7-4展示了这个过程。图7-4用优化的"序列化"工具在Java中对几何体进行读写下面的这个例子,首先用结果集的getObject()方法,把各行的几何体对象提取为STRUCT类型,然后使用JGeometry的静态方法load()把它转换成JGeometry对象。1.STRUCTdbObject=(STRUCT)rs.getObject(1);2.JGeometrygeom=JGeometry.load(dbObject);要使用优化的反序列化工具(unpickler),首先使用结果集的getBytes()方法提取几何体到一个字节数组中。然后再次使用JGeometry的静态方法load()把它转换成JGeometry对象。1.byte[]image=rs.getBytes(1);2.JGeometrygeom=JGeometry.load(image);2.检查几何体你现在可以用多个get()方法从几何对象中提取信息。表7-2中总结了主要的方法。在表7-3中附加的is()方法对几何体的特性进行了细化。表7-2JGeometry中主要的get()方法方法返回信息getType()几何体类型(1表示点,2表示线,依次类推)getDimensions()维度getSRID()空间参考系IDgetNumPoints()几何体中的点数getPoint()点对象的坐标(如果几何体是点)getFirstPoint()几何体中的第一点g...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

确认删除?