Làm thế nào để tham gia tất cả các đa giác giao nhau và rời khỏi những người khác mà không thay đổi trong postgis?


8

Những gì tôi cần là hợp nhất các đa giác giao nhau trong một hình học duy nhất và để lại những người khác mà không thay đổi.

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

Tôi có thể thực hiện điều này bằng cách sử dụng truy vấn sau, kết hợp tất cả các đa giác thành một hình học duy nhất và sau đó kết xuất nó thành các truy vấn riêng biệt.

INSERT INTO unioned(geom)
SELECT ST_MULTI((ST_Dump(ST_Union(geom))).geom) from footprints;

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

Vấn đề là tôi có hơn một triệu hàng trong cơ sở dữ liệu và ST_Unionhoạt động không bao giờ kết thúc. Có cách nào để đạt được điều tương tự mà không cần tham gia tất cả các hình học không?

Câu trả lời:


6

Đây là một cách tiếp cận khác mà tôi mong đợi sẽ nhanh hơn nhiều đối với loại dữ liệu bạn đã trình bày ở trên:

ST_UnaryUnion(unnest(ST_ClusterIntersecting(geom))) FROM footprints;

Truy vấn này:

  1. Sử dụng ST_ClusterIntersectingđể tìm các nhóm dấu chân tòa nhà tạo thành một "chuỗi giao nhau" và gắn từng nhóm vào một GeometryCollection. Trả về một mảng.
  2. Sử dụng unnestcho mảng các bộ sưu tập hình học thành một hàng cho mỗi bộ sưu tập hình học.
  3. Sử dụng ST_UnaryUnionđể hợp nhất các mục trong mỗi bộ sưu tập hình học.

Rất cám ơn bạn đã trả lời @dbaston. Bạn có biết tại sao ST_ClusterIntersectingtrả về hình học với SRID = 0 không? Làm thế nào điều này có thể được giải quyết? Cố gắng thực hiện truy vấn sau: INSERT INTO fixed_footprints(geom) SELECT ST_UnaryUnion(unnest(ST_ClusterIntersecting(geom))) as geom FROM footprints;Tôi đã gặp lỗi sau:[22023] ERROR: Geometry SRID (0) does not match column SRID (4326)
Serhey Ladonya 23/03/18

nghĩ rằng tôi đã giải quyết điều này: INSERT INTO fixed_footprints(geom) SELECT ST_Multi(st_setsrid(ST_UnaryUnion(unnest(ST_ClusterIntersecting(geom))), 4326)) as geom FROM footprints;Sẽ thử điều này trên một bộ lớn hơn
Serhey Ladonya 23/03/18

@SerheyLadonya có vẻ như vấn đề SRID là một lỗi trong ST_ClusterIntersecting. Cảm ơn đã chỉ ra, tôi sẽ sửa nó.
dbaston
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.