วิธีการระบุและทำให้กลุ่มจุดง่ายขึ้นโดยคำนึงถึงเวลาใน PostGIS


11

ฉันเพิ่งเริ่มทำงานกับฐานข้อมูลเชิงพื้นที่และฉันต้องการเขียนแบบสอบถาม SQL (PostGIS) สำหรับการวางหลักเกณฑ์การติดตาม GPS แบบอัตโนมัติ (ด้วยความถี่การติดตามคงที่) โดยอัตโนมัติ สิ่งแรกที่ฉันตื่นคือแบบสอบถามที่ระบุจุดหยุดนิ่งในรูปแบบของแบบสอบถามเช่น "จุด x ภายในระยะทาง y เมตร" เพื่อแทนที่เมฆจุดใหญ่โดยจุดตัวแทน ฉันรู้แล้วว่าจะตะครุบคะแนนภายในระยะทางที่กำหนดและนับจำนวนที่หักออก ในภาพด้านล่างเราสามารถเห็นแทร็กตัวอย่างแบบดิบ (จุดสีดำเล็ก ๆ ) และศูนย์กลางของจุดที่จัดชิดเป็นวงกลมสี (ขนาด = จำนวนของจุดที่จัดชิด)

ป้อนคำอธิบายรูปภาพที่นี่

CREATE table simplified AS 
 SELECT count(raw.geom)::integer AS count, st_centroid(st_collect(raw.geom)) AS center
   FROM raw
  GROUP BY st_snaptogrid(raw.geom, 500, 0.5)
  ORDER BY count(raw.geom) DESC;

ฉันค่อนข้างพอใจกับวิธีแก้ปัญหานี้ แต่มีปัญหาเวลา: การถ่ายภาพแทร็กแบบเต็มวันในเมืองคน ๆ นั้นสามารถกลับไปยังสถานที่ที่เคยเยี่ยมชมมาก่อน ในตัวอย่างของฉันวงกลมสีน้ำเงินเข้มหมายถึงบ้านของบุคคลที่เขาไปเยี่ยมสองครั้ง แต่แน่นอนว่าคำถามของฉันไม่สนใจสิ่งนั้น

ในกรณีนี้เคียวรีที่ซับซ้อนควรรวบรวมคะแนนที่มีการประทับเวลาต่อเนื่อง (หรือ ID) เท่านั้นเพื่อที่จะสร้างจุดที่เป็นตัวแทนสองจุดที่นี่ แนวคิดแรกของฉันคือการปรับเปลี่ยนการสืบค้นของฉันเป็นแบบ 3 มิติ (เวลาเป็นมิติที่สาม) แต่ดูเหมือนจะไม่ทำงาน

ใครบ้างมีคำแนะนำสำหรับฉัน ฉันหวังว่าคำถามของฉันชัดเจน


ขอบคุณสำหรับแนวความคิด ฉันได้ตระหนักถึงการสร้างและลดความซับซ้อนของการเคลื่อนไหวดังที่คุณเห็นในภาพหน้าจอด้านล่าง (จุดเป็นจุดดั้งเดิม) ป้อนคำอธิบายรูปภาพที่นี่ สิ่งที่ฉันยังต้องการคือการกำหนดสถานที่พักผ่อน (> x จุดในรัศมี <x เมตร) โดยมีจุดหนึ่งที่มีเวลามาถึงและเวลาที่เหลือ ... แนวคิดอื่น ๆ ?


2
คุณต้องการคะแนนเพื่อจุดประสงค์อื่นหรือไม่? มิฉะนั้นดูเหมือนว่าอาจจะเป็นเพียงแค่การสร้างเส้นจากจุดและจากนั้นทำให้ง่ายขึ้น / generalizing บรรทัดเหล่านั้นจะตอบสนองวัตถุประสงค์ของคุณ
Anthony -GISCOE-

2
มันเป็นปัญหาที่น่าสนใจ คุณอาจจะสามารถรวบรวมความคิดบางอย่างจากหลักคำถามเดียวกันที่ถูกถามเกี่ยวกับการMathematicaเว็บไซต์ที่mathematica.stackexchange.com/questions/2711 ไม่ใช่คำตอบทั้งหมดที่ใช้ประโยชน์จากมิติข้อมูล (แต่สำหรับฉัน :-)
whuber

@ Anthony-GISCOE- เป็นวิธีที่น่าสนใจ ในลักษณะจุดกรณีที่มีความจำเป็นใหม่จะถูกสร้างขึ้นจากจุดของเส้นทั่วไปหรือตามเส้นชอบที่นี่gis.stackexchange.com/questions/27102/... ฉันรู้ว่าสิ่งเหล่านั้นยังคงไม่ใช่จุดเริ่มต้น!
andytilia

@ Anthony: ฉันต้องการ "การเป็นตัวแทน" - จุดใด ๆ ของการหยุดนิ่งและอย่างน้อยก็เริ่มต้นและสิ้นสุด ...
Berlin_J

1
และมันจะมีประโยชน์มากที่จะมี PostGIS โซลูชั่น :)
Berlin_J

คำตอบ:


4

หากคุณต้องการทุกจุดสำหรับการสร้างภาพข้อมูลจริงๆแล้วคุณสามารถสร้างบรรทัดและ st_simplify (ซึ่งเป็นการนำไปปฏิบัติของ Douglas Peucker) จะทำงานได้ค่อนข้างดี

ในบางกรณีคุณไม่จำเป็นต้องเก็บคะแนนทั้งหมดดังนั้นคุณสามารถทำการกรองก่อนบันทึกข้อมูลจุดเช่นเมื่อวัตถุไม่เคลื่อนไหวอย่าเก็บไว้ คุณสามารถใช้ DouglasPeucker หรือตัวกรองพื้นฐานอื่น ๆ ก่อนที่จะเพิ่มคะแนนในฐานข้อมูล ผู้ให้บริการ GPS บางราย (เช่น Android Location API) สามารถทำการกรองเริ่มต้นตามเวลาและระยะทางขั้นต่ำโดยอัตโนมัติ ในบางกรณีคุณเก็บข้อมูลที่ซ้ำกันไว้ล่วงหน้าเพื่อการแสดงผลอย่างรวดเร็วและบันทึกการทำงานเต็มรูปแบบสำหรับการเก็บถาวร พื้นที่เก็บข้อมูลธรรมดาค่อนข้างถูกในปัจจุบัน


3

ในขณะเดียวกันฉันพบวิธีแก้ปัญหาของฉัน:

อันดับแรกฉันกำหนด "ระยะทางประเภท" สำหรับทุกจุด หากจุดอยู่ใกล้กับ x เมตรไปยังจุดถัดไปจะถูกกำหนดเป็น "หยุด" หรือ "ย้าย" จากนั้นฉันก็เริ่มฟังก์ชั่นหน้าต่างดังนี้:

     SELECT t1.id, t1.dist_type, t1."time", t1.the_geom, t1.group_flag, sum(t1.group_flag) OVER (ORDER BY t1.id) AS group_nr
FROM ( SELECT distances.id, distances.the_geom, distances."time", distances.dist_type, 
                CASE
                    WHEN lag(distances.dist_type) OVER (ORDER BY distances.id) = distances.dist_type THEN NULL::integer
                    ELSE 1
                END AS group_flag
           FROM distances) t1;

ตารางผลลัพธ์มีลักษณะดังนี้:

ป้อนคำอธิบายรูปภาพที่นี่

ขั้นตอนต่อไปที่เรียบง่ายจัดกลุ่มจุด "หยุด" ระบุเซนทรอยด์ของกลุ่มจุดเหล่านี้และใช้เวลาประทับขั้นต่ำและสูงสุดเมื่อมาถึงและออกจากเวลา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.