PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

PostGIS:Truy vấn kích thước z và m (linestringzm)

Nếu bạn muốn kiểm tra mọi điểm trong Chuỗi dòng của mình, bạn có thể ST_DumpPoints họ và lấy M thứ nguyên với ST_M . Sau đó giải nén tập hợp con dưới dạng Chuỗi dòng chứa M chồng chéo và áp dụng ST_MakeLine với GROUP BY :

WITH j AS (
  SELECT id,geom,(ST_DumpPoints(geom)).geom AS p 
  FROM t 
) 
SELECT id,ST_AsText(ST_MakeLine(p))
FROM j
WHERE ST_M(p) BETWEEN 1618388000 AND 1618388700
GROUP BY id;

Demo: db <> fiddle

Lưu ý :Tùy thuộc vào kích thước bảng và Chuỗi dòng của bạn, truy vấn này có thể trở nên khá chậm, vì các giá trị đang được phân tích cú pháp trong thời gian truy vấn và do đó không được lập chỉ mục. Imho một sự thay thế thanh lịch hơn sẽ là ..

.. 1) để tạo tstzrange cột

ALTER TABLE t ADD COLUMN line_interval tstzrange;

.. 2) để lập chỉ mục nó một cách chính xác

CREATE INDEX idx_t_line_interval ON t USING gist (line_interval);

.. và 3) để điền nó với thời gian của geom của đầu tiên cuối cùng điểm:

UPDATE t SET line_interval = 
  tstzrange(
    to_timestamp(ST_M(ST_PointN(geom,1))),
    to_timestamp(ST_M(ST_PointN(geom,ST_NPoints(geom)))));

Sau đó, bạn có thể tăng tốc mọi thứ bằng cách kiểm tra kỹ hơn cột được lập chỉ mục trùng lặp với một khoảng thời gian nhất định. Điều này sẽ cải thiện đáng kể thời gian truy vấn:

SELECT * FROM t
WHERE line_interval && tstzrange(
                        to_timestamp(1618138148), 
                        to_timestamp(1618388700));

Demo: db <> fiddle

Đọc thêm:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển dần từ SQL Server sang PostgreSQL

  2. Mẹo triển khai PostgreSQL trên nền tảng đám mây kết hợp

  3. Lấy N hàng cuối cùng trong cơ sở dữ liệu theo thứ tự?

  4. Dấu hai chấm (::) ký hiệu trong SQL

  5. Làm cách nào để viết một truy vấn Django tính toán ngày tháng khi được thực thi dưới dạng PostGres SQL?