PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

PostGIS:Заявка за z и m измерения (linestringzm)

Ако искате да проверите всяка една точка от вашия LineString, можете да ST_DumpPoints тях и вземете M измерение с ST_M . След това извлечете подмножеството като LineString, съдържащ припокриващия се M стойности и приложете ST_MakeLine с 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;

Демонстрация:db<>fiddle

Забележка :В зависимост от размерите на вашата таблица и LineString, тази заявка може да стане доста бавна, тъй като стойностите се анализират по време на заявка и следователно не се индексират. Мисля, че по-елегантна алтернатива би била ..

.. 1) за създаване на tstzrange колона

ALTER TABLE t ADD COLUMN line_interval tstzrange;

.. 2) правилно да го индексирате

CREATE INDEX idx_t_line_interval ON t USING gist (line_interval);

.. и 3) да го попълните с времето на geom първият на и последен точки:

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

След това можете да ускорите нещата, като проверите дали индексираната колона се припокрива с даден интервал. Това значително ще подобри времето за заявка:

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

Демонстрация:db<>fiddle

Допълнителна информация:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL ПОКАЖЕ ТАБЛИЦИ Еквивалент (psql)

  2. ГРЕШКА:не можах да осъществи достъп до файл “$libdir/plpython2” – ГРЕШКА:не можа да получи достъп до файл “$libdir/plpython3”

  3. Django + PostgreSQL:създаване на база данни (какви привилегии да предоставите)

  4. Индекс на долните букви на Flask-SQLAlchemy - функция за пропускане, не се поддържа от отражението на SQLAlchemy

  5. Как да десериализирате BigDecimal стойност, получена от kafka брокер чрез debezium CDC механизъм?