Liên minh PostGIS giữa hai bảng, bảo quản các thuộc tính


8

Tôi đang cố gắng liên kết các ranh giới chính phủ cấp trên và cấp dưới của Hoa Kỳ theo cách tạo ra một bảng PostGIS với cả tên cấp trên và cấp dưới cho mỗi hình dạng.

Trong ví dụ của tôi dưới đây, Ulà một tập dữ liệu và có một cột với các hàng UAUB. Llà tập dữ liệu khác và có LA, LBLC. Khi tôi kết hợp các hình dạng lại với nhau, tôi sẽ có được các hình dạng giống như Lnhưng tập dữ liệu hợp nhất mới có cả hai cột dữ liệu.

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

Chỉnh sửa : Hình ảnh ví dụ của tôi ở trên là khá nhàu nát. Các câu trả lời cho đến nay có liên quan đến truy vấn dữ liệu giả sử hình học có sẵn. Điều này rất quan trọng nhưng lại bỏ qua phần khó hiểu hơn trong câu hỏi của tôi. Một ví dụ tốt hơn:

hình ảnh

Hình dạng màu vàng là từ U, hình dạng màu cam là từ L. Lưu ý rằng chúng trùng nhau nhưng một số phần của đa giác không chứa hoàn toàn bên trong một hình dạng khác (như trong ví dụ của tôi ở đâu LBLChoàn toàn bên trong UB).

Câu hỏi tôi đang cố hỏi là về việc băm chính xác hai lớp để tập dữ liệu kết quả không có sự trùng lặp. Xem ví dụ bài đăng danh sách gửi thư này gần nhưng không hoạt động.


1
Nhận xét bên lề: gọi đây là "liên minh", là thuật ngữ ESRI cho hoạt động sẽ gây nhầm lẫn cho người PostGIS, vì hàm ST_Union thực hiện ngược lại với điều này (mà ESRI gọi là "hòa tan") và làm tan chảy các tính năng với nhau. Một thuật ngữ trung lập với nhà cung cấp có thể là "lớp phủ".
Paul Ramsey

Tôi nghĩ rằng câu hỏi của tôi rất giống với câu hỏi này đã được hỏi và được trả lời khá tốt.
từ tính

Câu trả lời:


5

Không biết tên cột của bạn, đây là dự đoán tốt nhất của tôi. (Tôi chưa có cơ hội kiểm tra, vì vậy nó có thể không chính xác.) Hy vọng bạn có thể nói ra các tên cột tôi đã sử dụng. Giả sử L là tập con của U:

SELECT l.id AS l_id, u.ab AS uab, l.abc AS labc, ST_Intersection(u.geom, l.geom) AS geom
  FROM u, l
  WHERE ST_Intersects(ST_PointOnSurface(l.geom), u.geom);

2
Điều này là chính xác, xem thêm gis.stackexchange.com/a/31562/457 để biết cách điều chỉnh hiệu suất của phương pháp này.
Paul Ramsey

Điều này là hoàn hảo một khi tôi có các hình dạng được tạo ra, nhưng trước tiên tôi cần xây dựng các hình dạng hợp nhất. Bản vẽ ví dụ của tôi không phải là tốt nhất để chứng minh điều này, nhưng trước tiên tôi cần phải cắt hình học để không có sự trùng lặp.
từ tính

Tôi nghĩ rằng bạn đã không đọc SQL đủ chặt chẽ, nó tạo ra các hình dạng mới chỉ bao gồm các khu vực được chia sẻ. Đầu ra của truy vấn này không có tính năng chồng chéo.
Paul Ramsey

Bạn hoàn toàn đúng Paul - Tôi nghĩ tôi muốn bình luận về câu trả lời của Nicklas bên dưới.
từ tính

1

Câu trả lời phụ thuộc vào mức độ sạch và nhất quán của dữ liệu của bạn. Nếu bạn có thể giả sử rằng có thể tìm thấy trọng tâm của bảng L bên trong đa giác phù hợp trong bảng U, bạn có thể viết một cái gì đó như:

SELECT * FROM U INNER JOIN L ON ST_Intersects(L.Centroid(geom),U.geom);

Sau đó, bạn sẽ nhận được những gì bạn muốn. Nếu bạn sử dụng toàn bộ hình học thay vì trọng tâm của L, bạn sẽ nhận được rất nhiều trận đấu lạ.

HTH

Nicklas


Lưu ý rằng chức năng Centroid không đảm bảo một điểm nằm trong đa giác. ST_PointOnSurface nào.
Scro

@Scro bạn hoàn toàn đúng. Hoa hậu từ tôi.
Nicklas Avén
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.