`
nlslzf
  • 浏览: 1045475 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

学习Oracle Spatial ,建表,空间查询

阅读更多
http://www.cnoug.org/archiver/?tid-67549.html
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;


// 插入包含一个岛屿的湖泊
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
分享到:
评论

相关推荐

    Oracle_Spatial_的空间查询处理机制分析及优化

    标题“Oracle_Spatial_的空间查询处理机制分析及优化”揭示了文章的研究主题是关于Oracle数据库中专门用于空间数据管理的Oracle Spatial组件的空间查询优化。Oracle Spatial是Oracle数据库的一部分,专门用于管理...

    Oracle Spatial与ArcGIS连接

    - **索引构建:**为Oracle Spatial中的空间数据建立适当的索引,以提高查询效率。 - **查询优化:**利用SQL语句优化技术,提高查询速度。 **4.3 错误排查** - **日志分析:**记录并分析连接过程中的错误日志,定位...

    基于Oracle Spatial的矢量空间数据管理机制.pdf

    Oracle Spatial提供了一个强大的事务机制,包括元数据管理机制、空间索引机制、查询机制等。元数据管理机制可以管理空间数据的元数据,空间索引机制可以提高查询效率,查询机制可以支持各种空间分析。 Oracle ...

    Oracle Spatial空间信息管理:Oracle Database 11g_管会生编著_part2

    《Oracle Spatial空间信息管理:Oracle Database 11g》是世界级Oracle Spatial专家Ravi Kothuri、Albert Godfrind和Euro Beinat自力作,旨在向您提供空间信息管理方面的概念知识和实用技能,帮助您成为该领域的专家。...

    Oracle Spatial空间信息管理:Oracle Database 11g课本所需数据库数据

    《Oracle Spatial空间信息管理:Oracle Database 11g》是世界级Oracle Spatial专家Ravi Kothuri、Albert Godfrind和Euro Beinat自力作,旨在向您提供空间信息管理方面的概念知识和实用技能,帮助您成为该领域的专家...

    使用Oracle Spatial对ArcSDE中的SDO_GEOMETRY类型数据进行空间操作

    然后,需要使用 SELECT 语句查询空间元数据,例如: SELECT * FROM USER_SDO_GEOM_METADATA; 最后,需要使用 ArcSDE 导入空间数据,例如: INSERT INTO PROV (SHAPE) VALUES (SDO_GEOMETRY('POINT(120 30)', 8307...

    Oracle Spatial学生指导

    Oracle Spatial是Oracle数据库的一个扩展模块,专门用于处理地理空间数据,提供高级的空间查询、分析和可视化功能。在“Oracle Spatial学生指导”中,你将深入理解如何利用这个强大的工具进行地理信息系统(GIS)的...

    Oracle Spatial空间索引 解析

    Oracle Spatial允许对空间数据进行存储、检索、更新和查询操作,是处理地理信息系统(GIS)、城市规划、遥感图像等需要大量空间信息应用的强大工具。 Oracle Spatial由以下主要组件构成: 1. MDSYS模式:这是...

    Oracle Spatial空间信息管理(英文原版)

    本书是世界级Oracle Spatial专家Ravi Kothuri、Albert Godfrind和Euro Beinat的力作,旨在向您提供空间信息管理方面的概念知识和实用技能,帮助您成为该领域的专家。书中涵盖了Oracle数据库中空间信息管理的所有内容...

    Oracle Spatial用户指南

    总的来说,"Oracle Spatial用户指南"是学习和使用Oracle Spatial模块的重要参考资料,无论你是初学者还是经验丰富的开发者,都能从中获取到详尽的指导和实践建议,以实现高效的空间数据库开发。

    基于Oracle Spatial的空间查询技术及其优化.pdf

    本文主要探讨了基于Oracle Spatial的空间查询技术和优化策略。Oracle Spatial是Oracle数据库的一个扩展模块,专门用于处理和管理地理空间数据,提供了一套完整的开放数据库管理系统,并完全集成在数据库服务器端。它...

    Oracle Spatial9i介绍

    它为GIS相关开发人员提供了一套完整的工具集,使他们能够在Oracle数据库环境中高效地存储、管理以及查询空间数据。对于GIS开发者而言,理解Oracle Spatial9i的工作原理及其提供的功能至关重要。 #### 二、空间数据...

    oracle.spatial的jar包

    Oracle Spatial 是 Oracle 数据库的一个组件,专门用于处理和分析地理空间数据。这个组件提供了丰富的功能,包括地理坐标系统的转换、空间查询、空间分析以及地图显示等。在Java开发环境中,Oracle Spatial 提供了...

    Oracle Spatial 官方文档 pdf

    "Oracle Spatial User's Guide and Reference" 提供了关于如何使用 Oracle Spatial 的全面指南,包括安装、配置、数据导入导出、空间操作、查询语言(如 SDO_GEOMETRY 和 MDSYS 对象)等。参考部分则深入解析了各种...

    xtreme for java连接oracle spatial 空间数据库.doc

    Oracle Spatial是一个功能强大的模块,它扩展了Oracle数据库,使其能够存储、管理和查询地理空间数据。本篇将深入探讨如何使用xtreme for Java来连接Oracle Spatial空间数据库,帮助开发者实现高效的数据交互。 ...

    Oracle Spatial的空间查询分析功能浅析.pdf

    Oracle Spatial通过一套SQL模式和函数,简化了对空间特征集合的操作,包括存储、检索、更新和查询。 在空间查询和分析方面,Oracle Spatial采用双层查询模型,分为初级过滤和二级过滤两步。初级过滤主要通过近似...

    oracle spatial 用户指南

    2. **Spatial Indexing**: 为了高效查询和操作地理空间数据,Oracle Spatial使用了一种特殊的空间索引技术,如R-树(R-Tree)。这种索引结构能够快速定位和比较空间对象,极大地提高了查询性能。 3. **Spatial ...

    Oracle Spatial Developer's Guide

    Oracle Spatial是Oracle数据库的一个扩展模块,它提供了处理地理空间数据的能力,支持复杂的地理空间查询、分析和可视化。在本指南中,开发者可以学习到如何有效地利用Oracle Spatial来管理和操作地理信息。 Oracle...

    oracle spatial的官方指南

    - Oracle Spatial主要使用R-tree索引来优化空间查询性能。 - R-tree是一种高效的数据结构,特别适合处理多维数据。 3. **API接口** - 提供了一系列的SQL函数和PL/SQL包,方便用户进行空间数据的操作和查询。 - ...

Global site tag (gtag.js) - Google Analytics