次の方法で共有


geo_intersects_2lines()

2 つの線または複数の線が交差するかどうかを計算します。

構文

geo_intersects_2lines(lineString1,lineString2)

構文規則について詳しく知る。

パラメーター

名前 必須 説明
lineString1 dynamic ✔️ GeoJSON 形式の行または複数行。
lineString2 dynamic ✔️ GeoJSON 形式の行または複数行。

戻り値

2 つの線または複数の線が交差するかどうかを示します。 LineString または multiLineString が無効な場合は、クエリによって null の結果が生成されます。

Note

  • 地理空間座標は、WGS-84 座標参照系によって表されるものとして解釈されます。
  • 地球上の距離の測定に使用される測地系は、球体となっています。 線のエッジは、球体の測地線です。
  • 入力線のエッジが直交直線の場合は、geo_line_densify () を使用して平面のエッジを測地線に変換することを検討してください。

LineString の定義と制約

dynamic({"type": "LineString","coordinates": [[lng_1,lat_1], [lng_2,lat_2], ..., [lng_N,lat_N]]})

dynamic({"type": "MultiLineString","coordinates": [[line_1, line_2, ..., line_N]]})

  • LineString 座標配列には、少なくとも 2 つのエントリが含まれている必要があります。
  • 座標 [経度、緯度] は有効である必要があります。経度は [-180, +180] の範囲の実数で、緯度は [-90, +90] の範囲の実数です。
  • エッジの長さは 180 度未満でなければなりません。 2 つの頂点の間の最短のエッジが選択されます。

ヒント

パフォーマンスを向上させるには、リテラル LineString または MultiLineString を使用します。

次の例では、任意の 2 つのリテラル線が交差するかどうかを確認します。

let lineString1 = dynamic({"type":"LineString","coordinates":[[-73.978929,40.785155],[-73.980903,40.782621]]});
let lineString2 = dynamic({"type":"LineString","coordinates":[[-73.985195,40.788275],[-73.974552,40.779761]]});
print intersects = geo_intersects_2lines(lineString1, lineString2)

出力

交差する
True

次の例では、NYC GeoJSON 道路テーブル内で、関心のある線と交差するすべての道路を検索します。

let my_road = dynamic({"type":"LineString","coordinates":[[-73.97892951965332,40.78515573551921],[-73.98090362548828,40.78262115769851]]});
NY_Manhattan_Roads
| project name = features.properties.Label, road = features.geometry
| where geo_intersects_2lines(road, my_road)
| project name

出力

name
ブロードウェイ
西 78 St
西 79 St
西 80 St
西 81 St

次の例では、行の 1 つが無効であるため、null の結果が返されます。

let lineString1 = dynamic({"type":"LineString","coordinates":[[-73.978929,40.785155],[-73.980903,40.782621]]});
let lineString2 = dynamic({"type":"LineString","coordinates":[[-73.985195,40.788275]]});
print isnull(geo_intersects_2lines(lineString1, lineString2))

出力

print_0
True