zoukankan      html  css  js  c++  java
  • Oracle Spatial 基础操作详解(ZZ)

    第一步: 创建一张表,存储空间数据和业务数据,包含空间字段

    CREATE TABLE cola_markets_cs (
    mkt_id NUMBER PRIMARY KEY,
    name VARCHAR2(32),
    shape SDO_GEOMETRY);

    第二步:向表中插入记录 
     插入了三个多边形,第一个是矩形,另两个是普通的多边形,当然也可以插入复杂的比如包含洞的多边形。
    注意空间参考SRID与后面建索引的空间参考应一致。最关键的是空间对象的构造和表达,下篇再总结吧。

    INSERT INTO cola_markets_cs VALUES(
    1,
    'cola_a',
    SDO_GEOMETRY(
    2003,     // two-dimensional polygon
    8307,    // SRID for 'Longitude / Latitude (WGS 84)' coordinate system
    NULL,
    SDO_ELEM_INFO_ARRAY(1,1003,1), //polygon
    SDO_ORDINATE_ARRAY(1,1, 5,1, 5,7, 1,7, 1,1) -- All vertices must  be defined for rectangle with geodetic data.
    )
    );
    INSERT INTO cola_markets_cs VALUES(
    2,
    'cola_b',
    SDO_GEOMETRY(
    2003, -- two-dimensional polygon
    8307,
    NULL,
    SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)
    SDO_ORDINATE_ARRAY(5,1, 8,1, 8,6, 5,7, 5,1)
    )
    );
    INSERT INTO cola_markets_cs VALUES(
    3,
    'cola_c',
    SDO_GEOMETRY(
    2003, -- two-dimensional polygon
    8307,
    NULL,
    SDO_ELEM_INFO_ARRAY(1,1003,1), --one polygon (exterior polygon ring)
    SDO_ORDINATE_ARRAY(3,3, 6,3, 6,5, 4,5, 3,3)
    )
    );
     
    第三步: 更新USER_SDO_GEOM_METADATA元数据视图
    这步操作是后面创建索引的基础,一张表一般只用做一次,主要是告诉元数据视图,本张业务表的空间字段名称,以及空间范围(最大、最小值),容忍度。注意空间参考的应用。
    INSERT INTO user_sdo_geom_metadata
    (TABLE_NAME,
    COLUMN_NAME,
    DIMINFO,
    SRID)
    VALUES (
    'cola_markets_cs',
    'shape',
    SDO_DIM_ARRAY(
    SDO_DIM_ELEMENT('Longitude', -180, 180, 10), -- 10 meters tolerance
    SDO_DIM_ELEMENT('Latitude', -90, 90, 10) -- 10 meters tolerance
    ),
    8307 -- SRID for 'Longitude / Latitude (WGS 84)' coordinate system
    );

    第四步: 创建空间索引
    为提高查询效率,创建索引。此步可以在插入数据前完成。

    CREATE INDEX cola_spatial_idx_cs
    ON cola_markets_cs(shape)
    INDEXTYPE IS MDSYS.SPATIAL_INDEX;

    第五步:执行查询等操作

    面积查询:
    SELECT c.name, SDO_GEOM.SDO_AREA(c.shape, 0.005) FROM cola_markets c
    WHERE c.name = 'cola_a';

    空间关系查询:
    -- Do two geometries have any spatial relationship?
    SELECT SDO_GEOM.RELATE(c_b.shape, 'anyinteract', c_d.shape, 0.005)
    FROM cola_markets c_b, cola_markets c_d
    WHERE c_b.name = 'cola_b' AND c_d.name = 'cola_d';

  • 相关阅读:
    log4j2配置详解
    【数据库性能相关知识汇总】
    【Java并发知识点汇总】
    Spring实践系列-入门篇(一)
    分布式实践之概念解析
    平时工作需要注意总结面试中必然会问到的问题
    DataX支持mysql8.X
    springboot集成shiro
    ELK 6.2.4搭建
    DataX-MysqlWriter 插件文档
  • 原文地址:https://www.cnblogs.com/zhangjun1130/p/1983595.html
Copyright © 2011-2022 走看看