2010년 2월 10일 수요일

[Tips]ArcSDE Shape Verification Rules

아래 문서는 ArcSDE Developer Help의 Shape Verification Rules을 정리한 문서입니다.
이 문서에는 Point, MultiPoint, Polyline, Polygon 등의 Topology 일관성에 관한 검증 규칙(Verification Rules)이 어떻게 적용되어야 하는지를 설명하고 있습니다.

ArcObjects Geometry API 중 ITopologicalOperator 인터페이스와도 관련이 있으니 함께 참조하시기 바랍니다.

The verification rules for point shapes
    * 포인트의 면적과 길이는 0.0으로 설정
    * 단일 포인트의 Envelope은 포인트의 X, Y값으로 설정
    * Multipart 포인트 shape의 envelope은 minimum bounding box로 설정
    * Sample Code - MultiPoint

코드보기..

Verification rules for simple lines or linestring shapes
    * 연속 중복점(Sequential duplicate points)은 제거
    * 라인을 구성하는 각 part는 최소 고유한 두개 이상의 포인트로 구성되어야 함
    * 각
part는 교차(intersect itself)하지 않음. 시작점과 끝점은 동일할 수 있으나 결과로 생기는 ring은 area shape으로 취급되지는 않음
    * 라인을 구성하는 각각의 part는 끝점에서 touch될 수 있음
    * 라인의 길이는 라인을 구성하는 모든
part의 합계임.

Verification rules for lines or spaghetti shapes
    * 라인을 구성하는 개별 라인들은 서로 교차(intersect themselves)할 수 있음
    * 라인을 구성하는 각 part는 최소 고유한 두개 이상의 포인트로 구성되어야 함
    * 연속 중복점(Sequential duplicate points)은 제거
    * 라인의 길이는 라인을 구성하는 모든 part의 합계임.

Verification rules and operations on area shapes
    * 연속 중복점(Sequential duplicate points)은 제거
    * Dangle은 삭제됨
    * 라인 segment의 폐합을 검증(시작점과 끝점의 z-coordinates 역시 동일해야 함)하고
segment간 cross되어서는 안됨
    * Hole이 있는 area shape에서 hole은 outer boundary 내에  완전히 포함되어야 함.  ArcSDE는 outer boundary 밖에 있는 hole은 삭제함.
    *
Outer boundary와 단일 포인트를 공유하면서 touch되는 hole은 좌표 순서를 반대로 함
    * 특정 포인트에서 touch하는 여러 holes(multiple holes)은 단일 hole로 combine된다.
    *
Multipart area shape은 overlap되어서는 안된다. 그러나 두 part간에는 단일 포인트에서 touch될 수 있다.
    *
Multipart area shape은 common boundary를 공유해서는 안되며, common boundary는 dissolve된다.
    * 만약 2개의 ring이 common boundary를 공유하면 하나의 ring으로 merge된다.
    * 도넛 폴리곤에서의 모든 hole의 boundary를 포함한 모든 geometry의 둘레를 계산하고, geometry의 길이로 둘레를 저장한다.
    * 면적을 계산한다.
    * Envelope을 계산한다.
    *
ArcSDE가 시계방향(clockwise)으로 구성된 좌표리스트를 반환하지만, 저장할 때는 반시계방향(counterclockwise)으로 저장한다. 만약 시계방향으로 좌표점이 구성된 area shape을 생성했을 때, ArcSDE 소프트웨어는 반시계방향을 구성하기 위해 좌표리스트의 방향을 바꾼다.

    * 위 그림에서 시작점은 a이고 올바른 좌표 저장 순서는 a,b,c,d,a.
    * Area shape은 역좌표순서를 가질 수 있는데 이는 area shape 내에 outer boundary와 touch되는 empty space가 있을 경우이다.

    * 반대방향의 좌표목록을 가진 area shape은 outer boundary와 touch되는 interior ring을 가진 경우이며, 이는 도넛 폴리곤으로 간주되지는 않는다.
    * Area shape이 도넛 hole을 가질 때, 우선 outer boundary의 좌표가 먼저 시작된다. hole의 좌표는 outer boundary의 반대방향으로 저장된다.
    * 아래 그림에서,  In the figure below, outer boundary는 a,b,c,d,a로, hole은
e,f,g,h,e로 구성된다. area shape의 좌표는 a,b,c,d,a,e,f,g,h,e 순서로 저장된다.

    * hole을 가진 area shape에서 outer boundary는 항상 먼저 시작되고, 이후 hole이 정의된다.
    * 만약 2개의 hole이 한 지점에서 touch되면 하나의 hole로 간주된다.

    * 위 그림에서 2개의 inner area는 g 좌표를 공유하기 때문에 단일 hole이다.
    * 아래 그림과 같이 Area shape과 hole을 가진 area shape의 조합은 complex shape이다.  Outer boundary는 섬을 가진 호수이고 섬 안에는 작은 호수가 있는 구조이다.

    * Area shape들이 중첩되어 있다.
    * 이 피쳐는 하나, 둘, 3개의 shape으로 표현하는 것이 가능하다. 즉, 피쳐를 각각 분리해서 저장할 수 있다. 가장 큰 호수는 도넛 폴리곤이다. 가장 큰 호수의 경계는 outer boundary이고, 섬은 단일 도넛 hole의 boundary가 된다. 섬 또한 도넛 폴리곤이다. 섬의 boundary는 outer boundary이고 작은 호수는 hole이다. 작은 호수는 단일 area shape이다.
    * 만약 호수가 가장 중요한 피쳐라면, 하나의 hole을 가진 첫번째 shape이 큰 호수를 나타내고, 두번째 shape은 작은 호수를 나타낸다. 또한
Multipart area shape을 사용하여 피쳐를 표현할 수 있다. 첫번째 shape part는 섬을 표현하는 도넛 hole을 가진 큰 호수이고, 두번째 part는 작은 호수이다.
    * Nil shape은
placeholder 역할만을 수행하며, geometry가 없는 속성정보만 가진 row를 정의할 수 있다. Nil shape의 예는 다음 그림과 같이 교차하지 않는 2개의 shape간에 intersection을 요청했을 경우의 결과로 설명할 수 있다.

    * 위 그림에서 A와 B는 touch 상태가 아니기 때문에 intersection query의 결과는 empty geometry를 반환한다.
    * Shape은
'dimensions'을 가진다. x, y coordinates만 가진 shape은 2-dimensional, z coordinates나 measure 값을 가진 shape은 3-dimensional shape이다.  shape은 또한 nil measure를 가질 수 있다.
    * ArcSDE는 각 shape 유형별 룰을 적용하여 유효한 shape만 내부적으로 관리한다. shape의 생성 및 갱신에 사용되는 모든 ArcSDE 명령어는 이 룰을 사용한다.

출처 : ArcSDE Developer Help - Shape Verification Rules