2 つのジオメトリが指定距離内にあるかどうかを判定するための負荷の低い方法。
geometry-expression.ST_WithinDistanceFilter(geo2,distance[, unit-name])
名前 | 型 | 説明 |
---|---|---|
geo2 |
ST_Geometry |
geometry-expression から距離が測定されるもう一方のジオメトリ値。 |
distance |
DOUBLE |
2 つのジオメトリ間の許容範囲距離。 |
unit-name |
VARCHAR(128) |
distance パラメータを解釈するときに使用する単位。デフォルトでは、空間参照系の単位が使用されます。単位名は、UNIT_TYPE が 'LINEAR' の ST_UNITS_OF_MEASURE ビュー内のローの UNIT_NAME カラムと一致させてください。 |
BIT geometry-expression と geo2 が指定の相互距離内にある可能性がある場合は 1 を返し、それ以外の場合は 0 を返します。
ST_WithinDistanceFilter メソッドは、(ST_WithinDistance メソッドのように) 2 つのジオメトリが指定の相互距離内にある可能性があるかどうかを調べる効率的なテストを提供します。geometry-expression が geo2 との間の指定距離内にある可能性がある場合は 1 を返し、それ以外の場合は 0 を返します。
このテストは ST_WithinDistance よりも低コストですが、2 つのジオメトリ間の最短距離が実際に指定距離より長い場合でも 1 を返すことがあります。そのため、このメソッドは、今後の処理でジオメトリ間の本当の距離を判断するときにプライマリフィルタとして使用できます。
ST_WithinDistanceFilter の実装は、格納されているジオメトリに関連付けられているメタデータに依存します。使用可能なメタデータはサーバのバージョン間で変わる可能性があるため (データのロード方法やクエリ内で ST_WithinDistanceFilter が使用される場所に応じて決定される)、geometry-expression が geo2 との間の指定距離内にない場合、式 geometry-expression.ST_WithinDistanceFilter(geo2, distance [, unit_name ]) は異なる結果を返すことがあります。geometry-expression が geo2 との間の指定距離内にある場合、ST_WithinDistanceFilter は常に 1 を返します。
ST_WithinDistanceFilter では、デフォルトで、使用可能な場合はジオメトリの元のフォーマットが使用されます。それ以外の場合は、内部フォーマットが使用されます。内部フォーマットと元のフォーマットの詳細については、STORAGE FORMAT 句、CREATE SPATIAL REFERENCE SYSTEM 文を参照してください。
SQL/MM (ISO/IEC 13249-3: 2006) ベンダー拡張
次の例では、ポイント (2,3) の距離 1.4 までの範囲内にある各シェイプについて、1 ローずつの結果セット (順序付けされたもの) を返します。結果には実際に指定距離内にないシェイプが含まれています。
SELECT ShapeID, ROUND( Shape.ST_Distance( NEW ST_Point( 2, 3 ) ), 2 ) AS dist FROM SpatialShapes WHERE ShapeID < 17 AND Shape.ST_WithinDistanceFilter( NEW ST_Point( 2, 3 ), 1.4 ) = 1 ORDER BY dist |
この例では、次の結果セットを返します。
ShapeID | dist |
---|---|
2 |
0.0 |
3 |
0.0 |
5 |
1.0 |
6 |
1.21 |
16 |
1.41 |
次の例では、カナダのハリファックス (NS) とワーテルロー (ON) を表すポイントを作成し、ST_WithinDistanceFilter を使用して、2 つのポイント間の距離は明らかに 750 マイル以内ではありませんが、850 マイルまでの範囲内にあることを示します。この例は、sa_install_feature システムプロシージャによって st_geometry_predefined_uom 機能がインストールされていることを前提としています。sa_install_feature システムプロシージャを参照してください。
SELECT NEW ST_Point( -63.573566, 44.646244, 4326 ) .ST_WithinDistanceFilter( NEW ST_Point( -80.522372, 43.465187, 4326 ) , 850, 'Statute mile' ) within850, NEW ST_Point( -63.573566, 44.646244, 4326 ) .ST_WithinDistanceFilter( NEW ST_Point( -80.522372, 43.465187, 4326 ) , 750, 'Statute mile' ) within750 |
この例では、次の結果セットを返します。
within850 | within750 |
---|---|
1 |
0 |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |