Saya agak baru di PostGIS tetapi saya sudah banyak membaca. Satu hal yang saya cari adalah fungsi yang memungkinkan pengguna untuk membuat "diagram laba-laba" (juga disebut "garis keinginan" atau "garis hub") di PostGIS.
Sebagai contoh, gambar garis dari toko kelontong (titik) ke semua alamat pelanggan (titik) geocode toko kelontong itu. Tentu saja, bayangkan, ada ratusan toko dan ribuan pelanggan. Saya akan membayangkan bahwa setiap toko akan memiliki ID unik yang setiap titik pelanggan akan tertanam dalam bidang sehingga perangkat lunak mengetahui koneksi asal-tujuan.
Apakah ada fungsi ST_ sederhana yang akan menyelesaikan tugas ini, atau apakah ini memerlukan menggabungkan beberapa kueri untuk menyelesaikan tugas?
sumber
Pertanyaannya kurang lebih dijawab, saya hanya ingin menambahkan beberapa komentar untuk menunjukkan fleksibilitas dan kekuatan melakukan hal-hal seperti ini dengan sql spasial
Ketika saya membaca pertanyaan itu dapat dibagi dalam dua pertanyaan. Satu pertanyaan GIS dan satu pertanyaan sql tentang cara menggabungkan baris dalam tabel yang berbeda.
Bagian gis seperti yang disebutkan sebelumnya sebaiknya diselesaikan dengan ST_MakeLine, jika itu dua poin yang ingin Anda sambungkan dengan baris Anda. Jika itu adalah garis atau poligon, Anda dapat menggunakan ST_Shortestline sebagai gantinya untuk mendapatkan garis dari geometri di antara titik terdekatnya. Itu akan bekerja dengan kedua titik, garis dan poligon.
Bagian lainnya adalah tentang bagaimana menghubungkan titik penyimpanan yang tepat dengan titik pelanggan yang tepat.
Itu adalah pertanyaan basis data dasar. Memahami hal itu akan memberi lebih banyak sukacita untuk menggunakan PostGIS.
Situasi paling mudah adalah satu toko dengan banyak pelanggan. Maka Anda hanya perlu satu tabel pelanggan dan titik toko Anda dan itu akan terlihat seperti:
Jika Anda memiliki satu-satunya toko di sebuah tabel, tampilannya akan seperti ini:
Tetapi jika memiliki banyak toko dan setiap pelanggan hanya menggunakan satu toko, Anda akan mendapatkan solusi yang mirip dengan jawaban lain di sini, misalnya:
PostgreSQL akan menangani permintaan itu dengan cara yang sama seperti:
Tetapi di dunia nyata Anda mungkin akan mendapatkan situasi bahwa sebagian besar pelanggan menggunakan banyak toko. Dalam contoh sebelumnya kami memiliki hubungan satu toko dengan banyak pelanggan, sekarang kami memiliki banyak situasi. Banyak pelanggan menggunakan banyak toko.
Lalu ada solusi buruk yang terkadang Anda lihat. Orang-orang menambahkan satu baris pelanggan baru untuk setiap toko yang ia gunakan. Itu akan menyebabkan banyak masalah jika Anda ingin mengubah alamatnya, Anda harus melakukannya di banyak tempat. Basis data yang lebih tepat untuk melakukannya adalah membuat "tabel tautan". Saya tidak tahu apakah itu kata yang tepat dalam bahasa Inggris. Itu adalah tabel yang menyimpan semua data spesifik untuk hubungan pelanggan dengan setiap toko yang dia gunakan. Jadi kamu punya tiga tabel. Satu dengan toko dan semua atribut milik toko seperti ketika itu terbuka dan nomor telepon untuk menghubungi. Maka Anda memiliki tabel pelanggan mungkin dengan alamat dan nomor telepon kepada pelanggan. Maka Anda memiliki "tabel tautan" ini yang harus menyertakan id untuk toko, id untuk pelanggan dan mungkin informasi tambahan seperti frekuensi mengunjungi toko tertentu, atau jarak ke toko, atau baris yang Anda buat (tetapi jarak dan garis lebih baik untuk dibuat dengan cepat saat Anda membutuhkannya). Kemudian dengan tabel baru ini, kueri Anda akan terlihat seperti:
Maka Anda memiliki fleksibilitas penuh. Katakanlah misalnya Anda menambahkan ke tautan Anda berapa kali sebulan pelanggan mengunjungi toko itu. Kemudian Anda dapat menulis kueri seperti ini:
maka Anda dapat menggunakan atribut itu, visits_per_month untuk menentukan ketebalan garis Anda di peta yang menggambarkan berapa banyak kunjungan yang didapat setiap toko.
sumber
Salah satu cara untuk melakukan spider digram di PostGIS adalah dengan menggunakan fungsi ST_MakeLine . Lihat contoh di bawah ini:
sumber