编辑: JZS133 2014-06-12

图表 时是一个经常遇到的问题. 在所有这些情况下, 你需要在外部格式和 Oracle Spatial 对象间创建一个接口. 可视化分析: 也许你想编写自己的图形地图渲染器, 而不使用标准的组件, 如Oracle MapViewer.这种需求也许不是很频繁,但是注意到:有很多特殊的浏览工具都从 Oracle Spatial 中获取对象用来在电脑、 手持设备和手机上显示. 创建这些工具的公 带格式的: 项目符号和编号 第7章在应用程序中操作 SDO_GEOMETRY

221 司需要开发一些能够在 SDO_GEOMETRY 列中进行深度访问空间对象的软件,用 来进行有效的可视化. 这些任务不仅需要由应用程序产生 SQL 语句――你更需要知道的是, 在用来编写该应 用的程序语言中如何操作 Oracle 对象(因为 SDO_GEOMETRY 是一个对象类型). 在本章接 下来的内容中,我们涵盖了怎样在 PL/SQL 和Java 中对 SDO_GEOMETRY 数据进行操作 的内容.我们描述的操作类型如下: 把对象映射为特定语言的数据结构 向应用程序中读/写SDO_GEOMETRY 对象 从SDO_GEOMETRY 对象中提取信息 在程序中创建新的 SDO_GEOMETRY 对象 修改已有的 SDO_GEOMETRY 对象(PL/SQL) 我们总会不失时机地用商业应用中典型的任务来对这些类型的操作进行举例说明,如 创建新的分店位置,创建新的销售区域和更新运送路径等.然而,如上所述,此类操作在 不同的应用中可以被用于各种不同的目的. 7.1 用PL/SQL 操作几何体 程序清单 7-3 展示了一个在 PL/SQL 中使用 SDO_GEOMETRY 对象的应用示例.这段 PL/SQL 代码创建了一个新的分店位置,计算一个矩形销售区域,为该商业应用创建一个 运输路径,且当货车运行时对路线进行延伸. 程序清单 7-3 在PL/SQL 中的示例应用 SQL>

DECLARE b_long NUMBER;

b_lat NUMBER;

new_long NUMBER;

new_lat NUMBER;

new_branch_loc SDO_GEOMETRY;

sales_region SDO_GEOMETRY;

route SDO_GEOMETRY;

BEGIN -- Obtain old location for branch id=1 SELECT br.location.sdo_point.x, br.location.sdo_point.y INTO b_long, b_lat FROM branches br WHERE id=1;

-- Compute new coordinates: say the location is displaced by 0.0025 degrees new_long := b_long+ 0.0025;

new_lat := b_lat + 0.0025;

带格式的: 项目符号和编号 第Ⅱ部分 基础空间222 -- Create new branch location using old location new_branch_loc := point ( X=>

new_long, Y=>

new_lat, SRID=>

8307 ) ;

-- Compute sales region for this branch sales_region := rectangle ( CTR_X=>

new_long, CTR_Y=>

new_lat, EXP_X=>

0.005, EXP_Y=>

0.0025, SRID=>

8307 ) ;

-- Create Delivery Route route := line ( FIRST_X=>

-122.4804, FIRST_Y=>

37.7805222, NEXT_X=>

-123, NEXT_Y=>

38, SRID=>

8307 ) ;

-- Update Delivery Route by adding new point route := add_to_line ( GEOM=>

route, POINT =>

POINT(-124, 39, 8307) ) ;

-- Perform additional analysis such as length of route -- or # of customers in sales region (we give examples in Chapters

8 and 9) -- ... -- Update geometry in branches table UPDATE branches SET LOCATION = new_branch_loc WHERE id=1;

END;

/ 首先,注意 到所有的 SQL 类型都可以直接 在PL/SQL 中使用,因此在使用 SDO_GEOMETRY 类型时不需要做什么明确的映射.如程序清单 7-3 中所示,你可以在代 第7章在应用程序中操作 SDO_GEOMETRY

223 码中像使用简单类型(如NUMBER、VARCHAR 等)那样使用 SDO_GEOMETRY 类型.总 的来说,你可以完成以下所述的操作: 声明 SDO_GEOMETRY 类型的变量来存储几何对象.例如,在程序清单 7-3 中, 我们已声明了三个 SDO_GEOMETRY 类型的变量, 即new_branch_loc、 sales_region 和route. 用规则的 PL/SQL 操作从这些几何对象中提取信息或修改它们的结构.程序清单 7-3 中展示了怎样从 SDO_GEOMETRY 对象中提取 x 和y坐标. 在静态或动态 SQL 语句中用 SDO_GEOMETRY 对象作为绑定(或者结果)变量. 这使得可以从数据库表中读写 SDO_GEOMETRY 对象.程序清单 7-3 展示了怎样 向更新分店位置的 SQL 语句中传递 SDO_GEOMETRY 对象. 创建一个存储函数,SDO_GEOMETRY 类型作为输入参数且(或)返回SDO_GEOMETRY 对象.例如,在程序清单 7-3 中,point 函数是一个存储函数, 它接收标量(数字)参数并返回一个 SDO_GEOMETRY 对象.add_to_line 函数把 SDO_GEOMETRY 作为第一个参数并返回一个 SDO_GEOMETRY 对象. 接下来,我们将填补程序清单 7-3 中的空白并描述怎样在程序清单 7-3 中对一些存储 函数进行编码.存储函数 point、rectangle 和line 的代码展示了怎样在 PL/SQL 中创建新的 几何体,add_to_line 函数的代码展示了怎样修改已有的几何体. 因为 SDO_GEOMETRY 包含了两个 VARRAY 结构:SDO_ELEM_INFO 和SDO_ ORDINAETS(如第

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题