# 地理空間関数

# greatCircleDistance

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

greatCircleDistance(lon1Deg, lat1Deg, lon2Deg, lat2Deg)

入力パラメータ

  • lon1Deg — 第1の点の経度(度単位)。範囲: [-180°, 180°]
  • lat1Deg — 第1の点の緯度(度単位)。範囲: [-90°, 90°]
  • lon2Deg — 第2の点の経度(度単位)。範囲: [-180°, 180°]
  • lat2Deg — 第2の点の緯度(度単位)。範囲: [-90°, 90°]
  • 正の値は北緯と東経を表し、負の値は南緯と西経を表します。

返される値

  • 地球の表面上の2点間の距離(メートル単位)。
  • 入力パラメータの値が範囲外の場合は例外が発生します。

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

# geoDistance

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

技術的な注意: 十分に近い点については、座標の中点で接線平面上のメトリックを使用して距離を計算します。

geoDistance(lon1Deg, lat1Deg, lon2Deg, lat2Deg)

入力パラメータ

  • lon1Deg — 第1の点の経度(度単位)。範囲: [-180°, 180°]
  • lat1Deg — 第1の点の緯度(度単位)。範囲: [-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   │
└─────────────┘

# H3

インデックスを取得: https://wolf-h3-viewer.glitch.me (opens new window)

  • (8831aa5039fffff)16 = (613363270285262847)10

有効な h3IsValid(h3index) を確認する

SELECT h3IsValid(613363270285262847) AS h3IsValid;
┌─h3IsValid─┐
│ 1         │
└───────────┘

H3 インデックスを経度と緯度に変換する h3ToGeo(h3Index)

SELECT h3ToGeo(613363270285262847) AS coordinates;
┌─coordinates───────────────────────────┐
│(116.29523629955709,39.984633235997315)│
└───────────────────────────────────────┘

頂点の配列に変換する h3ToGeoBoundary

SELECT h3ToGeoBoundary(613363270285262847) AS coordinates;
┌─coordinates──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ [(39.98791325592796,116.2925333574096),(39.98386803718472,116.29020686993137),(39.98058822646115,116.29290984546513),(39.98135339622932,116.297938782017),(39.98539816328819,116.30026548576008),(39.98867821224181,116.29756303675612)] │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

# h3IsValid

指定された数値が有効なH3 (opens new window)インデックスかどうかを確認します。

h3IsValid(h3index)

パラメータ

h3index — 六角形のインデックス番号。タイプ: UInt64。

返される値

  • 1 — 数値は有効なH3インデックスです。
  • 0 — 数値は有効なH3インデックスではありません。
  • タイプ: UInt8。

SELECT h3IsValid(617301318803390464) AS h3IsValid;
┌─h3IsValid─┐
│ 1         │
└───────────┘

# h3ToGeo

指定されたH3 (opens new window)インデックスに対応する重心の経度と緯度を返します。

h3ToGeo(h3Index)

引数

h3Index — H3 インデックス。UInt64。

返される値

2つの値からなるタプル: tuple(lon,lat)lon — 経度。Float64。lat — 緯度。Float64。

SELECT h3ToGeo(617301318803390464) AS coordinates;
┌─coordinates───────────────────────────┐
│ (35.537867206326645,54.20746993771632)│
└───────────────────────────────────────┘

# h3ToGeoBoundary

指定されたH3インデックスに対応する境界に対応する (lon, lat) のペアの配列を返します。

h3ToGeoBoundary(h3Index)

引数

h3Index — H3 インデックス。タイプ: UInt64。

返される値

(lon, lat) のペアの配列。タイプ: Array(Float64, Float64)。

SELECT h3ToGeoBoundary(617301318803390464) AS coordinates;
┌─coordinates───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ [(54.20668646205218,35.53529359582246),(54.20566163343774,35.537605905213915),(54.20644505711934,35.54017955058831),(54.208253376128475,35.54044097223983),(54.209278241418595,35.53812853031426),(54.20849475102178,35.535554799273164)] │
└────────────────────────────────────────────────────────────────