Có thể nhóm theo hình học trong PostGIS không?


17

Có thể nhóm theo hình học?

Chúng tôi thực hiện rất nhiều điểm đếm bằng hình học đa giác, liên quan đến việc giao dữ liệu trước để đếm các trường hợp của học sinh. theo ranh giới trường học, nhóm khối, vv

SELECT
  n.nbhd_id
  , count(*) AS count_burglaries
FROM denver.crime AS c
  JOIN denver.neighborhoods AS n
    ON ST_Intersects(c.geom, n.geom)

WHERE c.offense_ty LIKE 'BURG%'
GROUP BY n.nbhd_id

Bước thứ hai là bọc một truy vấn phụ để nối hình học từ bảng đa giác trở lại truy vấn đếm:

SELECT

count.*
, n.nbhd_name
, n.geom
FROM (
SELECT
n.nbhd_id
, count(*) AS count_burglaries
FROM denver.crime AS c
JOIN denver.neighborhoods AS n
ON ST_Intersects(c.geom, n.geom)

WHERE c.offense_ty LIKE 'BURG%'
GROUP BY n.nbhd_id

) AS count

JOIN denver.neighborhoods AS n
ON count.nbhd_id = n.nbhd_id

Nhưng có vẻ như bạn cũng có thể sử dụng hình học trong NHÓM THEO:

SELECT
n.nbhd_id
, n.nbhd_name
, n.geom

, count(*) AS count_burglaries
FROM denver.crime AS c
JOIN denver.neighborhoods AS n
ON ST_Intersects(c.geom, n.geom)

WHERE c.offense_ty LIKE 'BURG%'
GROUP BY n.nbhd_id, nbhd_name, n.geom

Là bao gồm hình học trong NHÓM THEO một cách tiếp cận đúng?


Những gì bạn GROUP BYđạt được? Nó không thể tham gia bởi một khóa duy nhất của nbhd_id? Bạn đang làm cho sắp xếp rộng hơn, làm tăng thời gian chạy, có thể nhiều hơn một lần tham gia tiếp theo.
Vince

1
Nó cho phép tôi không phải bọc truy vấn đếm dưới dạng truy vấn phụ để tham gia trên nbhd_id - nếu nó tăng thời gian chạy thành nhóm theo hình học, thì đó có phải là lý do có thể KHÔNG làm điều này không, bạn có nói không?
DPSSpatial

Câu trả lời:


18

Gần như chắc chắn không có gì sai khi nhóm theo hình học trong trường hợp này, vì bạn đã được nhóm bởi một ID duy nhất ( nbhd_id). Và, như bạn chỉ ra, nó giúp bạn tham gia và làm cho truy vấn sạch hơn.

Điều quan trọng cần biết là một GROUP BY geommệnh đề trong PostGIS 2.3 và trước đó thực sự nhóm các hàng dựa trên đẳng thức hộp giới hạn, không phải là đẳng thức hình học. Với dữ liệu thực, không bị chiếm dụng, điều này thường có tác dụng tương tự như nhóm trên phương trình hình học (và nhanh hơn nhiều), nhưng có thể không tạo ra kết quả như mong đợi khi nhiều đa giác khác nhau có cùng một hộp giới hạn. Bắt đầu từ PostGIS 2.4, GROUP BYhoạt động dựa trên định nghĩa cứng nhắc về bình đẳng hình học, có tính đến điểm bắt đầu và định hướng của hình học.

Vì bạn đã nhóm nbhd_id, bạn vẫn sẽ thấy các hàng riêng biệt ngay cả khi hai đa giác lân cận riêng biệt chia sẻ một hộp giới hạn.


bài viết này của Paul có bất kỳ thay đổi về câu trả lời này không? blog.cleverelephant.ca/2017/09/postgis-operators.html
DPSSpatial
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.