Loại bỏ (xác định) đa giác sliver bằng PostGIS? [đóng cửa]


9

Làm cách nào để tôi viết SQL (cho PostGIS trong PostgreQuery) để loại bỏ các đa giác mảnh (bao gồm cả các khe hẹp dài và một số đa giác nhỏ không đều có lỗi 'khoảng trống' trong tập dữ liệu ban đầu) bằng cách hợp nhất với một đa giác liền kề với cạnh dài nhất?

Tôi có một tập dữ liệu (tablename: "Thảm thực vật" chứa vài nghìn đa giác được xác định là đa giác hoặc đa giác 'thực' trong cột mô tả (tên cột: "desc") là "sliver" hoặc "main". [Chỉnh sửa: Trước để nhập tập dữ liệu của tôi vào PostGIS, tôi đã làm sạch nó bằng cách nhập vào GRASS (đó cũng là cách tôi chuyển đổi tất cả các khoảng trống thành đa giác nhỏ, sau đó tôi đã hợp nhất với tập dữ liệu chính. Tôi đã tìm thấy nếu tôi tăng dung sai chụp nhanh và diện tích tối thiểu vừa qua ' 1 'trong quá trình nhập GRASS, tôi bắt đầu mất các tính năng mong muốn.]

Hiểu biết của tôi là tôi có thể cần các bước sau:

  1. Xác định đa giác (Vegetation.desc = "main") liền kề với mỗi mảnh (Vegetation.desc = "sliver") chia sẻ cạnh dài nhất.
  2. Xác định cạnh giữa mỗi mảnh và đa giác chính liền kề của nó chia sẻ cạnh dài nhất được xác định trong Bước 1. (Có thể sử dụng ST_Relate)
  3. Xóa cạnh giữa mỗi mảnh và đa giác chính liền kề của nó chia sẻ cạnh dài nhất bằng cách sử dụng mã định danh cạnh được trả về trong Bước 2. (Có thể sử dụng ST_RemEdgeModFace)

Tôi chỉ có một sự hiểu biết rất cơ bản về SQL và quá trình trên vượt quá khả năng của tôi.


Mở rộng "postgis topology", nếu tôi hiểu đúng chỉ cần tạo cấu trúc liên kết với dung sai lớn hơn so với sliver avarage của bạn sẽ làm sạch hình học. nhưng tôi đã không làm bất cứ điều gì như thế
Simplexio

Tôi tin rằng tôi sẽ mất nhiều độ phân giải bằng cách tạo một cấu trúc liên kết với dung sai đủ lớn do kích thước của một số 'mảnh' (xem phần làm rõ trong văn bản). Điều này có thể là do sự hiểu biết hạn chế của tôi, và các giải pháp đơn giản hơn rất được hoan nghênh!
DavidM

Chào mừng đến với gis và làm sạch dữ liệu. Bạn có quyền truy cập vào FME? cái này khá dễ sử dụng và có một số tùy chọn để loại bỏ các phần tử ra khỏi đa giác. Các lựa chọn thay thế cho gis.stackexchange.com/questions/24365/ google và google dường như tìm thấy câu trả lời pl / pssql cho câu hỏi của bạn (không biết chúng tốt như thế nào). Điều đó nói rằng, không có cách nào dễ dàng để làm điều đó mà tôi biết, làm sạch nó bằng tay là cách "dễ nhất" để làm nhưng tôi có thể mất nhiều thời gian
Simplexio

Các công cụ bạc để lại lỗ hổng nếu bạn tạo một liên minh hoặc sẽ có các vật phẩm giao nhau hoặc cả hai loại "lỗi làm tròn"?
huckfinn

1
Tôi đã tạm thời giải quyết vấn đề của mình (đối với dự án hiện tại) bằng cách sử dụng thử nghiệm ARCGIS và áp dụng chức năng loại bỏ. Điều này làm việc tốt. Tôi vẫn muốn tìm ra giải pháp SQL bằng cách sử dụng postgis.
DavidM

Câu trả lời:


3

Tôi sử dụng điều này khi tổng hợp các hình dạng từ bộ dữ liệu GADM2 trong SQL Server:

SET @g2 = @g1.STBuffer(1).Reduce(1).STBuffer(-1).Reduce(1)

Việc reduce()xóa các đồ tạo tác mở rộng và tăng tốc mọi thứ lên gấp 100 lần - hơi thô, nhưng tốt cho các phép tính gần đúng.

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.