ClickHouse/docs/ja/sql-reference/functions/geo/coordinates.md
2024-11-18 11:58:58 +09:00

5.5 KiB
Raw Blame History

slug sidebar_label sidebar_position title
/ja/sql-reference/functions/geo/coordinates 地理座標 62 地理座標を扱うための関数

greatCircleDistance

大圏距離の公式を使用して、地球表面の2点間の距離を計算します。

greatCircleDistance(lon1Deg, lat1Deg, lon2Deg, lat2Deg)

入力パラメータ

  • lon1Deg — 最初の点の経度(度)。範囲: [-180°, 180°]
  • lat1Deg — 最初の点の緯度(度)。範囲: [-90°, 90°]
  • lon2Deg — 2番目の点の経度。範囲: [-180°, 180°]
  • lat2Deg — 2番目の点の緯度。範囲: [-90°, 90°]

正の値は北緯および東経を示し、負の値は南緯および西経を示します。

戻り値

地球表面上の2点間の距離メートル単位

入力パラメータの値が範囲外の場合、例外が生成されます。

SELECT greatCircleDistance(55.755831, 37.617673, -55.755831, -37.617673) AS greatCircleDistance
┌─greatCircleDistance─┐
│            14128352 │
└─────────────────────┘

geoDistance

greatCircleDistanceに似ていますが、球体の代わりにWGS-84楕円体上での距離を計算します。これは地球のジオイドのより正確な近似です。パフォーマンスはgreatCircleDistanceと同じ(パフォーマンスの低下はなし)。地球上の距離を計算するためにはgeoDistanceを使用することをお勧めします。

技術的な注記: 十分に近い点の場合、座標の中点での接平面上のメトリックを用いて平面近似を使用しています。

geoDistance(lon1Deg, lat1Deg, lon2Deg, lat2Deg)

入力パラメータ

  • lon1Deg — 最初の点の経度(度)。範囲: [-180°, 180°]
  • lat1Deg — 最初の点の緯度(度)。範囲: [-90°, 90°]
  • lon2Deg — 2番目の点の経度。範囲: [-180°, 180°]
  • lat2Deg — 2番目の点の緯度。範囲: [-90°, 90°]

正の値は北緯および東経を示し、負の値は南緯および西経を示します。

戻り値

地球表面上の2点間の距離メートル単位

入力パラメータの値が範囲外の場合、例外が生成されます。

SELECT geoDistance(38.8976, -77.0366, 39.9496, -75.1503) AS geoDistance
┌─geoDistance─┐
│   212458.73 │
└─────────────┘

greatCircleAngle

大圏距離の公式を使用して、地球表面の2点間の中心角を計算します。

greatCircleAngle(lon1Deg, lat1Deg, lon2Deg, lat2Deg)

入力パラメータ

  • lon1Deg — 最初の点の経度(度)。
  • lat1Deg — 最初の点の緯度(度)。
  • lon2Deg — 2番目の点の経度
  • lat2Deg — 2番目の点の緯度

戻り値

2点間の中心角度単位

SELECT greatCircleAngle(0, 0, 45, 0) AS arc
┌─arc─┐
│  45 │
└─────┘

pointInEllipses

点が少なくとも1つの楕円に属しているかどうかをチェックします。 座標は直交座標系で幾何的なものであります。

pointInEllipses(x, y, x, y, a, b,...,xₙ, yₙ, aₙ, bₙ)

入力パラメータ

  • x, y — 平面上の点の座標。
  • xᵢ, yᵢi番目の楕円の中心の座標。
  • aᵢ, bᵢi番目の楕円のx, y座標単位の長軸。

入力パラメータは 2+4⋅n でなければならず、ここで n は楕円の数です。

戻り値

点が少なくとも1つの楕円の内部にある場合は 1 、そうでない場合は 0

SELECT pointInEllipses(10., 10., 10., 9.1, 1., 0.9999)
┌─pointInEllipses(10., 10., 10., 9.1, 1., 0.9999)─┐
│                                               1 │
└─────────────────────────────────────────────────┘

pointInPolygon

点が平面上の多角形に属しているかどうかをチェックします。

pointInPolygon((x, y), [(a, b), (c, d) ...], ...)

入力値

  • (x, y) — 平面上の点の座標。データタイプ — Tuple — 2つの数のタプル。
  • [(a, b), (c, d) ...] — 多角形の頂点。データタイプ — Array。各頂点は座標のペア (a, b) で表されます。頂点は時計回りまたは反時計回りの順序で指定する必要があります。頂点の最小数は 3 です。多角形は定数でなければなりません。
  • この関数は、穴のある多角形(切り取られた部分)もサポートしています。この場合、切り取られた部分を定義する多角形を追加の引数で渡します。非単連結な多角形はサポートしていません。

戻り値

点が多角形の内部にある場合は 1 、そうでない場合は 0 。 点が多角形の境界上にある場合、関数は0または1どちらかを返す可能性があります。

SELECT pointInPolygon((3., 3.), [(6, 0), (8, 4), (5, 8), (0, 2)]) AS res
┌─res─┐
│   1 │
└─────┘