Saya memiliki tabel PostGIS dengan data posisi banyak kendaraan dan ingin membuat garis dari titik-titik ini.
Data dapat dipilih berdasarkan id kendaraan dan dipesan dengan cap waktu tetapi bagaimana cara membuat garis dari hasilnya?
Yang saya butuhkan pada dasarnya adalah satu segmen garis dari titik 1 ke titik 2, menyelesaikan garis dan kemudian lagi dari titik 2 ke titik 3. Tentu saja semua itu dalam pertimbangan id kendaraan.
Yang terakhir diperlukan karena saya ingin menghitung arah dan kecepatan kendaraan dari satu titik ke titik berikutnya.
postgis
point
line
geometry-conversion
Thomas Becker
sumber
sumber
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;
Itu akan memberi saya jejak setiap kendaraan, dan tidak persis apa yang saya butuhkan. Bagaimana cara memberitahu ST_MakeLine () untuk membuat garis dari titik 1 ke titik 2, menyelesaikan garis dan memulai yang baru dari titik 2 ke titik 3 ...?ORDER BY ais_data.bs_ts
- apakah mungkin? Jadi, poin 1, poin 2 dan sebagainya pada dasarnya adalah informasi titik yang diberikan di setiap baris sebagai hasil dari pernyataan Select.Jawaban:
Ini dapat dilakukan dalam beberapa cara, menggunakan self-joins atau subqueries yang berkorelasi tetapi menggunakan fungsi window mungkin adalah cara termudah.
Fungsi
lead()
mengembalikan nilai yang ada di depan dalam partisi yang diberikan dan partisi kami(PARTITION BY <vehicle_id> ORDER BY <timestamp>)
Kueri ini memberi kita nomor kendaraan, posisi titik di partisi (yang sama dengan posisi garis yang dimulai dengan itu) dan dua geometri yang akan membuat garis. Tentu saja mengembalikan NULL geom2 untuk poin terakhir sehingga kita perlu memeriksa itu di kueri luar.
sumber