ClickHouse/docs/ja/sql-reference/functions/geo/coordinates.md

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

174 lines
5.5 KiB
Markdown
Raw Normal View History

2024-11-18 02:58:58 +00:00
---
slug: /ja/sql-reference/functions/geo/coordinates
sidebar_label: 地理座標
sidebar_position: 62
title: "地理座標を扱うための関数"
---
## greatCircleDistance
[大圏距離の公式](https://en.wikipedia.org/wiki/Great-circle_distance)を使用して、地球表面の2点間の距離を計算します。
``` sql
greatCircleDistance(lon1Deg, lat1Deg, lon2Deg, lat2Deg)
```
**入力パラメータ**
- `lon1Deg` — 最初の点の経度(度)。範囲: `[-180°, 180°]`
- `lat1Deg` — 最初の点の緯度(度)。範囲: `[-90°, 90°]`
- `lon2Deg` — 2番目の点の経度。範囲: `[-180°, 180°]`
- `lat2Deg` — 2番目の点の緯度。範囲: `[-90°, 90°]`
正の値は北緯および東経を示し、負の値は南緯および西経を示します。
**戻り値**
地球表面上の2点間の距離メートル単位
入力パラメータの値が範囲外の場合、例外が生成されます。
**例**
``` sql
SELECT greatCircleDistance(55.755831, 37.617673, -55.755831, -37.617673) AS greatCircleDistance
```
``` text
┌─greatCircleDistance─┐
│ 14128352 │
└─────────────────────┘
```
## geoDistance
`greatCircleDistance`に似ていますが、球体の代わりにWGS-84楕円体上での距離を計算します。これは地球のジオイドのより正確な近似です。パフォーマンスは`greatCircleDistance`と同じ(パフォーマンスの低下はなし)。地球上の距離を計算するためには`geoDistance`を使用することをお勧めします。
技術的な注記: 十分に近い点の場合、座標の中点での接平面上のメトリックを用いて平面近似を使用しています。
``` sql
geoDistance(lon1Deg, lat1Deg, lon2Deg, lat2Deg)
```
**入力パラメータ**
- `lon1Deg` — 最初の点の経度(度)。範囲: `[-180°, 180°]`
- `lat1Deg` — 最初の点の緯度(度)。範囲: `[-90°, 90°]`
- `lon2Deg` — 2番目の点の経度。範囲: `[-180°, 180°]`
- `lat2Deg` — 2番目の点の緯度。範囲: `[-90°, 90°]`
正の値は北緯および東経を示し、負の値は南緯および西経を示します。
**戻り値**
地球表面上の2点間の距離メートル単位
入力パラメータの値が範囲外の場合、例外が生成されます。
**例**
``` sql
SELECT geoDistance(38.8976, -77.0366, 39.9496, -75.1503) AS geoDistance
```
``` text
┌─geoDistance─┐
│ 212458.73 │
└─────────────┘
```
## greatCircleAngle
[大圏距離の公式](https://en.wikipedia.org/wiki/Great-circle_distance)を使用して、地球表面の2点間の中心角を計算します。
``` sql
greatCircleAngle(lon1Deg, lat1Deg, lon2Deg, lat2Deg)
```
**入力パラメータ**
- `lon1Deg` — 最初の点の経度(度)。
- `lat1Deg` — 最初の点の緯度(度)。
- `lon2Deg` — 2番目の点の経度
- `lat2Deg` — 2番目の点の緯度
**戻り値**
2点間の中心角度単位
**例**
``` sql
SELECT greatCircleAngle(0, 0, 45, 0) AS arc
```
``` text
┌─arc─┐
│ 45 │
└─────┘
```
## pointInEllipses
点が少なくとも1つの楕円に属しているかどうかをチェックします。
座標は直交座標系で幾何的なものであります。
``` sql
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`
**例**
``` sql
SELECT pointInEllipses(10., 10., 10., 9.1, 1., 0.9999)
```
``` text
┌─pointInEllipses(10., 10., 10., 9.1, 1., 0.9999)─┐
│ 1 │
└─────────────────────────────────────────────────┘
```
## pointInPolygon
点が平面上の多角形に属しているかどうかをチェックします。
``` sql
pointInPolygon((x, y), [(a, b), (c, d) ...], ...)
```
**入力値**
- `(x, y)` — 平面上の点の座標。データタイプ — [Tuple](../../data-types/tuple.md) — 2つの数のタプル。
- `[(a, b), (c, d) ...]` — 多角形の頂点。データタイプ — [Array](../../data-types/array.md)。各頂点は座標のペア `(a, b)` で表されます。頂点は時計回りまたは反時計回りの順序で指定する必要があります。頂点の最小数は 3 です。多角形は定数でなければなりません。
- この関数は、穴のある多角形(切り取られた部分)もサポートしています。この場合、切り取られた部分を定義する多角形を追加の引数で渡します。非単連結な多角形はサポートしていません。
**戻り値**
点が多角形の内部にある場合は `1` 、そうでない場合は `0`
点が多角形の境界上にある場合、関数は0または1どちらかを返す可能性があります。
**例**
``` sql
SELECT pointInPolygon((3., 3.), [(6, 0), (8, 4), (5, 8), (0, 2)]) AS res
```
``` text
┌─res─┐
│ 1 │
└─────┘
```