質問は多かれ少なかれ答えられています、私はいくつかのコメントを追加して、空間SQLでこのようなことを行う柔軟性と力を指摘したいと思います
私が質問を読んだとき、それは2つの質問に分けることができます。異なるテーブルの行を組み合わせる方法に関するGISの質問とSQLの質問。
先に述べたように、gis-partは、ラインに接続したいのが2つのポイントである場合、ST_MakeLineで解決するのが最善です。ラインまたはポリゴンの場合は、代わりにST_Shortestlineを使用して、最も近いポイント間のジオメトリからラインを取得できます。これは、ポイント、ライン、ポリゴンの両方で機能します。
もう1つは、適切な店舗ポイントを適切な顧客ポイントに接続する方法です。
それは基本的なデータベースの質問です。それを理解することで、PostGISを使用することに多くの喜びがもたらされます。
最も簡単な状況は、多くの顧客がいる1つの店舗です。次に、1つの顧客テーブルとストアポイントだけが必要で、次のようになります。
Select ST_Makeline(customers.the_geom, yourPoint) from custmers;
テーブルに唯一のストアがある場合、次のようになります。
Select ST_Makeline(customers.the_geom, stores.the_geom) from custmers, stores;
しかし、多くの店舗があり、各顧客が1つの店舗のみを使用している場合は、他の回答のようなソリューションがここに表示されます。次に例を示します。
Select ST_Makeline(customers.the_geom, stores.the_geom)
from custmers, stores
where customers.storeid = stores.id;
PostgreSQLはそのクエリを次のように処理します。
Select ST_Makeline(customers.the_geom, stores.the_geom)
from custmers inner join stores
on customers.storeid = stores.id;
しかし、現実の世界では、ほとんどの顧客が多くの店舗を利用しているという状況に陥るでしょう。以前の例では、1つの店舗と多くの顧客との関係がありましたが、今は多対多の状況にあります。多くの店舗を利用する多くのお客様。
次に、時々見られる悪い解決策があります。人々は、彼が使用する店舗ごとに1つの新しい顧客行を追加します。たとえば彼の住所を変更したい場合、多くの場所でそれを行わなければならない場合、それは多くの問題を引き起こします。それを行うためのより正確なデータベースは、「リンクテーブル」を作成することです。それが英語で正しい単語かどうかはわかりませんが、とにかく。これは、顧客が使用する各店舗に関する顧客の特定のデータをすべて保持するテーブルです。したがって、3つのテーブルがあります。店舗と、店舗が開いているときのようなすべての属性、および連絡先の電話番号を備えたもの。次に、顧客の住所と電話番号が記載された顧客テーブルがあります。次に、ストアのIDを含むこの「リンクテーブル」があります。顧客のID、および特定の店舗への訪問頻度、店舗までの距離、または作成しているこのラインなどの追加情報(ただし、距離とラインは必要に応じてオンザフライで作成する方が適切です)。この新しいテーブルでは、クエリは次のようになります。
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;
次に、完全な柔軟性があります。たとえば、顧客がその店を月に何回訪問するかをリンクテーブルに追加するとします。次に、次のようなクエリを記述できます。
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;
次に、この属性、visits_per_monthを使用して、各店舗の訪問数を示す地図上の線の太さを定義できます。