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:
Select ST_Makeline(customers.the_geom, yourPoint) from custmers;
Jika Anda memiliki satu-satunya toko di sebuah tabel, tampilannya akan seperti ini:
Select ST_Makeline(customers.the_geom, stores.the_geom) from custmers, stores;
Tetapi jika memiliki banyak toko dan setiap pelanggan hanya menggunakan satu toko, Anda akan mendapatkan solusi yang mirip dengan jawaban lain di sini, misalnya:
Select ST_Makeline(customers.the_geom, stores.the_geom)
from custmers, stores
where customers.storeid = stores.id;
PostgreSQL akan menangani permintaan itu dengan cara yang sama seperti:
Select ST_Makeline(customers.the_geom, stores.the_geom)
from custmers inner join stores
on customers.storeid = stores.id;
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:
Select ST_Makeline(customers.the_geom, stores.the_geom)
from customers inner join
c_s_link_table on customers.id = c_s_link_table.customerid
inner join stores
on c_s_link_table.storeid = stores.id;
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:
Select ST_Makeline(customers.the_geom, stores.the_geom),
c_s_link_table.visits_per_month from
customers inner join c_s_link_table on customers.id = c_s_link_table.customerid
inner join stores on c_s_link_table.storeid = stores.id;
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.