PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PostGIS:क्वेरी z और m आयाम (linestringzm)

यदि आप अपने लाइनस्ट्रिंग के प्रत्येक बिंदु की जांच करना चाहते हैं तो आप ST_DumpPoints . कर सकते हैं उन्हें और M . प्राप्त करें आयाम के साथ ST_M . उसके बाद उपसमुच्चय को एक लाइनस्ट्रिंग के रूप में निकालें जिसमें अतिव्यापी 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

नोट :आपकी तालिका और लाइनस्ट्रिंग आकारों के आधार पर यह क्वेरी बहुत धीमी हो सकती है, क्योंकि मान क्वेरी समय में पार्स किए जा रहे हैं और इसलिए अनुक्रमित नहीं हैं। इम्हो एक अधिक सुंदर विकल्प होगा ..

.. 1) एक tstzrange create बनाने के लिए कॉलम

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. पर्यवेक्षक पदानुक्रम की सूची प्राप्त करने के लिए SQL क्वेरी। कर्मचारी -> पर्यवेक्षक -> पर्यवेक्षक

  2. नेस्टेड लूप प्रश्नों को पैरेंट सरणी परिणाम में संयोजित करें - स्नातकोत्तर-वादा

  3. समान मान वाले दो कॉलम ऑर्डर करते समय अजीब ऑर्डरिंग बग (क्या यह एक बग है?)

  4. MigrationSchemaMissing(django_migrations तालिका बनाने में असमर्थ (%s) % exc)

  5. आगे की गणना के लिए फॉर-लूप के अंदर कैसे चयन करें?