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

来源:互联网 发布:不用端口号访问服务器 编辑:程序博客网 时间:2024/06/05 04:23

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_geometryintogeom_segment FROM lrs_routes a

WHERE a.route_name ='Route1';

SELECT m.diminfointo 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_geometryINTOline_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 aSET a.route_geometry = geom_segment

WHERE a.route_id =1;

INSERTINTO lrs_routesVALUES(

11,

'result_geom_1',

result_geom_1

);

INSERTINTO lrs_routesVALUES(

12,

'result_geom_2',

result_geom_2

);

INSERTINTO lrs_routesVALUES(

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_geometryintogeom_segment FROM lrs_routes a WHERE a.route_name = 'Route1';

SELECT m.diminfointo dim_array from user_sdo_geom_metadata mWHEREm.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 aSET a.route_geometry = geom_segmentWHEREa.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_geometryintogeom_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 aSET 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_geometryintogeom_segment FROM lrs_routes a

WHERE a.route_name ='Route1';

SELECT m.diminfointo 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
原创粉丝点击