Sở thú hình học không hợp lệ


9

Nhiều lần và tôi đã dành hàng giờ vật lộn với những lỗi kỳ quái xuất phát từ hình học không hợp lệ . Các triệu chứng rất khác nhau, bao gồm:

  • Cơ sở dữ liệu chậm lại
  • Kết quả truy vấn không chính xác
  • Các tệp nhật ký bị quá tải với các lỗi và cảnh báo
  • Kết quả không nhất quán với các toán tử hình học (ví dụ: giao lộ)

Tôi muốn phân loại các loại hình học không hợp lệ, để giúp mọi người ở đây vệ sinh dữ liệu của họ.

Vui lòng trả lời với loại hình học không hợp lệ yêu thích của bạn (một loại cho mỗi câu trả lời). Ảnh chụp màn hình, mô tả và giải pháp đều được chào đón - nhưng hãy cố gắng giữ câu trả lời của bạn ngắn gọn.

Câu trả lời:



3

Đoạn không dài

Thí dụ:

SELECT geomFromEWKT('LINESTRING(1 1, 1 1)');

                                    geomfromewkt                                    
------------------------------------------------------------------------------------
 0102000000020000000000000000000840000000000000104000000000000008400000000000001040

Sự cố: Lưu trữ phân đoạn có độ dài bằng 0 có thể gây ra lỗi khi tính tỷ lệ độ dài (chia cho số 0) hoặc khi cố gắng tính phương vị và hàm lượng giác.

Phát hiện: trong PostGIS, các phân đoạn có độ dài bằng không có thể được phát hiện bằng cách sử dụng isValid().

Giải pháp: Cố gắng giữ các đoạn có độ dài bằng 0 làm điểm.


3

Đa giác tự xen kẽ

nhập mô tả hình ảnh ở đây

Thí dụ:

SELECT isValid(geomFromEWKT('POLYGON((0 0, 1 1, 1 0, 0 1, 0 0))'));
NOTICE:  Self-intersection at or near point 0.5 0.5
 isvalid 
---------
 f
(1 row)

Vấn đề: Tính toán sai, Ví dụ area():

SELECT area(geomFromEWKT('POLYGON((0 0, 1 1, 1 0, 0 1, 0 0))'));
 area 
------
    0
(1 row)

Điều này có thể gây ra lỗi phân chia bằng không với các chức năng gọi.

Phát hiện: Trong PostGIS, các phân đoạn tự giao nhau có thể được phát hiện bằng cách sử dụng isValid().

Giải pháp: Chuyển đổi sang MULTIPOLYGON(xem bình luận).


Hình dạng tương tự tương đương với giá trị:MULTIPOLYGON(((0 0, 0 1, 0.5 0.5, 0 0)),((1 1, 1 0, 0.5 0.5, 1 1)))
Mike T

@Mike Toews: Chính xác, chuyển đổi sang MULTIPOLYGON là một giải pháp tốt.
Adam Matan
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.