Oracle Spacial(空间数据库)sdo_lrs包函数

sdo_lrs包

Subprograms for Creating and Editing Geometric Segments

1、SDO_LRS.DEFINE_GEOM_SEGMENT(过程)

语法:

SDO_LRS.DEFINE_GEOM_SEGMENT(

geom_segment IN OUT SDO_GEOMETRY

[, start_measure IN NUMBER,

end_measure IN NUMBER]);

or

SDO_LRS.DEFINE_GEOM_SEGMENT(

geom_segment IN OUT SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY

[, start_measure IN NUMBER,

end_measure INNUMBER]);

 

 

    功能:根据起始点和终止点测量值计算出没有测量的点

例子:

-- Testthe LRS procedures.

DECLARE

geom_segmentSDO_GEOMETRY;

line_stringSDO_GEOMETRY;

dim_arraySDO_DIM_ARRAY;

result_geom_1SDO_GEOMETRY;

result_geom_2SDO_GEOMETRY;

result_geom_3SDO_GEOMETRY;

BEGIN

SELECT a.route_geometry intogeom_segment FROM lrs_routes a

WHERE a.route_name = 'Route1';

SELECT m.diminfo into dim_array from

user_sdo_geom_metadatam

WHERE m.table_name = 'LRS_ROUTES'AND m.column_name = 'ROUTE_GEOMETRY';

--Define the LRS segment for Route1. This will populate any null measures.

-- Noneed to specify start and end measures, because they are already defined in thegeometry.

SDO_LRS.DEFINE_GEOM_SEGMENT (geom_segment, dim_array);

SELECT a.route_geometry INTOline_string FROM lrs_routes a

WHERE a.route_name = 'Route1';

--Split Route1 into two segments.

SDO_LRS.SPLIT_GEOM_SEGMENT(line_string,dim_array,5,result_geom_1,result_geom_2);

--Concatenate the segments that were just split.

result_geom_3 := SDO_LRS.CONCATENATE_GEOM_SEGMENTS(result_geom_1,dim_array,

result_geom_2,dim_array);

--Update and insert geometries into table, to display later.

UPDATE lrs_routes a SET a.route_geometry = geom_segment

WHERE a.route_id = 1;

INSERTINTO lrs_routes VALUES(

11,

'result_geom_1',

result_geom_1

);

INSERTINTO lrs_routes VALUES(

12,

'result_geom_2',

result_geom_2

);

INSERTINTO lrs_routes VALUES(

13,

'result_geom_3',

result_geom_3

);

END;

 

2SDO_LRS.REDEFINE_GEOM_SEGMENT(过程)

语法:

SDO_LRS.REDEFINE_GEOM_SEGMENT(

geom_segment IN OUT SDO_GEOMETRY

[, start_measure IN NUMBER,

end_measure IN NUMBER]);

or

SDO_LRS.REDEFINE_GEOM_SEGMENT(

geom_segment IN OUT SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY

[, start_measure IN NUMBER,

end_measure INNUMBER]);

功能:重新定义几何体(可进行单位转换)

例子:

--Redefine geometric segment to "convert" miles to kilometers

DECLARE

geom_segmentSDO_GEOMETRY;

dim_arraySDO_DIM_ARRAY;

BEGIN

SELECT a.route_geometry intogeom_segment FROM lrs_routes a WHERE a.route_name = 'Route1';

SELECT m.diminfo into dim_array from user_sdo_geom_metadata m WHEREm.table_name = 'LRS_ROUTES'AND m.column_name = 'ROUTE_GEOMETRY';

--"Convert" mile measures to kilometers (27 * 1.609 = 43.443).

SDO_LRS.REDEFINE_GEOM_SEGMENT (geom_segment,

dim_array,

0, -- Zerostarting measure: LRS segment starts at start of route.

43.443); -- Endof LRS segment. 27 miles = 43.443 kilometers.

--Update and insert geometries into table, to display later.

UPDATE lrs_routes a SET a.route_geometry = geom_segment WHEREa.route_id = 1;

END;

 

3、SDO_LRS.CLIP_GEOM_SEGMENT

语法:

SDO_LRS.CLIP_GEOM_SEGMENT(

geom_segment IN SDO_GEOMETRY,

start_measure IN NUMBER,

end_measure IN NUMBER,

tolerance IN NUMBER DEFAULT 1.0e-8

) RETURN SDO_GEOMETRY;

or

SDO_LRS.CLIP_GEOM_SEGMENT(

geom_segment IN SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

start_measure IN NUMBER,

end_measure IN NUMBER

) RETURN SDO_GEOMETRY;

功能:截取指定的一段

例子:

-- Clipa piece of Route1.

SELECT SDO_LRS.CLIP_GEOM_SEGMENT(route_geometry, 5, 10) FROM lrs_routesWHERE route_id = 1;

 

4SDO_LRS.DYNAMIC_SEGMENT

语法:

SDO_LRS.DYNAMIC_SEGMENT(

geom_segment IN SDO_GEOMETRY,

start_measure IN NUMBER,

end_measure IN NUMBER,

tolerance IN NUMBER DEFAULT 1.0e-8

) RETURN SDO_GEOMETRY;

or

SDO_LRS.DYNAMIC_SEGMENT(

geom_segment IN SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

start_measure IN NUMBER,

end_measure IN NUMBER

) RETURNSDO_GEOMETRY;

用法与SDO_LRS.CLIP_GEOM_SEGMENT一样

5、SDO_LRS.CONCATENATE_GEOM_SEGMENTS

语法:

SDO_LRS.CONCATENATE_GEOM_SEGMENTS(

geom_segment_1 INSDO_GEOMETRY,

geom_segment_2 INSDO_GEOMETRY,

tolerance IN NUMBER DEFAULT 1.0e-8

) RETURN SDO_GEOMETRY;

or

SDO_LRS.CONCATENATE_GEOM_SEGMENTS(

geom_segment_1 INSDO_GEOMETRY,

dim_array_1 INSDO_DIM_ARRAY,

geom_segment_2 INSDO_GEOMETRY,

dim_array_2 INSDO_DIM_ARRAY

) RETURNSDO_GEOMETRY;

功能:连接线串,例子见1

6、SDO_LRS.OFFSET_GEOM_SEGMENT

语法:

SDO_LRS.OFFSET_GEOM_SEGMENT(

geom_segment IN SDO_GEOMETRY,

start_measure IN NUMBER,

end_measure IN NUMBER,

offset IN NUMBER,

tolerance IN NUMBER DEFAULT 1.0e-8

[, unit IN VARCHAR2]

) RETURN SDO_GEOMETRY;

or

SDO_LRS.OFFSET_GEOM_SEGMENT(

geom_segment IN SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

start_measure IN NUMBER,

end_measure IN NUMBER,

offset IN NUMBER

[, unit IN VARCHAR2]

) RETURNSDO_GEOMETRY;

功能:指定的线段内进行偏移

例子:

SELECT SDO_LRS.OFFSET_GEOM_SEGMENT(a.route_geometry, m.diminfo,5, 10, 2)

  FROM lrs_routes a, user_sdo_geom_metadata m

 WHERE m.table_name = 'LRS_ROUTES'

   AND m.column_name = 'ROUTE_GEOMETRY'

   AND a.route_id = 1;

7SDO_LRS.SPLIT_GEOM_SEGMENT(过程)

语法:

SDO_LRS.SPLIT_GEOM_SEGMENT(

geom_segment IN SDO_GEOMETRY,

split_measure IN NUMBER,

segment_1 OUT SDO_GEOMETRY,

segment_2 OUT SDO_GEOMETRY);

or

SDO_LRS.SPLIT_GEOM_SEGMENT(

geom_segment IN SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

split_measure IN NUMBER,

segment_1 OUT SDO_GEOMETRY,

segment_2 OUT SDO_GEOMETRY);

功能:将一个几何体分为两个

例子见1

8、SDO_LRS.RESET_MEASURE(过程)

语法:

SDO_LRS.RESET_MEASURE(

geom_segment IN OUT SDO_GEOMETRY

[, dim_array INSDO_DIM_ARRAY]);

功能:将起始点到终止点的测量值都清空

例子:

--Reset geometric segment measures.

DECLARE

geom_segmentSDO_GEOMETRY;

BEGIN

SELECT a.route_geometry intogeom_segment FROM lrs_routes a

WHERE a.route_name = 'Route1';

SDO_LRS.RESET_MEASURE(geom_segment);

--Update and insert geometries into table, to display later.

UPDATE lrs_routes a SET a.route_geometry = geom_segment

WHERE a.route_id = 1;

END;

9、SDO_LRS.SET_PT_MEASURE

语法:

SDO_LRS.SET_PT_MEASURE(

geom_segment IN OUT SDO_GEOMETRY,

point IN SDO_GEOMETRY,

measure IN NUMBER) RETURN VARCHAR2;

or

SDO_LRS.SET_PT_MEASURE(

geom_segment IN OUT SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

point IN SDO_GEOMETRY,

pt_dim_array IN SDO_DIM_ARRAY,

measure IN NUMBER) RETURN VARCHAR2;

or

SDO_LRS.SET_PT_MEASURE(

point IN OUT SDO_GEOMETRY,

measure IN NUMBER) RETURN VARCHAR2;

or

SDO_LRS.SET_PT_MEASURE(

point IN OUT SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

measure IN NUMBER) RETURN VARCHAR2;

功能:将测量值设为一个特定的点

-- Setthe measure value of point 8,10 to 20 (originally 22).

DECLARE

geom_segmentSDO_GEOMETRY;

dim_arraySDO_DIM_ARRAY;

resultVARCHAR2(32);

BEGIN

SELECT a.route_geometry intogeom_segment FROM lrs_routes a

WHERE a.route_name = 'Route1';

SELECT m.diminfo into dim_array from

user_sdo_geom_metadatam

WHERE m.table_name = 'LRS_ROUTES'AND m.column_name = 'ROUTE_GEOMETRY';

-- Setthe measure value of point 8,10 to 20 (originally 22).

result := SDO_LRS.SET_PT_MEASURE (geom_segment,

SDO_GEOMETRY(3301, NULL, NULL,

             SDO_ELEM_INFO_ARRAY(1, 1, 1),

             SDO_ORDINATE_ARRAY(8, 10, 22)),

20);

--Display the result.

DBMS_OUTPUT.PUT_LINE('Returned value = ' || result);

END;

10SDO_LRS.REVERSE_MEASURE

11、SDO_LRS.TRANSLATE_MEASURE

12、SDO_LRS.REVERSE_GEOMETRY

外环应是逆时针的,内环应是顺时针的。若不对可用该函数进行修正。

SELECT SDO_LRS.REVERSE_GEOMETRY(a.gwm_geometry, m.diminfo)

  FROM p_street_area a, user_sdo_geom_metadata m

 WHERE m.table_name = 'P_STREET_AREA'

   AND m.column_name = 'GWM_GEOMETRY'

   AND a.id = 8;

13、SDO_LRS.VALID_GEOM_SEGMENT

14、SDO_LRS.VALID_LRS_PT

15、SDO_LRS.VALID_MEASURE 

16、SDO_LRS.CONNECTED_GEOM_SEGMENTS

17、SDO_LRS.GEOM_SEGMENT_LENGTH 

18、SDO_LRS.GEOM_SEGMENT_START_PT

19、SDO_LRS.GEOM_SEGMENT_END_PT

20、SDO_LRS.GEOM_SEGMENT_START_MEASURE

21、SDO_LRS.GEOM_SEGMENT_END_MEASURE

22、SDO_LRS.GET_MEASURE 

23、SDO_LRS.GET_NEXT_SHAPE_PT

24、SDO_LRS.GET_NEXT_SHAPE_PT_MEASURE

25、SDO_LRS.GET_PREV_SHAPE_PT 

26、SDO_LRS.GET_PREV_SHAPE_PT_MEASURE

27、SDO_LRS.IS_GEOM_SEGMENT_DEFINED

28、SDO_LRS.IS_MEASURE_DECREASING

29、SDO_LRS.IS_MEASURE_INCREASING

30、SDO_LRS.IS_SHAPE_PT_MEASURE

31、SDO_LRS.MEASURE_RANGE

32、SDO_LRS.MEASURE_TO_PERCENTAGE

33、SDO_LRS.PERCENTAGE_TO_MEASURE

34、SDO_LRS.LOCATE_PT

35、SDO_LRS.PROJECT_PT

36、SDO_LRS.FIND_LRS_DIM_POS

37、SDO_LRS.FIND_MEASURE

38、SDO_LRS.FIND_OFFSET

39、SDO_LRS.VALIDATE_LRS_GEOMETRY

Subprograms for Converting Geometric Segments

40、SDO_LRS.CONVERT_TO_LRS_DIM_ARRAY

41、SDO_LRS.CONVERT_TO_LRS_GEOM

42、SDO_LRS.CONVERT_TO_LRS_LAYER

43、SDO_LRS.CONVERT_TO_STD_DIM_ARRAY

44、SDO_LRS.CONVERT_TO_STD_GEOM

45、SDO_LRS.CONVERT_TO_STD_LAYER
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值