Step1. 创建一张表,其中shape用来存放空间数据 CREATE TABLE mylake ( feature_id NUMBER PRIMARY KEY, name VARCHAR2(32), shape MDSYS.SDO_GEOMETRY);
Step2. 在user_sdo_geom_metadata 表中插入新记录,用于描述空间字段 INSERT INTO user_sdo_geom_metadata VALUES ( 'mylake',//---表名 'shape',//---字段名 MDSYS.SDO_DIM_ARRAY( MDSYS.SDO_DIM_ELEMENT('X', 0, 100, 0.05),//---X维最小,最大值和容忍度。 MDSYS.SDO_DIM_ELEMENT('Y', 0, 100, 0.05)//---Y维最小,最大值和容忍度 ), NULL//---坐标系,缺省为笛卡尔坐标系 );
Step3. 创建空间索引 CREATE INDEX mylake_idx ON mylake(shape) INDEXTYPE IS MDSYS.SPATIAL_INDEX
Step4. 插入空间数据 Oracle Spatial用MDSYS.SDO_GEOMETRY
来存储空间数据,定义为:CREATE TYPE sdo_geometry AS OBJECT ( SDO_GTYPE NUMBER, SDO_SRID NUMBER, SDO_POINT SDO_POINT_TYPE, SDO_ELEM_INFO MDSYS.SDO_ELEM_INFO_ARRAY, SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY); SDO_GTYPE:用四个数字定义了所有的形状 第一位:维数 第二位:线性表示。用于3,4维数据,二维为0 最后两位:
Value
Geometry
Description
00 |
UNKNOWN_GEOMETRY |
Spatial ignores this value |
01 |
POINT |
A single point element |
02 |
LINE or CURVE |
Contains one line string element that may be linear, curved or both |
03 |
POLYGON |
Contains one polygon element with or without other polygon elements in it |
04 |
COLLECTION |
A heterogeneous collection of elements |
05 |
MULTIPOINT |
Contains one or more points |
06 |
MULTILINE or MULTICURVE |
Contains one or more line string elements |
07 |
MULTIPOLYGON |
Contains multiple polygon elements that maybe disjoint |
SDO_SRID:坐标系,NULL为笛卡尔坐标系。 SDO_POINT:Oracle Spatial也可定义单个的点,SDO_POINT的定义: CREATE TYPE sdo_point_type AS OBJECT (X NUMBER,Y NUMBER,Z NUMBER); 如果是二维,Z为NULL。 SDO_ELEM_INFO:每三个值描述一个元素。 第一个值:第一个顶点在SDO_ORDINATES_ARR开始位置 第二个值:元素类型 第三个值:顶点连接方式:1-通过直线连接,2-通过圆弧连接 定义为 CREATE TYPE sdo_elem_info_array AS VARRAY (1048576) of NUMBER;
SDO_ORDINATES:几何图形所有顶点列表。定义为 CREATE TYPE sdo_ordinate_array AS VARRAY (1048576) of NUMBER;
FONT color=#003366>// 插入包含一个岛屿的湖泊 INSERT INTO mylake VALUES( 10, 'Lake Calhoun', MDSYS.SDO_GEOMETRY( 2003, NULL, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1, 19,2003,1), MDSYS.SDO_ORDINATE_ARRAY(0,0, 10,0, 10,10, 0,10, 0,0, 4,4, 6,4, 6,6, 4,6, 4,4) ));
// 插入两艘小船 INSERT INTO mylake VALUES( 11, 'The Windswept', MDSYS.SDO_GEOMETRY( 2003, NULL, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1), MDSYS.SDO_ORDINATE_ARRAY(2,2, 3,2, 3,2, 2,3, 2,2) ) ); INSERT INTO mylake VALUES( 12, 'Blue Crest', MDSYS.SDO_GEOMETRY( 2003, NULL, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1), MDSYS.SDO_ORDINATE_ARRAY(7,7, 8,7, 8,7, 7,8, 7,7) ) );
Step4. 查询 Oracle Spatial查询数据包括二个处理过程: 1.只通过索引查询候选项。通过函数SDO_FILTER实现: SDO_FILTER(geometry1 MDSYS.SDO_GEOMETRY,geometry2 MDSYS.SDO_GEOMETRY, params VARCHAR2)
geometry1: 必须是被索引的几何数据 geometry2:不一定是表中的空间字段,也不要求被索引 params:Filter类型 querytype=WINDOW:geometry2不要求来自表 querytype=JOIN:geometry2必须来自表
SELECT name boat_name FROM mylake t WHERE feature_id = 12 AND SDO_FILTER(t.shape, mdsys.sdo_geometry(2003,NULL,NULL, mdsys.sdo_elem_info_array(1,1003,1), mdsys.sdo_ordinate_array(2,2, 5,2, 5,5, 2,5, 2,2)), 'querytype=WINDOW') = 'TRUE'; 2.再检查每个候选项是否和条件精确匹配。通过函数SDO_RELATE实现: SDO_RELATE(geometry1 MDSYS.SDO_GEOMETRY, geometry2 MDSYS.SDO_GEOMETRY, params VARCHAR2) params:masktype类型
DISJOINT
— the boundaries and interiors do not intersect
TOUCH
— the boundaries intersect but the interiors do not intersect
OVERLAPBDYDISJOINT
— the interior of one object intersects the boundary and interior of the other object, but the two boundaries do not intersect. This relationship occurs, for example, when a line originates outside a polygon and ends inside that polygon.
OVERLAPBDYINTERSECT
— the boundaries and interiors of the two objects intersect
EQUAL
— the two objects have the same boundary and interior
CONTAINS
— the interior and boundary of one object is completely contained in the interior of the other object
COVERS
— the interior of one object is completely contained in the interior of the other object and their boundaries intersect
INSIDE
— the opposite of CONTAINS
. A INSIDE B
implies B CONTAINS A
.
COVEREDBY
— the opposite of COVERS
. A COVEREDBY B
implies B COVERS A
.
ON
— the interior and boundary of one object is on the boundary of the other object (and the second object covers the first object). This relationship occurs, for example, when a line is on the boundary of a polygon.
ANYINTERACT
— the objects are non-disjoint.
// 选择在定义矩形内的所有小船 SELECT name boat_name FROM mylake t WHERE feature_id = 12 AND SDO_FILTER(t.shape, mdsys.sdo_geometry(2003,NULL,NULL, mdsys.sdo_elem_info_array(1,1003,1), mdsys.sdo_ordinate_array(2,2, 5,2, 5,5, 2,5, 2,2)), 'querytype=WINDOW') = 'TRUE' AND SDO_RELATE(t.shape, mdsys.sdo_geometry(2003,NULL,NULL, mdsys.sdo_elem_info_array(1,1003,1), mdsys.sdo_ordinate_array(2,2, 5,2, 5,5, 2,5, 2,2)), 'masktype=INSIDE querytype=WINDOW') = 'TRUE'
// masktype可联合使用 SELECT feature_id id FROM mylake t WHERE feature_id = 12 AND SDO_FILTER(t.shape, mdsys.sdo_geometry(2003,NULL,NULL, mdsys.sdo_elem_info_array(1,1003,1), mdsys.sdo_ordinate_array(2,2, 5,2, 5,5, 2,5, 2,2)), 'querytype=WINDOW') = 'TRUE' AND SDO_RELATE(t.shape, mdsys.sdo_geometry(2003,NULL,NULL, mdsys.sdo_elem_info_array(1,1003,1), mdsys.sdo_ordinate_array(2,2, 5,2, 5,5, 2,5, 2,2)), 'masktype=INSIDE+TOUCH querytype=WINDOW') = 'TRUE'
Oracle Spatial 提供的其他查询函数:
Query |
Description |
SDO_NN |
Nearest neighbor |
SDO_SDO_WITHIN_DISTANCE |
All geometries with a certain distance |
|
Functions |
Description |
SDO_GEOM.SDO_MBR |
The minimum bounding rectangle for a geometry |
SDO_GEOM.SDO_DISTANCE |
The distance between two geometries |
SDO_GEOM.SDO_INTERSECTION |
Provides the intersection point of two geometries |
OracleSpatial初探http://blog.sina.com.cn/s/blog_439d2cef01009c4a.html
http://www.oracle.com/technology/products/spatial/htdocs/data_sheet_9i/9iR2_spatial_ds.html
分享到:
相关推荐
### Oracle Spatial 与 MapViewer 新特性详解 #### 一、Oracle Spatial 11g 新特性概览 **Oracle Spatial 11g** 是 Oracle 数据库 11g 的一个重要组成部分,它引入了一系列重要的新特性,并对现有的特性和 API ...
Oracle Spatial 中的 SDO_GEOMETRY 类型详解 Oracle Spatial 中的 SDO_GEOMETRY 类型是对空间对象的几何描述,定义了空间对象的形状和位置。SDO_GEOMETRY 类型是 Oracle Spatial 的核心数据类型,用于存储和处理...
### Oracle Spatial 11g 开发者指南知识点详解 #### 一、概述 《Oracle Spatial 11g 开发者指南》是Oracle公司为开发者提供的一本关于如何使用Oracle Spatial和Oracle Locator进行空间数据索引与存储以及开发空间...
### MapXtreme for Java Manager 测试Oracle Spatial连接简明指南 #### 一、概述 在GIS(地理信息系统)领域,Oracle Spatial是一个广泛使用的空间数据管理解决方案,它为存储、管理和查询空间数据提供了强大的...
### Oracle Spatial最佳实践详解 #### 一、概述 Oracle Spatial 是 Oracle 数据库中一项重要的功能,主要用于处理地理空间数据。随着地理信息系统 (GIS) 的普及和技术的发展,Oracle Spatial 已经成为了众多 GIS ...
【Oracle Spatial技术详解】 Oracle Spatial是Oracle数据库的一个扩展模块,专门用于处理和管理地理空间数据。它提供了一套全面的空间数据管理和分析功能,使得在关系型数据库中存储、查询、分析和可视化空间信息变...
【文章摘要】本文介绍了基于Oracle Spatial和GIS技术构建的煤炭矿产资源潜力数据库系统。该系统设计了功能模型,考虑了全国煤炭矿产资源潜力数据库的建设需求,并且兼顾其他矿种的数据处理。通过使用Oracle Spatial...
《MAPGIS与Oracle数据库空间数据格式的转换》一文探讨了如何将MAPGIS中的空间数据转换到Oracle Spatial数据库中。 #### 关键概念 - **地理信息系统(GIS)**:一种用于采集、存储、管理、分析和展示与地理位置相关...
《Oracle Special空间数据库与Java ORM工具包:sdoapi-11.2.0.jar详解》 Oracle数据库作为全球广泛使用的数据库系统之一,其在处理地理空间数据方面也有着强大的功能。Oracle Spatial(也称为Oracle Special)是...
【文件列表详解】 1. EasyLoader.cnt:这可能是程序的配置文件,包含了EasyLoader的设置信息,如连接参数、数据转换规则等。 2. ROBOEX32.DLL:这是一个动态链接库文件,可能包含了一些与数据交互或界面操作相关的...
《GeoServer 1.6.5与Oracle插件详解》 GeoServer是一款开源的地理信息系统(GIS)服务器,它能够发布地图数据并提供WMS、WFS等OGC标准服务。GeoServer 1.6.5是其历史版本,虽然较新版本功能更加强大,但在某些特定...
### Oracle 默认账号信息详解 #### 一、引言 在Oracle数据库系统中,存在一系列预定义的用户账户,这些账户通常被用于特定的功能或管理任务。了解这些默认账户的信息对于数据库管理员(DBA)来说至关重要,这不仅能...
- **描述**: 用于存储 Geocoder 和 router 数据的 Oracle Spatial 方案。 - **参考文档**: Oracle Spatial User’s Guide and Reference 5. **MDSYS** - **用户名**: MDSYS - **密码**: MDSYS - **描述**: ...
### ArcSDE 连接 Oracle 配置详解 #### 一、ArcSDE与Oracle数据库的集成概述 ArcSDE是Esri推出的一款用于管理地理空间数据的企业级解决方案,能够支持多种数据库管理系统(DBMS)。当ArcSDE与Oracle数据库进行集成...
`shp2sdo`是Oracle提供的一款用于将Shapefile转换为Oracle Spatial数据格式的命令行工具。首先,你需要从Oracle官网下载该工具,并将其放到PATH环境变量所包含的目录下,比如Oracle客户端的bin目录。然后,运行`shp...
### Oracle 10g连接数据库及OEM企业管理器使用详解 #### 一、登录Oracle 10g数据库 ##### 1.1 解决登录问题 安装好Oracle 10g之后,连接数据库是首要的任务。如果遇到登录问题,可以通过以下步骤解决: - **解锁...
- **Spatial Web Services**:通过集成Web服务,Oracle 11g 可以更好地与其他应用程序进行交互,实现了空间数据的共享与交换。 - **Network Data Model**:网络数据模型的引入使得用户能够更有效地管理和分析网络...