ここでは、地理情報の関数と述部を使用する地理情報照会の作成について説明します。
地理情報エクステンダーには、地理情報データに対してさまざまな操作を実行する関数が組み込まれています。ここに挙げる例では、地理情報関数を使って独自の地理情報照会を作成する方法を示します。
表 3 は、地理情報の関数と、それらの関数が実行できる操作のタイプを示したリストです。
関数のタイプ | 操作例 |
---|---|
計算 | 2 地点間の距離を計算する |
比較 | 洪水地帯に位置する全顧客を検出する |
データ交換 | サポートされる形式にデータを変換する |
変形 | 特定の地点から半径 5 マイルの範囲を追加する |
地理情報関数についての詳細は、 図形および関連する地理情報関数および SQL 照会のための地理情報関数を参照してください。
以下の照会は、各デパートからの平均的な顧客距離を検出します。この例で使用する地理情報関数は ST_Distance および ST_Within です。
SELECT s.id, AVG(db2gse.ST_Distance(c.location,s.location)) FROM customers c, stores s WHERE db2gse.ST_Within(c.location,s.zone)=1 GROUP BY s.id
以下の照会は、サンフランシスコ湾岸域に住む顧客の位置を検出します。この例で使用する地理情報関数は ST_AsText (データ交換) および ST_Within です。 ST_AsText は、c.location 列の地理情報データを OGC TEXT 形式に変換します。
SELECT db2gse.ST_AsText(c.location,cordref(1)) FROM customers c WHERE db2gse.ST_Within(c.location,:BayArea)=1
以下の照会は、10.5 マイル以上の長さの道路すべてを検出します。この例で使用する地理情報関数は ST_Length です。
SELECT s.name,s.id FROM street s WHERE db2gse.ST_Length(s.path) > 10.5
この照会は、洪水地帯、または洪水地帯の境界から 2 マイル以内に住む顧客を検出します。この例で使用する地理情報関数は ST_Buffer (変形) および ST_Within です。変数 :floodzone は、C/C++ にインプリメントされた組み込み SQL 上のホスト変数です。
SELECT c.name,c.phoneNo,c.address FROM customers c WHERE db2gse.ST_Within(c.location,ST_Buffer(:floodzone,2))=1