Oracle Spatial建表学习步骤详解

Oracle Spatial建表学习的步骤是本文我们主要要介绍的内容,步骤如下:

Step1. 创建一张表,其中shape用来存放空间数据

  1. CREATE TABLE mylake (  
  2. feature_id NUMBER PRIMARY KEY,  
  3. name VARCHAR2(32),  
  4. shape MDSYS.SDO_GEOMETRY); 

Step2. 在user_sdo_geom_metadata表中插入新记录,用于描述空间字段

  1. INSERT INTO user_sdo_geom_metadata VALUES (  
  2. 'mylake',    //---表名  
  3.     'shape',    //---字段名  
  4.     MDSYS.SDO_DIM_ARRAY(     
  5. MDSYS.SDO_DIM_ELEMENT('X', 0, 100, 0.05),    //---X维最小,***值和容忍度。  
  6.         MDSYS.SDO_DIM_ELEMENT('Y', 0, 100, 0.05)    //---Y维最小,***值和容忍度 NULL    //---坐标系,缺省为笛卡尔坐标系  
  7. ); 

Step3. 创建空间索引

  1. CREATE INDEX mylake_idx ON mylake(shape)   
  2. INDEXTYPE IS MDSYS.SPATIAL_INDEX 

Step4. 插入空间数据

Oracle Spatial用MDSYS.SDO_GEOMETRY来存储空间数据,定义为:

  1. CREATE TYPE sdo_geometry AS OBJECT (  
  2. SDO_GTYPE NUMBER,  
  3. SDO_SRID NUMBER,  
  4. SDO_POINT SDO_POINT_TYPE,  
  5. SDO_ELEM_INFO MDSYS.SDO_ELEM_INFO_ARRAY,  
  6. SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY); 

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;  

// 插入包含一个岛屿的湖泊

  1. INSERT INTO mylake VALUES(  
  2. 10,   
  3. 'Lake Calhoun',   
  4. MDSYS.SDO_GEOMETRY(  
  5. 2003,  
  6. NULL,  
  7. NULL,  
  8. MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1, 19,2003,1),  
  9. MDSYS.SDO_ORDINATE_ARRAY(0,0, 10,0, 10,10, 0,10, 0,0, 4,4, 6,4, 6,6, 4,6, 4,4)  
  10. )); 

// 插入两艘小船

  1. INSERT INTO mylake VALUES(  
  2. 11,   
  3. 'The Windswept',   
  4. MDSYS.SDO_GEOMETRY(  
  5. 2003,  
  6. NULL,  
  7. NULL,  
  8. MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1),  
  9. MDSYS.SDO_ORDINATE_ARRAY(2,2, 3,2, 3,2, 2,3, 2,2) ); INSERT INTO mylake VALUES(  
  10. 12,   
  11. 'Blue Crest',   
  12. MDSYS.SDO_GEOMETRY(  
  13. 2003,  
  14. NULL,  
  15. NULL,  
  16. MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1),  
  17. 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必须来自表。

  1. SELECT name boat_name  
  2. FROM mylake t  
  3. WHERE feature_id = 12 
  4. AND SDO_FILTER(t.shape, mdsys.sdo_geometry(2003,NULL,NULL,  
  5. mdsys.sdo_elem_info_array(1,1003,1),  
  6. mdsys.sdo_ordinate_array(2,2, 5,2, 5,5, 2,5, 2,2)),'querytype=WINDOW') = 'TRUE';  

// 选择在定义矩形内的所有小船

  1. SELECT name boat_name  
  2. FROM mylake t  
  3. WHERE feature_id = 12 
  4. AND SDO_FILTER(t.shape, mdsys.sdo_geometry(2003,NULL,NULL,  
  5. mdsys.sdo_elem_info_array(1,1003,1),  
  6. mdsys.sdo_ordinate_array(2,2, 5,2, 5,5, 2,5, 2,2)),  
  7. 'querytype=WINDOW') = 'TRUE'  
  8. AND SDO_RELATE(t.shape, mdsys.sdo_geometry(2003,NULL,NULL,  
  9. mdsys.sdo_elem_info_array(1,1003,1),  
  10. mdsys.sdo_ordinate_array(2,2, 5,2, 5,5, 2,5, 2,2)),  
  11. 'masktype=INSIDE querytype=WINDOW') = 'TRUE

// masktype可联合使用

  1. SELECT feature_id id  
  2. FROM mylake t  
  3. WHERE feature_id = 12 
  4. AND SDO_FILTER(t.shape, mdsys.sdo_geometry(2003,NULL,NULL,  
  5. mdsys.sdo_elem_info_array(1,1003,1),  
  6. mdsys.sdo_ordinate_array(2,2, 5,2, 5,5, 2,5, 2,2)),  
  7. 'querytype=WINDOW') = 'TRUE'  
  8. AND SDO_RELATE(t.shape, mdsys.sdo_geometry(2003,NULL,NULL,  
  9. mdsys.sdo_elem_info_array(1,1003,1),  
  10. mdsys.sdo_ordinate_array(2,2, 5,2, 5,5, 2,5, 2,2)),  
  11. 'masktype=INSIDE+TOUCH querytype=WINDOW') = 'TRUE

关于Oracle Spatial建表学习的相关知识就介绍到这里了,希望本次的介绍能够对您有所收获!

【编辑推荐】

  1. Star Schema的设计思路与总结
  2. MySQL性能分析及explain的使用
  3. Oracle数据库悲观锁与乐观锁详解
  4. SQL Server多表查询优化方案总结
  5. Oracle执行计划不走索引的原因总结

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/299070.html<

(0)
管理的头像管理
上一篇2025-05-23 05:47
下一篇 2025-05-23 05:49

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注