oracle spatial 数据导入_【转】Oracle Spatial 空间分析操作函数——SDO_GEOM.RELATE

【转】Oracle Spatial 空间分析操作函数——SDO_GEOM.RELATE

(2014-09-16 09:34:09)

标签:

oracle

spatial

sdo

geom

一sdo_Geom包的函数:

用于表示两个几何对象的关系(结果为True/False)的函数:RELATE,WITHIN_DISTANCE

验证的函数:VALIDATE_GEOMETRY_WITH_CONTEXT,

VALIDATE_LAYER_WITH_CONTEXT

单个对象操作的函数:SDO_ARC_DENSIFY, SDO_AREA,SDO_BUFFER,SDO_

CENTROID,SDO_CONVEXHULL, SDO_LENGTH,SDO_MAX_MBR_

ORDINATE, SDO_MIN_MBR_ORDINATE,SDO_MBR,SDO_POINTONSURFACE

需两个对象操作操作的函数:SDO_DISTANCE,SDO_DIFFERENCE,SDO_INTERSECTION,SDO_UNION,SDO_XOR

1、sdo_Geom.Relate

sdo_Geom.Relate(sdo_Geometry1, ‘MASK’, sod_Geometry2, tolerance

):用于判断一个几何体与另一个几何体的关系,我们用于判断当前点是否在某一个面(省份面、县市面、乡镇面)上。

参数说明:

sdo_Geometry1,sdo_Geometry2为空间数据对应的几何对象。

Tolerance: 容许的精度范围;

MASK参数:

Anyinteract: sdo_Geometry2落在sdo_Geometry1面上包括在边上。

Contains:

sdo_Geometry2完全包含在sdo_Geometry1几何对象中,并且两个几何对象的边没有交叉。

Coveredby:

sdo_Geometry1完全包含在sdo_Geometry2中,并且这两个几何对象的边有一个或多个点相互重叠。

Covers:

sdo_Geometry2完全包含在sdo_Geometry1中,并且这两个几何对象的边有一个或多个点相互重叠。

Disjoint: 两个几何没有重叠交叉点,也没有共同的边。

Equal: 两个几何是相等的。

Inside:

sdo_Geometry1完全包含在sdo_Geometry2几何对象中,并且两个几何对象的边没有交叉。

On: sdo_Geometry1的边和内部的线完全在sdo_Geometry2上。

Overlapbdydisjoint: 两个几何对象交迭,但是边没有交叉。

Overlapbdyintersect: 两个几何对象交迭,并且边有部分交叉。

Touch: 两个几何对象有共同的边,但没有交叉。

SELECT ct.gwm_fid, ct.name

FROM i_exch_s ct, sales_regions comp

WHERE SDO_GEOM.RELATE(ct.gwm_geometry, 'INSIDE', comp.geom, 0.5) =

'INSIDE'

AND comp.gwm_fid = 50076218

ORDER BY ct.gwm_fid;

SELECT ct.gwm_fid, ct.name

FROM i_exch_s ct, sales_regions comp

WHERE SDO_GEOM.RELATE(ct.gwm_geometry, 'ANYINTERACT', comp.geom,

0.5) =

'INSIDE'

AND comp.gwm_fid = 50076218

ORDER BY ct.gwm_fid;

--RELATE函数补充SDO_RELATE操作符

SELECT sra.gwm_fid,

SDO_GEOM.RELATE(sra.geom, 'DETERMINE', srb.geom, 0.5)

relationship

FROM sales_regions srb, sales_regions sra

WHERE srb.gwm_fid = 50076218

AND sra.gwm_fid <> 50076218

AND SDO_RELATE(sra.geom,

srb.geom,

'mask=TOUCH+OVERLAPBDYDISJOINT+OVERLAPBDYINTERSECT') =

'TRUE'

ORDER BY sra.gwm_fid;

2、SDO_GEOM. WITHIN_DISTANCE

SDO_GEOM.WITHIN_DISTANCE(

geom1 IN SDO_GEOMETRY,

dim1 IN SDO_DIM_ARRAY,

dist IN NUMBER,

geom2 IN SDO_GEOMETRY,

dim2 IN SDO_DIM_ARRAY

[, units IN VARCHAR2]

) RETURN VARCHAR2;

or

SDO_GEOM.WITHIN_DISTANCE(

geom1 IN SDO_GEOMETRY,

dist IN NUMBER,

geom2 IN SDO_GEOMETRY,

tol IN NUMBER

[, units IN VARCHAR2]

) RETURN VARCHAR2;

参数说明:

sdo_Geometry1,sdo_Geometry2为空间数据对应的几何对象。

Tolerance: 容许的精度范围;

Dist: 指定的距离;

Unit: 用于表示距离的单位,可能是Unit=M/

Unit=KM等长度单位,但必须是SDO_DIST_UNITS表中列举出来的单位之一。

SELECT SDO_GEOM.WITHIN_DISTANCE(c_b.shape,

m.diminfo,

1,

c_d.shape,

m.diminfo)

FROM cola_markets c_b, cola_markets c_d, user_sdo_geom_metadata

m

WHERE m.table_name = 'COLA_MARKETS'

AND m.column_name = 'SHAPE'

AND c_b.name = 'cola_b'

AND c_d.name = 'cola_d';

SELECT sdo_geom.within_distance(c.shape,50,d.shape,'0.5')

FROM cola_markets c,cola_markets d

WHERE c.name = 'cola_d' and d.name='cola_c';

3、sdo_Geom.SDO_BUFFER

SDO_BUFFER

(

geometry IN SDO_GEOMETRY,

distance IN NUMBER,

tolerance IN NUMBER

[, params IN VARCHAR2]

)

RETURNS an SDO_GEOMETRY

其中

geometry是一个参数,表示将被缓冲的SDO_GEOMETRY对象。

distance是一个参数,表示缓冲输入的几何体的数值距离。

tolerance是一个参数,表示容差。

params是一个可选的第四个参数,表示两个参数:unit=和arc_ tolerance=。

unit=参数表示距离的单位。你可以通过查阅MDSYS.SDO_DIST_UNITS表来获得单位的可能取值。

如果几何体是大地测量的(也就是说,如果几何体的SDO_SRID被赋值为大地测量SRID,如8307或者8625),那么

arc_tolerance=参数就是必须的。在大地测量的空间里,弧度是不允许的。然而,它们可以近似地用线

表示。弧线的容差参数表示弧线与它的近似线的最大距离。

注:弧线容差通常要大于几何体的容差。

在大地测量数据中,容差是以米为单位来指定的。而arc_tolerance总是使用parameter_string中指定的单位。

例子:

--创建表

CREATE TABLE sales_regions AS

SELECT gwm_fid,

SDO_GEOM.SDO_BUFFER(b.gwm_geometry,

0.25,

0.5,

'arc_tolerance=0.005') geom

FROM i_exch_s b where rownum<10;

由于i_exch_s表中的srid为null,所以arc_tolerance不能指定单位

--插元数据

INSERT INTO user_sdo_geom_metadata

SELECT 'SALES_REGIONS', 'GEOM', diminfo, srid

FROM user_sdo_geom_metadata

WHERE table_name = 'I_EXCH_S'

--建空间索引

CREATE INDEX sr_sidx ON sales_regions(geom) INDEXTYPE IS

mdsys.spatial_index;

4、sdo_Geom.SDO_DISTANCE

SDO_DISTANCE函数的语法如下:

SDO_DISTANCE

(

geometry1 IN SDO_GEOMETRY,

geometry2 IN SDO_GEOMETRY,

tolerance IN NUMBER

[, params IN VARCHAR2]

)

RETURNS a NUMBER

其中

geometry1和geometry2是起始的两个参数,它们表示SDO_GEOMETRY对象。

tolerance表示数据集的容差。对于大地测量的数据,它们通常是0.5或者0.1(0.5米或者是0.1米)。对于非大地测量的数据,它将被设置为合适的值,来避免四舍五入引起的错误。

params是可选的第四个参数,是形如'unit='的字符串。这个参数指定了返回距离的单位。可以通过查看MDSYS.SDO_DIST_UNITS表获得可能的单位值。

-- Return the distance between two geometries.

SELECT SDO_GEOM.SDO_DISTANCE(c_b.shape, 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';

SELECT ct.gwm_fid, ct.name

FROM i_exch_s comp, l_interest_s ct

WHERE comp.gwm_fid = 52065726

AND SDO_GEOM.SDO_DISTANCE(ct.gwm_geometry, comp.gwm_geometry, 0.5 )

< 50

ORDER BY ct.gwm_fid;

在SQL中使用带有SDO_WITHIN_DISTANCE空间操作符的SDO_DISTANCE函数

SELECT ct.gwm_fid,

ct.name,

SDO_GEOM.SDO_DISTANCE(ct.gwm_geometry,

comp.gwm_geometry,

0.5 ) distance

FROM i_exch_s comp, l_interest_s ct

WHERE comp.gw

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SDO_GEOM.SDO_BUFFER函数Oracle Spatial中用于生成空间缓冲区的函数。它可以将输入几何对象沿着其边界放大或缩小指定距离,从而生成缓冲区。缓冲区可以是圆形、多边形或多线段。 函数语法如下: ``` SDO_GEOM.SDO_BUFFER( geometry IN SDO_GEOMETRY, distance IN NUMBER, tolerance IN NUMBER DEFAULT NULL, params IN VARCHAR2 DEFAULT NULL) RETURN SDO_GEOMETRY; ``` 参数说明: - geometry:输入的几何对象。可以是点、线、多边形等任何几何对象。 - distance:缓冲区距离。单位由params参数指定,默认为米。 - tolerance:缓冲区距离的精度。默认为NULL,表示使用默认精度。 - params:缓冲区距离的单位和其他参数。默认为NULL,表示使用默认参数。可以设置为'unit=KM'表示单位为千米,或者其他参数。 函数返回值为生成的缓冲区几何对象。 以下是一个示例代码,展示如何使用SDO_GEOM.SDO_BUFFER函数生成圆形缓冲区: ``` SELECT SDO_GEOM.SDO_BUFFER( SDO_GEOMETRY(2001, 8307, SDO_POINT_TYPE(-117.0, 34.0, NULL), NULL, NULL), 10, 0.005, 'unit=KM') as buffer FROM dual; ``` 在这个示例中,输入几何对象是一个点,经度为-117,纬度为34。缓冲区的距离为10公里,精度为0.005公里。最后一个参数指定缓冲区距离的单位为千米。 执行这个查询后,会返回一个包含缓冲区几何对象的结果集。你可以将结果集中的几何对象保存到Oracle表中,然后使用Oracle Spatial的其他功能进行空间分析

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值