일반적인 GIS에서 다각형 정점의 순서 : 시계 방향 또는 시계 반대 방향


23

이틀 전에 ESRI shapefile에서 다각형의 꼭짓점에 대한 내부 저장 순서에 대해 질문했습니다. 이 질문에 답했습니다 ( 다각형이 셰이프 파일에 시계 방향 또는 시계 반대 방향으로 저장됩니까? ). 그리고 오래된 게시물에서도 응답되었습니다 ( 다각형 생성 (시계 방향 회전 여부) )

그러나 지금 내 질문은 더 일반적이며, 고유 한 대답이 있는지 모르겠습니다. 시계 방향의 순서는 ESRI shapefile 또는 일반적인 GIS 형식에만 해당됩니까? 그리고 GIS 소프트웨어의 내부 표현은 어떻습니까? 예를 들어, QGIS를 사용하고 다각형을 포함하는 * .shp를 읽는 경우 외부 경계의 내부 표현이 원래 모양 파일에서와 같이 시계 방향이라고 가정하지만 QGIS에서 지원하는 모든 파일 형식은 어떻습니까? 그리고 ArcGIS를 위해? 그리고 시계 반대 방향으로 저장된 다각형이있는 파일 형식이있는 경우, 이러한 파일이 QGIS, ArcGIS 등에로드되면 방향이 내부적으로 변경되므로 PyQGIS를 사용하여 데이터를 읽는 경우 예를 들어 다각형은 시계 방향입니다 주문?

저의 목적은 QGIS 용 플러그인을 작성하는 것이지만 데이터 소스는 ESRI shapefile 또는 기타 형식 일 수 있습니다. 방위각을 사용하여 다각형의 연속 측면 사이의 각도를 확인해야하므로 순서가 시계 방향인지 알아야합니다. 하나의 해결책은 각 다각형의 면적을 계산하는 것입니다. 정확히 기억한다면 순서가 양수이면 시계 방향이고, 음수이면 순서는 시계 반대 방향입니다.

영역 계산은 집중적 인 작업이 아니므로 플러그인 속도가 크게 느려지지 않습니다. 그러나 QGIS의 특별한 경우, 원본 소스의 순서에 관계없이 다각형을 시계 방향 또는 시계 반대 방향으로 저장하는지 아는 사람이 있습니까? 이제 ESRI shapefile을 사용하고 있으며 layer.getFeatures (). geometry (). asPolygon ()의 좌표는 바깥 쪽 경계에 대해 시계 방향으로, 구멍에 대해 반 시계 방향으로 저장됩니다 (예 : 원래 * .shp).


데이터 저장 방법에 따라 다릅니다. 오라클은 시계 반대 방향으로 gis.stackexchange.com/questions/20817/…
Mapperz

@Mapperz에 귀하의 링크 리드 docs.oracle.com/cd/B10501_01/appdev.920/a96630/... 명확하게 명시 Polygons are oriented correctly. (Exterior ring boundaries must be oriented counterclockwise, and interior ring boundaries must be oriented clockwise.)오라클은 반 시계는 의미입니다.
user30184

답변:


27

[여기] ( http://www.opengeospatial.org/standards/sfs ) 에서 다운로드 할 수있는 OGC 사양에서 다음과 같이 명시되어 있습니다 .

"다각형 회전은이 표준에 의해 정의되지 않습니다. 실제 다각형 회전은 시계 방향 또는 시계 반대 방향 일 수 있습니다."

에서 오라클 문서 , 명확 외부 링 경계, 시계 방향으로 반 시계 방향을 지향하고, 내부 링 경계하는 것을 주장한다. 마찬가지로 SQL Server Spatial에서 geography 데이터 유형은 외부 링과 시계 방향으로 반 시계 방향 규칙을 따릅니다 . 자세한 내용 은이 MicroSoft 블로그 를 참조하십시오. Postgis는 형상에 대해 어느 쪽이든 허용하는 것으로 보이며 다각형의 형상이 오른쪽 또는 왼쪽 규칙을 따르도록하는 기능을 가지고 있습니다 ( ST_ForceRHRForceLHR 참조) . JTS / Geos는 오른쪽 규칙, 즉 외부 링의 시계 방향을 따르는 것으로 보이므로 실제로는 불분명합니다.

일반적으로 지리 데이터 유형이 방향을 강제하는 것이 의미가 있습니다. 평면 표면에 형상 데이터 유형을 사용하면 외부 링과 내부 링이 순서대로 따라 가기 때문에 이러한 혼동이 발생할 수 없으며 단일 링만있는 경우 지구와 달리 (방향에 상관없이) 둘러싸입니다. 둥글게됩니다.


@mxfh에 의해 코멘트에서 :에서 OGC의 OpenGIS의 간단한이 액세스 (ISO 19125-1)을 특징 버전 1.2.1 문서로 외륜을위한 시계 반대 방향으로 방향을 지정 [OGC 06-103r4] 6.1.11.1/page 26 opengeospatial.org / standards / sfa. 이 변경 사항은 2006 년 최신 버전 1.1.0과 1.2.0 사이에서 도입되었습니다. 인용 한 각주가 2005 년 이후 업데이트되지 않았습니다


좋은 답변 존. 내부 및 외부 링을 식별하기 위해 노드 순서를 사용하는 것이 벡터 데이터 형식이 그렇게 할 수있는 유일한 방법인지 확실하지 않습니다. 몇 가지 메커니즘이 필요하지만 동의합니다. 예를 들어 GeoJSON을 사용하면 첫 번째 노드 목록이 외부로 지정되고 모든 후속 목록은 내부 구멍입니다. 그것은 (더 이상은 아니지만) 효과적으로 작동합니다.
WhiteboxDev

예, 기하학에도 WKT가 적용됩니다. 지역의 경우 더 중요합니다.
John Powell

정말 사실입니다.)
WhiteboxDev

@WhiteboxDev 중첩 링의 권선 순서가 번갈아 나타나는 이유는 신발 끈 방법으로 면적을 계산하면 링 방향에 따라 부호있는 면적을 계산하기 때문입니다. 일반적으로 1 차 중첩 링은 구멍으로 간주되며 외부 링의 교대 방향을 갖습니다. 기여 영역 값이 음수입니다. 외부 고리가 양성인 경우; 짝수의 중첩 된 고리도 마찬가지입니다. 따라서 모든 링 피처의 총 면적은 서명 된 모든 면적의 합입니다.
mxfh

1
@mxfh : 엄밀히 말하면, "네스트 링의 와인딩 순서"는 OCG (및 다른 많은) 폴리곤에 대한 전리품입니다. 다른 구멍의 "구멍"안에 중첩 된 다각형을 나타내는 방법은 MultiPolygon을 사용하는 것입니다.이 경우 각 구성 다각형은 원래 굴곡 규칙을 따릅니다. OK, OK : 이것이 동등 은 "중첩 된 선형 링"의 감기 ...하지만 그냥 다각형이 아니라고 지적 교류에 -이 수, 오히려 다중의 정의 - 자체.
Dan H

23

경계는 방향을 따라 경계의 왼쪽과 오른쪽의 두 영역을 정의하므로 유한 표면을 덮는 지리적 좌표 시스템의 모호성을 방지하기 위해 링 (경계) 방향이 필요합니다. 이 두 영역 중 어느 영역이 더 큰지를 결정하는 것은 가능하지만 여전히 모호성을 남깁니다.

다음은 사양에 따라 다양한 형식의 다각형의 외부 링 방향에 대한 개요입니다.

셰이프 파일의 감기 순서 및 간단한 기능 그림

  • 단순 기능 액세스 (ISO 19125-1)는 WKT / GML / KML 및 다양한 SQL 구현에도 사용됩니다.

    • 외부 링 : 시계 반대 방향
    • 내부 링 (구멍) : 시계 방향.

    다각형은 1 개의 외부 경계와 0 개 이상의 내부 경계로 정의 된 평면형 표면입니다. 각 내부 경계는 다각형의 구멍을 정의합니다. [...]

    외부 경계 LinearRing은 외부 경계가 시계 반대 방향 으로 경계를 가로 지르는 것처럼 보이는 표면의 측면 인 표면의 "상단"을 정의합니다 . 내부 선형 링은 반대 방향을 가지고 있고,로 표시됩니다 시계 방향 은 "최고"...에서 볼 때 간단한 기능 액세스 사양

    대부분의 구현에서 POLYGON의 링 순서는 중요합니다 (셰이프 파일과 반대)

    구멍이있는 다각형의 경우 첫 번째 하위 요소는 외부 링이고 두 번째 하위 요소는 첫 번째 내부 링, 세 번째 하위 요소는 두 번째 내부 링 등입니다. 오라클 공간

    내부 링보다 하나의 외부 경계와 더 깊은 중첩이 존재할 수 있기 때문에 더 깊은 중첩, 일명 아일랜드 , 아일랜드 등은 다중 다각형으로 표시해야합니다 ( 그림 2.10 (4) 참조 ). 정의되지 않았습니다.

  • ESRI Shapefiles / SHP :

    • 외부 링 : 시계 방향
    • 내부 링 : 시계 반대 방향

    다각형은 하나 이상의 고리로 구성됩니다. 링은 닫힌 자체 교차 루프를 형성하는 4 개 이상의 포인트로 연결된 시퀀스입니다. 다각형은 여러 개의 외부 링을 포함 수 있습니다 . 링의 정점 또는 방향은 링의 어느 쪽이 다각형의 내부인지 나타냅니다. 정점 순서로 링을 따라 걷는 관찰자의 오른쪽 근처는 다각형 내부입니다. 다각형에 구멍 을 정의하는 링의 꼭지점은 시계 반대 방향입니다. 따라서 단일 링 다각형의 정점은 항상 시계 방향 입니다. [...]

    포인트 배열의 링 순서는 중요하지 않습니다. ESRI 백서

    다수의 외부 경계가 허용되기 때문에이 폴리곤 정의를 사용하여 아일랜드 섬에 구성이 가능합니다. 위상 적으로 호수의 섬은 또 다른 시계 방향의 외곽 고리 일 것입니다. 효과적으로 이것은 ESRI Shapefile Polygon을 단순한 기능 MultiPolygon으로 만듭니다

    점을 올바르게 주문하지 않으면 겹치는 다각형이 생깁니다. 파이스

  • GeoJSON (RFC7946) :

    참고 : 원래 GeoJSON 2008 사양 에는 와인딩 순서가 적용되지 않았습니다.

    • 와인딩 순서 : 외부 링은 시계 반대 방향 (오른손 규칙)
    • 내부 링은 시계 방향입니다
    • 링 순서가 중요합니다.

      여러 개의 링이있는 다각형의 경우 첫 번째 링은 외부 링이어야하고 다른 링은 내부 링 또는 구멍이어야합니다. GeoJSON 사양

  • TopoJSON : 기본적으로 외부 링을 시계 방향으로 강제

셰이프 파일의 감기 순서 및 간단한 기능 그림

소풍:

중첩 된 링의 권선 순서가 번갈아 나타나는 수학적 추론은 신발 끈 공식 을 사용하여 면적을 계산하면 ( 시각적 설명 ) 링 방향에 따라 부호있는 면적을 계산한다는 것입니다.

일반적으로 내포 된 링 (내부 경계)은 구멍으로 간주되며 외부 링의 교대 방향을 갖습니다. 기여하는 서명 된 영역 값은 음수입니다. 외륜이 양의 위치에 있습니다. 모든 링 피처의 총 면적은 서명 된 모든 면적의 합입니다.

ESRI에서 구현 한이 기술 자료 항목을 참조하십시오 . 다각형 영역을 결정하기 위해 ArcGIS에서 어떤 알고리즘을 사용합니까?

제안 된 니모닉

화살표로 해석되는 레터 폼의 열린 끝 :

  • S 파일 : S → ᔑ → ↻
  • 간단한 F 전자 atur 전자 의 : 전자 → ᘓ → (바깥쪽으로 CC-현명한 권선) ↺
  • GeoJSON : G (G의 줄기는 화살표) → ↺

4

각 벡터 파일 형식이 다르고 각 GIS가 내부적으로 이러한 데이터를 처리하는 방식이 다르기 때문에 누구나 귀하의 질문에 대한 명확한 답변을 제공 할 수 있음을 모르겠습니다. 그러나 시계 방향의 순서는 ESRI Shapefile에만 해당되는 것이 아니라고 말할 수 있습니다. 외부 링의 경우 시계 방향 순서와 내부 구멍 다각형의 경우 시계 반대 방향으로 비슷한 형식을 사용하는 다른 형식이 있습니다. 예를 들어, JTS 벡터 다각형 구조는 유사한 형식을 사용합니다. 사실,이 적혀있다 여기에 역사적으로이 것은 ESRI의 접근 방식과 유사하게했다. 또한 모든 형식에이 요구 사항이있는 것은 아닙니다. 예를 들어 GeoJSON 형식 사양다각형 형식의 꼭짓점 순서에 대한 요구 사항은 없습니다. KML 사양은 실제로 주 :

for 다각형은 시계 반대 방향으로 지정해야합니다. 다각형은 "오른손 규칙"을 따릅니다. 즉, 오른손의 손가락을 좌표가 지정된 방향으로 놓으면 엄지 손가락이 다각형에 대한 기하 법선의 일반 방향을 가리 킵니다.

따라서 모든 옵션이 존재하며 거기서 구현됩니다. 야생의 세계입니다!


1
KML의 "오른손 규칙"은 일반적으로 "왼손 규칙"이라고합니다 (팔을 뻗은 상태에서 둘레를 걸을 때 왼손은 그림 안에 있음). 모양 파일은 오른손 규칙을 사용하는 유일한 형식이기 때문에 Esri는 여러 가지 접근 방식을 가지고 있습니다 (기업 지오 데이터베이스는 왼쪽 규칙을 내부적으로 사용하지만 'C'API를 사용하면 두 가지 순서로 요청할 수 있습니다). GML은 내부 링이 외부 링과 반대 순서이며 첫 번째 링은 외부 여야합니다.
Vince

@Vince 나는 그것을 몰랐다. 그거 견과류 아니야? 알려 줘서 고마워. 나는 GML의 접근 방식이 가장 좋다고 생각한다. 반대되는 한 순서는 중요하지 않습니다. 그것은 많은 의미가 있습니다.
WhiteboxDev
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.