Nhẫn tự giao trong PostGIS


10

Đây là một tiếp theo từ câu hỏi trước . Bạn sẽ thấy tôi là người dùng PostGIS mới.

Tôi đã xem xét tính hợp lệ của cấu trúc liên kết trong dữ liệu của tôi và tìm thấy khoảng 1700 vấn đề cấu trúc liên kết trong bộ dữ liệu địa lý (đa giác). Đây là tất cả "Ring Self_intersection".

Sử dụng một số thông tin hữu ích trong bài trình bày này của Paul Ramsay (trang 20), tôi đã cố gắng đệm dữ liệu của mình cho phù hợp:

CẬP NHẬT giản đồ.data SET the_geom = buffer (the_geom, 0.0) WHERE isvalid (the_geom) = false và isvalid (buffer (the_geom, 0.0)) = true;

Nhưng tôi nhận được phản hồi:

THÔNG BÁO: Vòng tự giao nhau tại hoặc gần điểm (đã chỉnh sửa) LRI: hàng mới cho mối quan hệ "sgm_buffer" vi phạm ràng buộc kiểm tra "execce_geotype_the_geom"

********** Lỗi **********

LRI: hàng mới cho mối quan hệ "sgm_buffer" vi phạm ràng buộc kiểm tra "execce_geotype_the_geom" Trạng thái SQL: 23514

Tôi cũng đã thử chỉ:

CẬP NHẬT csgn.sgm_buffer SET the_geom = buffer (the_geom, 0.0)

và lấy:

LRI: hàng mới cho mối quan hệ "sgm_buffer" vi phạm ràng buộc kiểm tra "execce_geotype_the_geom"

********** Lỗi **********

LRI: hàng mới cho mối quan hệ "sgm_buffer" vi phạm ràng buộc kiểm tra "execce_geotype_the_geom" Trạng thái SQL: 23514

Vì vậy, tôi có cho rằng kỹ thuật đệm này sẽ không hoạt động trên các vấn đề của tôi? Hay tôi đang làm gì đó sai?

Sau đó, ông Ramsay tiếp tục trong cùng một tài liệu để đề xuất một kỹ thuật bổ sung để đối phó với "hình số 8" đa giác. Tôi hoàn toàn không hiểu làm thế nào để viết mã này đầy đủ bằng mã (hoặc nó đang làm gì và liệu nó có giúp tôi không):

CHỌN ST_BuildArea (ST_Union ('LINESTRING EMPTY', ST_Ex thầmRing ('POLYGON ((...))'

Vậy .... có ai giúp được không? Điều này đang chứng tỏ một cơn ác mộng thực sự với thời gian eo hẹp và kỹ năng hạn chế của tôi trong PostGIS.


1
Điều gì "chọn hình học_type (the_geom) từ sgm_buffer giới hạn 1" trở lại? Ngoài ra, liên quan đến thời gian chạy 40 giờ được đề cập trong câu hỏi khác, có các chỉ mục không gian được xác định trên bảng của bạn không?
diciu

Bạn có thể cần phải ST_Multi()buộc tất cả các đa giác là MULTIPOLYGONs (đây là một giả định)
Mike T

Cảm ơn các bình luận - diciu Tôi nghĩ rằng có các chỉ mục, chúng dường như hiển thị trong pgAdminIII, nhưng có lẽ tôi cần làm mới chúng? Tôi có thể làm gì với việc tìm ra các giải pháp để tăng tốc truy vấn - Tôi không biết đâu là thời gian hợp lý để nó chạy? Landcover có khoảng 20 triệu tính năng.
ESRIHelp

Câu trả lời:


12

Tôi nghĩ những gì đang xảy ra là các đa giác tự giao nhau của bạn trở thành ĐA NĂNG khi đệm.

bạn có hai lựa chọn:

1 loại bỏ ràng buộc "execce_geotype_the_geom", bạn có thể làm điều đó trong pgAdmin
2 đặt kết quả vào một bảng mới thay vì cập nhật bảng cũ. đó thường là một cách tốt để làm mọi thứ bởi vì sau đó bạn không thay đổi bất cứ điều gì trong bảng ban đầu của bạn. truy vấn có thể trông giống như:

CREATE TABLE new_buffered_table as
SELECT ST_Buffer(the_geom,0.0) as the_geom, gid FROM original_table;

tất nhiên bạn có thể muốn mang nhiều trường hơn vào bảng mới của mình.

Hãy thử thủ thuật đệm trước. Trong cách tiếp cận thứ hai, Paul có thể tự nói với mình những gì ảnh hưởng đến dòng dõi trống rỗng. Tôi không nhớ phép màu đó xảy ra như thế nào.


0

Tôi đã có những vấn đề tương tự một vài tháng trước. Tôi đã có đa giác trong cơ sở dữ liệu của mình với rất nhiều giao điểm tự. Tôi đã sử dụng phương pháp của Niklas Aven, nhưng nó không hoạt động. Tôi cũng đã sử dụng các phương pháp khác.

Phương pháp của tôi là loại bỏ giao điểm tự khỏi đa giác của tôi. Đây là truy vấn SQL tôi đã sử dụng:

     -- Create the new polygons 

SELECT ST_GeomFromText(polygone) as geom

   from (

    SELECT st_astext(ST_MakePolygon(linear)) as polygone

        from (
              SELECT st_astext
                ((ST_dump
                   (st_boundary
                      (ST_MakeValid
                     (ST_Transform
                        (ST_SETSRID
                           (geometry,4326),32631))))).geom) 
                          as linear from tables_name)
        as query2)

  as query1

where ST_area(polygone) > 1

Tôi đã tính diện tích của đa giác và tự giao nhau và tôi sẽ chỉ giữ các đa giác có diện tích> 1. 1là dung sai vì diện tích của giao điểm tự rất nhỏ. Cũng lưu ý rằng việc chuyển đổi SRID sang mét rất quan trọng nếu bạn có dữ liệu theo độ.

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.