距離

2016-10-19 27 views
0

空間データを含む2つのMSSQLテーブルがあります。
- AddressPointsは - パイプライン - - アドレス(POINT構造)
のジオロケーションが含まれているパイプラインのジオロケーション(LINESTRING構造)
距離

が含まれていますAddressPointsテーブルには、最も近いパイプラインセグメントからの距離が含まれている必要があります。私は現在、効率的なクエリを作成しようとしています。私は次のクエリで終了しました:

しかし、AddressPointとPipelineテーブルには、実行速度に影響する膨大な量のデータが含まれています。 両方の表には空間索引が含まれていますが、この問合せで使用されるかどうかはわかりません。

+0

「MIN」は、すべての距離ではなく、最寄りの距離を探していることを示しています。 [このMSDNの記事](https://msdn.microsoft.com/en-us/library/ff929109.aspx)では、空間インデックスを使用する最近傍クエリを作成する方法について説明しています。要件はかなり厳しい –

答えて

0

は私が受け入れ可能な解決策を見つけたと思う:

select a.ogr_fid, min(a.geom.STDistance(p.geom)) 
from AddressPoint a 
inner join Pipeline p on a.geom.STDistance(p.geom) < 200 
group by a.ogr_fid 
order by a.ogr_fid 

このクエリは、質問からのクエリと同じ仕事をしていません。ただし、1秒で実行されます。最初のクエリの実行時間は47秒です。