Thứ tự các đỉnh đa giác trong GIS nói chung: theo chiều kim đồng hồ hoặc ngược chiều kim đồng hồ


23

Hai ngày trước tôi đã hỏi một câu hỏi về thứ tự lưu trữ nội bộ cho các đỉnh của một đa giác trong các hình dạng ESRI. Câu hỏi đó đã được trả lời ( Các đa giác được lưu trữ theo chiều kim đồng hồ hay ngược chiều kim đồng hồ trong một shapefile? ) Và nó cũng đã được trả lời trong một bài cũ ( Tạo đa giác (Xoay theo chiều kim đồng hồ hay không) )

Nhưng bây giờ câu hỏi của tôi đã chung chung hơn và tôi không biết nó có câu trả lời duy nhất không. Là thứ tự theo chiều kim đồng hồ chỉ dành cho các shapefile ESRI hoặc cho các định dạng GIS chung? Và những gì về đại diện nội bộ cho một phần mềm GIS? Ví dụ: nếu tôi sử dụng QGIS và tôi đọc một * .shp chứa đa giác, tôi cho rằng biểu diễn bên trong của giới hạn ngoài theo chiều kim đồng hồ như trong shapefile ban đầu, nhưng đối với tất cả các định dạng tệp được hỗ trợ bởi QGIS thì sao? Và đối với ArcGIS? Và trong trường hợp tồn tại một định dạng tệp có đa giác được lưu trữ ngược chiều kim đồng hồ, nếu các tệp này được tải trong QGIS, ArcGIS, v.v., là hướng thay đổi bên trong, vì vậy, nếu tôi đọc dữ liệu bằng PyQGIS, ví dụ, đa giác theo chiều kim đồng hồ Ra lệnh?

Mục đích của tôi là viết một plugin cho QGIS, nhưng nguồn dữ liệu có thể là các tệp định dạng ESRI hoặc các định dạng khác. Vì tôi cần kiểm tra các góc giữa các đa giác liên tiếp bằng các góc phương vị của chúng, tôi cần biết nếu thứ tự là theo chiều kim đồng hồ. Một giải pháp là tính toán diện tích của mỗi đa giác và, nếu tôi nhớ chính xác, nếu nó dương thì thứ tự là theo chiều kim đồng hồ và nếu âm thì thứ tự ngược chiều kim đồng hồ.

Tính toán khu vực không phải là một nhiệm vụ chuyên sâu, vì vậy nó sẽ không làm chậm plugin của tôi rất nhiều. Nhưng trong trường hợp đặc biệt của QGIS, có ai biết nếu nó lưu trữ các đa giác theo chiều kim đồng hồ hoặc ngược chiều kim đồng hồ, bất kể thứ tự trong nguồn ban đầu không? Đến bây giờ tôi đang làm việc với các shapefile ESRI và tọa độ trong layer.getFeatures (). Hình học (). AsPolygon () được lưu trữ theo chiều kim đồng hồ cho đường viền bên ngoài và ngược chiều kim đồng hồ cho các lỗ, tức là như trong * .shp ban đầu.


Nó phụ thuộc vào cách dữ liệu được lưu trữ. Oracle là Anti-Clockwise gis.stackexchange.com/questions/20817/...
Mapperz

@Mapperz, liên kết của bạn dẫn đến docs.oracle.com/cd/B10501_01/appdev.920/a96630/ , trong đó nêu rõ Polygons are oriented correctly. (Exterior ring boundaries must be oriented counterclockwise, and interior ring boundaries must be oriented clockwise.)điều đó có nghĩa là Oracle ngược chiều kim đồng hồ.
dùng49584

Câu trả lời:


27

Trong đặc tả OGC, có thể tải xuống [tại đây], ( http://www.opengeospatial.org/stiterias/sfs ) họ nêu:

"Xoay đa giác không được xác định theo tiêu chuẩn này; xoay đa giác thực tế có thể theo hướng ngược chiều kim đồng hồ hoặc ngược chiều kim đồng hồ."

Trong các tài liệu của Oracle , có tuyên bố rõ ràng rằng các ranh giới vòng ngoài được định hướng ngược chiều kim đồng hồ và các ranh giới vòng trong, theo chiều kim đồng hồ. Tương tự, trong SQL Server Spatial, kiểu dữ liệu địa lý tuân theo quy tắc ngược chiều kim đồng hồ cho vòng ngoài và theo chiều kim đồng hồ cho các vòng bên trong - xem blog MicroSoft này để biết thêm chi tiết. Postgis dường như cho phép một trong hai cách, đối với hình học và có các chức năng sẽ buộc hình học của đa giác tuân theo quy tắc bàn tay phải hoặc tay trái, xem ST_ForceRHRForceLHR . JTS / Geos dường như đã tuân theo quy tắc bàn tay phải, tức là hướng theo chiều kim đồng hồ của vòng ngoài, vì vậy tất cả đều không rõ ràng, thực sự.

Nói chung, nó có ý nghĩa đối với một kiểu dữ liệu địa lý để buộc định hướng, vì nếu không thì không thể biết được một đa giác nhỏ chỉ là cái đó hay vòng trong của một đa giác toàn thế giới. Với kiểu dữ liệu hình học trên bề mặt phẳng, sự nhầm lẫn này không thể phát sinh, vì vòng ngoài và vòng trong theo thứ tự, và nếu chỉ có một vòng duy nhất, nó sẽ được bao quanh (bất kể hướng nào), không giống như trên quả địa cầu , mà kết thúc tròn.


Từ nhận xét của @mxfh: Truy cập các tính năng đơn giản OpenGIS của OGC (ISO 19125-1) chỉ định hướng ngược chiều kim đồng hồ cho các vòng ngoài như tài liệu phiên bản 1.2.1 [OGC 06-103r4] 6.1.11.1/page 26 từ opengeospatial.org / tiêu chuẩn / sfa. Thay đổi đã được giới thiệu giữa phiên bản 1.1.0 và 1.2.0 mới nhất năm 2006. Chú thích mà bạn trích dẫn từ chưa được cập nhật từ năm 2005


John trả lời tốt đẹp. Tôi không chắc chắn rằng việc sử dụng thứ tự các nút để xác định các vòng bên trong và bên ngoài là cách duy nhất mà định dạng dữ liệu vectơ có thể đạt được điều đó. Tôi sẽ đồng ý với bạn mặc dù một số cơ chế cần phải được áp dụng. Ví dụ với GeoJSON, danh sách các nút đầu tiên được chỉ định là bên ngoài và tất cả các danh sách tiếp theo là các lỗ bên trong. Điều đó hoạt động như (nếu không nhiều hơn) một cách hiệu quả.
WhiteboxDev

Vâng, điều này cũng đúng với WKT cho hình học. Đối với địa lý, nó rõ ràng quan trọng hơn.
John Powell

Điều đó rất đúng;)
WhiteboxDev

@WhiteboxDev lý do các lệnh quanh co của các vòng lồng nhau xen kẽ là, tính toán diện tích với Phương pháp dây giày tính toán các khu vực đã ký tùy theo hướng vòng. Trong các vòng lồng nhau nói chung được coi là lỗ và có hướng thay thế của vòng ngoài. Giá trị khu vực đóng góp của họ là tiêu cực. Trường hợp như vòng ngoài là tích cực; vì vậy là các vòng lồng nhau của trật tự thậm chí. Vì vậy, tổng diện tích của tất cả các tính năng vòng là tổng của tất cả các khu vực đã ký.
mxfh

1
@mxfh: nói đúng ra, "các lệnh quanh co của các vòng lồng nhau" là mô hình cho các đa giác OCG (và nhiều loại khác) .... vì nó không được phép. Cách để biểu diễn một đa giác lồng nhau bên trong "lỗ" của người khác là sử dụng Đa giác ... trong trường hợp đó, mỗi Đa giác cấu thành tuân theo các quy tắc quanh co ban đầu. OK, OK: đây là tương đương với việc xen kẽ các cuộn dây của "Tuyến tính lồng nhau" ... nhưng chỉ ra rằng đó không phải là Đa giác - mỗi se - cho phép điều này, mà là định nghĩa của MultiPolygon.
Dân H

23

Các hướng vòng (ranh giới) là cần thiết để ngăn ngừa sự mơ hồ cho các hệ tọa độ địa lý bao phủ một bề mặt hữu hạn, vì ranh giới sẽ xác định hai khu vực, một bên trái và một bên phải của ranh giới dọc theo hướng của nó. Xác định khu vực nào trong hai khu vực đó là khu vực lớn hơn có thể, nhưng vẫn để lại sự mơ hồ.

Dưới đây là tổng quan về hướng vòng ngoài của đa giác ở các định dạng khác nhau theo thông số kỹ thuật của chúng:

Minh họa thứ tự quanh co của Shapefiles và các tính năng đơn giản

  • Truy cập tính năng đơn giản (ISO 19125-1) cũng được sử dụng trong WKT / GML / KML và các triển khai SQL khác nhau:

    • vòng ngoài: ngược chiều kim đồng hồ
    • vòng trong (lỗ): hướng theo chiều kim đồng hồ.

    Đa giác là Bề mặt phẳng được xác định bởi 1 ranh giới bên ngoài và 0 hoặc nhiều ranh giới bên trong. Mỗi ranh giới bên trong xác định một lỗ trong Đa giác. [...]

    Ranh giới bên ngoài linearRing xác định đỉnh trên đỉnh của bề mặt, là mặt bên của bề mặt mà từ đó ranh giới bên ngoài xuất hiện để đi qua ranh giới theo hướng ngược chiều kim đồng hồ . Các nội thất LinearRings sẽ có định hướng đối diện, và xuất hiện như chiều kim đồng hồ khi nhìn từ “top” ... Đơn giản Tính năng truy cập thông số kỹ thuật

    Trong hầu hết các lần thực hiện, thứ tự các vòng trong POLYGON rất quan trọng (trái ngược với shapefiles)

    Đối với một đa giác có lỗ, phần phụ đầu tiên của nó là vòng ngoài của nó, phần phụ thứ hai của nó là vòng bên trong đầu tiên, phần phụ thứ ba của nó là vòng bên trong thứ hai, v.v. Không gian Oracle

    Tổ yến sâu hơn, còn gọi là đảo trong hồ trên đảo -... phải được biểu diễn dưới dạng MultiPolygons ( xem hình 2.10 (4) ), vì chỉ có thể có một đường viền bên ngoài và làm tổ sâu hơn vòng trong không được xác định.

  • Hình dạng ESRI / SHP :

    • vòng ngoài: chiều kim đồng hồ
    • vòng trong: ngược chiều kim đồng hồ

    Một đa giác bao gồm một hoặc nhiều vòng. Một vòng là một chuỗi kết nối gồm bốn hoặc nhiều điểm tạo thành một vòng khép kín, không tự giao nhau. Một đa giác có thể chứa nhiều vòng ngoài . Thứ tự của các đỉnh hoặc hướng cho một vòng cho biết phía nào của vòng là bên trong của đa giác. Vùng lân cận bên phải của một người quan sát đi dọc theo vòng theo thứ tự đỉnh là vùng lân cận bên trong đa giác. Các đỉnh của các vòng xác định lỗ trong đa giác đều theo hướng ngược chiều kim đồng hồ . Các đỉnh cho một đa giác vòng đơn, do đó, luôn luôn theo thứ tự theo chiều kim đồng hồ . [...]

    Thứ tự các vòng trong mảng điểm không đáng kể. Sách trắng ESRI

    Vì nhiều ranh giới bên ngoài được phép cấu hình đảo trong hồ trên đảo là có thể với định nghĩa đa giác này. Về mặt cấu trúc, hòn đảo trong hồ sẽ chỉ là một vòng ngoài theo chiều kim đồng hồ. Thực tế, điều này làm cho Đa giác Shapefile ESRI trở thành một tính năng đơn giản MultiPolygon

    Nếu bạn không sắp xếp các điểm một cách chính xác, bạn sẽ chỉ có các đa giác chồng chéo. pyshp

  • GeoJSON (RFC7946) :

    LƯU Ý: Thông số GeoJSON 2008 gốc không có lệnh quanh co được thi hành

    • thứ tự quanh co: vòng ngoài là ngược chiều kim đồng hồ (quy tắc bàn tay phải)
    • vòng trong là chiều kim đồng hồ
    • thứ tự của vòng là quan trọng:

      Đối với Đa giác có nhiều vòng, đầu tiên phải là vòng ngoài và bất kỳ vòng nào khác phải là vòng trong hoặc lỗ. Thông số kỹ thuật GeoJSON

  • TopoJSON : mặc định các vòng bên ngoài theo chiều kim đồng hồ

Minh họa thứ tự quanh co của Shapefiles và các tính năng đơn giản

Chuyến tham quan:

Lý do toán học về lý do tại sao các trật tự quanh co của các vòng lồng nhau xen kẽ là, tính toán diện tích bằng công thức dây giày ( giải thích trực quan ) tính toán các khu vực đã ký tùy theo hướng vòng.

Trong các vòng lồng nhau nói chung (ranh giới bên trong) được coi là lỗ và có hướng thay thế của vòng ngoài. Đóng góp giá trị khu vực đã ký của họ là tiêu cực. Trường hợp như vòng ngoài là tích cực. Tổng diện tích của tất cả các tính năng vòng là tổng của tất cả các khu vực đã ký.

Như ESRI đã triển khai, hãy xem mục Cơ sở Kiến thức này: ArcGIS sử dụng thuật toán nào để xác định khu vực của đa giác?

Đề xuất ghi nhớ

Kết thúc mở của các mẫu chữ được hiểu là mũi tên:

  • S hapefile: S → →
  • Đơn giản F e atur e s: e → (uốn lượn ra ngoài cc-khôn ngoan) →
  • GeoJSON: G (gốc của G là mũi tên) →

4

Tôi không biết rằng bất kỳ ai cũng có thể cung cấp câu trả lời dứt khoát cho câu hỏi của bạn vì mỗi định dạng tệp vectơ là khác nhau và mỗi GIS, về cách họ xử lý nội bộ các dữ liệu này, cũng sẽ khác nhau. Nhưng tôi có thể nói với bạn một cách chắc chắn rằng thứ tự theo chiều kim đồng hồ không chỉ dành cho các Shapefiles ESRI. Có các định dạng khác sử dụng một chỉ định tương tự theo thứ tự theo chiều kim đồng hồ cho các vòng bên ngoài và ngược chiều kim đồng hồ cho các đa giác lỗ bên trong. Ví dụ, cấu trúc đa giác vector JTS sử dụng định dạng tương tự. Trên thực tế, nó đã được nêu ở đây , rằng trong lịch sử, điều này tương tự như phương pháp ESRI. Tôi cũng có thể dứt khoát nói rằng không, không phải tất cả các định dạng đều có yêu cầu này. Ví dụ: thông số kỹ thuật định dạng GeoJSONkhông yêu cầu như vậy về thứ tự các đỉnh trong định dạng đa giác của chúng. Đặc tả KML thực sự nêu rõ:

Đa giác cho phải được chỉ định theo thứ tự ngược chiều kim đồng hồ. Đa giác tuân theo "quy tắc bàn tay phải", nói rằng nếu bạn đặt các ngón tay của bàn tay phải theo hướng tọa độ được chỉ định, ngón tay cái của bạn sẽ chỉ theo hướng chung của hình học thông thường cho đa giác.

Vì vậy, đầy đủ các tùy chọn tồn tại và được thực hiện ngoài đó. Nó là một thế giới hoang dã!


1
Lưu ý rằng "quy tắc bàn tay phải" của KML là quy tắc được gọi là "quy tắc bàn tay trái" (khi bạn đi vòng quanh với hai cánh tay vươn ra, bàn tay trái của bạn sẽ nằm trong hình). Esri có nhiều cách tiếp cận, vì shapefiles là định dạng duy nhất sử dụng quy tắc bàn tay phải (cơ sở dữ liệu địa lý doanh nghiệp sử dụng quy tắc bàn tay trái trong nội bộ, nhưng API 'C' sẽ cho phép bạn yêu cầu theo thứ tự). GML chỉ yêu cầu các vòng bên trong phải theo thứ tự ngược lại với các vòng bên ngoài và vòng đầu tiên là bên ngoài.
Vince

@Vince Tôi không biết điều đó. Có phải đó là hạt dẻ không? Cảm ơn vì đã cho tôi biết. Tôi nghĩ rằng tôi thích cách tiếp cận của GML nhất; không quan trọng việc đặt hàng miễn là chúng ngược lại. Điều đó làm cho rất nhiều ý nghĩa.
WhiteboxDev
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.