পোস্টজিআইএস ব্যবহার করে পয়েন্টগুলি থেকে লাইন তৈরি করছেন?


10

আমার কাছে অসংখ্য যানবাহনের অবস্থান তথ্য সহ একটি পোস্টজিআইএস টেবিল রয়েছে এবং এই পয়েন্টগুলি থেকে লাইন তৈরি করতে চাই।

ডেটা গাড়ির আইডি দ্বারা নির্বাচন করা যেতে পারে এবং টাইমস্ট্যাম্প দিয়ে অর্ডার করা যায় তবে ফলাফল থেকে লাইন কীভাবে তৈরি করা যায়?

মূলত আমার যা দরকার তা হ'ল পয়েন্ট 1 থেকে পয়েন্ট 2 পর্যন্ত একটি লাইন বিভাগ, লাইনটি চূড়ান্ত করুন এবং তারপরে আবার পয়েন্ট 2 থেকে পয়েন্ট 3 তে অবশ্যই the

পরেরটিটির প্রয়োজন কারণ আমি এক পয়েন্ট থেকে পরের দিকে গাড়ির ক্রুজ দিক এবং গতি গণনা করতে চাই।


1
ST_MakeLine () ফাংশনটি এটি করবে, একবার আপনি নিজের GYUP BY वाहन_আইড এবং অর্ডার বাই টাইমস্ট্যাম্পটি শেষ করার পরে। দেখুন: postgis.refractions.net/docs/ST_MakeLine.html
Micha

ঠিক আছে, আমি কেবল এটিকে চেষ্টা করে নীচের বিবৃতিটি জারি করেছি: SELECT ais_data.mmsi, ST_MakeLine(ais_data.geom) AS newgeom INTO ais_lines FROM (SELECT * FROM ais_data ORDER BY ais_data.mmsi, ais_data.bs_ts ASC) AS ais_data GROUP BY ais_data.mmsi;এটি আমাকে প্রতিটি যানবাহনের ট্র্যাক দেবে এবং আমার যা প্রয়োজন ঠিক তা নয়। ST_MakeLine () কে কীভাবে পয়েন্ট 1 থেকে পয়েন্ট 2 পর্যন্ত একটি লাইন তৈরি করতে, লাইনটি চূড়ান্ত করতে হবে এবং পয়েন্ট 2 থেকে পয়েন্ট 3 তে একটি নতুন শুরু করতে ...?
থমাস বেকার

"পয়েন্ট 1", "পয়েন্ট 2", "পয়েন্ট 3" কী? এগুলি আপনি কীভাবে চিনবেন?
মিচা

আমি ভেবেছিলাম টাইমস্ট্যাম্পের অর্ডার দিয়ে তাদের চিনতে পারি ... ORDER BY ais_data.bs_ts- এটা কি সম্ভব? সুতরাং, পয়েন্ট 1, পয়েন্ট 2 এবং আরও অনেক কিছু মূলত সিলেক্ট স্টেটমেন্টের ফলাফল হিসাবে প্রতিটি লাইনে দেওয়া পয়েন্ট তথ্য।
থমাস বেকার

আপনি প্রথম পদক্ষেপে যানবাহন প্রতি এক লাইন উত্পন্ন করতে পারেন এবং মেইলিং তালিকা postgis postgis.17.x6.nabble.com/…
থমাস

উত্তর:


12

এটি কয়েকটি উপায়ে করা যেতে পারে, স্ব-যোগদান বা পরস্পর সম্পর্কযুক্ত উপকৌশলগুলি ব্যবহার করে তবে উইন্ডো ফাংশনগুলি ব্যবহার করা সম্ভবত সবচেয়ে সহজ উপায়।

ফাংশন lead()প্রদত্ত পার্টিশনের আগে যে মানটি দেয় এবং আমাদের পার্টিশনটি তা দেয়(PARTITION BY <vehicle_id> ORDER BY <timestamp>)

এই ক্যোয়ারীটি আমাদের গাড়ির নম্বর, পার্টিশনের সেই বিন্দুর অবস্থান (যা এটি দিয়ে শুরু করা লাইনের অবস্থানের সমান) এবং দুটি জ্যামিতি যা লাইন তৈরি করবে gives অবশ্যই এটি শেষ পয়েন্টের জন্য নুল জিওম 2 প্রদান করে তাই আমাদের বাইরের ক্যোয়ারিতে এটি পরীক্ষা করা দরকার।

SELECT mmsi, num, ST_MAKELINE(geom,geom2) FROM (
  SELECT mmsi, row_number() OVER w AS num, geom, lead(geom) OVER w AS geom2
  FROM ais_data WINDOW w AS (PARTITION BY mmsi ORDER BY bs_ts) ) as q
WHERE geom2 IS NOT NULL;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.