2017-12-08 1 views
0

의 정보를 표시합니다. Oracle의 공간 데이터베이스로 작업하고 있지만 약간의 문제가 있습니다. 숫자를 반환하는 SDO_GEOM.SDO_LENGTH과 같은 기하학적 서브 프로그램을 사용하는 일부 절차를 수행하고 있지만 SDO_GEOM.CENTROID과 같은 기하학적 서브 프로그램을 사용할 때는 SDO_OBJECT을 반환하기 때문에 정보를 표시하는 방법을 모르겠습니다.SDO_GEOMETRY (CENTROID)

저는 Spatial Oracle 서브 프로그램을 처음 사용했습니다. 귀하의 도움에 감사드립니다. 내가 잘못 무엇

PROCEDURE centroId(pnombre IN VARCHAR2) IS 
    geomEntrada SDO_GEOMETRY; 
    dist VARCHAR2(100); 
    tupla caceres%ROWTYPE; 
    dim SDO_DIM_ARRAY; 
    -- Cursor para recuperar los barrios 
    CURSOR cursor_barrio IS 
     SELECT * 
     FROM caceres 
     WHERE tipo = 'Barrio'; 

    BEGIN 

    -- Recuperar la geometria del parametro de entrada 
    SELECT Geom INTO geomEntrada 
    FROM Caceres 
    WHERE Nombre = pnombre; 

    -- Obtener dim 
    SELECT DIMINFO INTO dim 
    FROM USER_SDO_GEOM_METADATA 
    WHERE table_name='CACERES'; --Ojo, CACERES en mayúsculas 

    -- Recorrer todos los barrios 
    OPEN cursor_barrio; 
    LOOP 
     FETCH cursor_barrio INTO tupla; 
     EXIT WHEN cursor_barrio%NOTFOUND; 

     --SDO_GEOM.SDO_LENGTH 
     dist := SDO_GEOM.SDO_CENTROID(geomEntrada,dim); 
    END LOOP; 
    DBMS_OUTPUT.PUT_LINE(pnombre||' have this center: ' || dist); 

    END centroId; 

:

이 내가 일하고 있어요 코드는?
정보를 표시하려면 어떻게해야합니까? st_asText를 사용할 수 있습니까?

답변

0

SDO GEOMETRY는 실제로 복잡한 주제입니다. 오라클과 함께 많은 일을한다면 Oracle의 "Spatial User 's Guide and Reference"(오라클 버전 용)에 대한 독서를 진지하게 제안합니다.

대상 정보를 지정하지 않고 개체에서 정보를 가져 오는 방법을 묻는 메시지가 표시됩니다. 제시된 논리를 수락하고 필요한 데이터를 수집한다고 가정합니다. 이는 dist 정의 및/또는 할당을 제외한 것입니다. SDO_GEOM.SDO_CENTROID 함수는 sring이 아니라 SDO_GEOMETRY를 반환합니다. 그리고 그 안에 또 다른 객체 인 SDO_POINT_TYPE 그 자체가 3 개의 숫자로 구성됩니다. (x, y, z)이다. 지형 또는 지형 공간 데이터는 경도, 위도, 고도에 해당합니다.

이 값에 액세스하는 데 특별한 것은 없으며 표준 도트 (.) 표기법을 사용하십시오. 그래서 여기 :

declare 
    dest sdo_geometry; 
    . 
    . 
    . 
    dest := sdo_geom.sdo_centroid(geomEntrada,dim); 
    dbms_output.put_line(pnombre||' have this center: ' 
        || "longitude=' || to_char(l_centroid.sdo_point.x) 
        || " latitude=' || to_char(l_centroid.sdo_point.y) 
        ); 

SDO 유형의 정보에 액세스하는 것은 다른 오라클 객체에서 정보에 액세스 다르지 않습니다 : (.) ​​당신이 정의를 알고 각 수준에있는 점 표기법을 사용해야합니다.

BTW : 위의 참조 설명서에는 이러한 정의가 포함되어 있습니다.

CREATE TYPE sdo_geometry AS OBJECT (
SDO_GTYPE NUMBER, 
SDO_SRID NUMBER, 
SDO_POINT SDO_POINT_TYPE, 
SDO_ELEM_INFO MDSYS.SDO_ELEM_INFO_ARRAY, 
SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY); 

CREATE TYPE sdo_point_type AS OBJECT (
    X NUMBER, 
    Y NUMBER, 
    Z NUMBER); 
관련 문제