Geoshape field type
geo_shape
データ型は、長方形、線、ポリゴンなどの任意のジオシェイプのインデックス作成と検索を容易にします。インデックスされるデータにポイント以外の形状が含まれている場合、このマッピングを使用する必要があります。データがポイントのみを含む場合、geo_point
または geo_shape
としてインデックスできます。
このタイプを使用するドキュメントは次のように使用できます:
- ジオシェイプを見つけるために:
- バウンディングボックス
- 中心点からの特定の距離
geo_shape
クエリ(例えば、交差するポリゴン)。
- 地理的グリッドによるドキュメントの集約:
Mapping Options
geo_shape
マッピングは、GeoJSON または WKT ジオメトリオブジェクトを geo_shape
タイプにマッピングします。これを有効にするには、ユーザーはフィールドを geo_shape
タイプに明示的にマッピングする必要があります。
GeoJSON および WKT、したがって Elasticsearch では、正しい 座標の順序は経度、緯度 (X, Y) です。これは、一般的に口語的な緯度、経度 (Y, X) を使用する多くの地理空間 API(例:Google マップ)とは異なります。
オプション | 説明 | デフォルト |
---|---|---|
orientation |
オプション。フィールドのデフォルト 方向 は、WKT ポリゴンのためのものです。 |
このパラメータは RIGHT
(反時計回り)または LEFT
(時計回り)の値のみを設定および返します。ただし、複数の方法で任意の値を指定できます。RIGHT
を設定するには、次の引数のいずれかまたはその大文字のバリアントを使用します:
right
counterclockwise
ccw
LEFT
を設定するには、次の引数のいずれかまたはその大文字のバリアントを使用します:left
clockwise
cw
|RIGHT
|
|ignore_malformed
| true の場合、無効な GeoJSON または WKT 形状は無視されます。false(デフォルト)の場合、無効な GeoJSON および WKT 形状は例外をスローし、ドキュメント全体を拒否します。 |false
|
|ignore_z_value
|true
(デフォルト)の場合、三次元ポイントが受け入れられます(ソースに保存されます)が、緯度と経度の値のみがインデックスされ、第三の次元は無視されます。false
の場合、緯度と経度(2次元)以外の値を含むジオポイントは例外をスローし、ドキュメント全体を拒否します。 |true
|
|coerce
|true
の場合、ポリゴン内の閉じていない線形リングは自動的に閉じられます。 |false
|
|index
| フィールドは迅速に検索可能であるべきですか?true
(デフォルト)およびfalse
を受け入れます。doc_values
のみが有効なフィールドは、クエリ可能ですが、遅くなります。 |true
|
|doc_values
| フィールドはディスクに列ストライド方式で保存されるべきですか?
その後、集約やスクリプトに使用できますか? |true
|
Indexing approach
ジオシェイプタイプは、形状を三角メッシュに分解し、各三角形を BKD ツリー内の 7 次元ポイントとしてインデックスすることによってインデックスされます。これにより、すべての空間関係が元の形状のエンコードされたベクトル表現を使用して計算されるため、ほぼ完璧な空間解像度(1e-7 小数度精度まで)が提供されます。テッセレータのパフォーマンスは、主にポリゴン/マルチポリゴンを定義する頂点の数に依存します。
Example
Python
resp = client.indices.create(
index="example",
mappings={
"properties": {
"location": {
"type": "geo_shape"
}
}
},
)
print(resp)
Ruby
response = client.indices.create(
index: 'example',
body: {
mappings: {
properties: {
location: {
type: 'geo_shape'
}
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "example",
mappings: {
properties: {
location: {
type: "geo_shape",
},
},
},
});
console.log(response);
Console
PUT /example
{
"mappings": {
"properties": {
"location": {
"type": "geo_shape"
}
}
}
}
Input Structure
形状は、GeoJSON または Well-Known Text (WKT) 形式を使用して表現できます。次の表は、GeoJSON および WKT を Elasticsearch タイプにマッピングしたものです:
GeoJSON タイプ | WKT タイプ | Elasticsearch タイプ | 説明 |
---|---|---|---|
Point |
POINT |
point |
単一の地理座標。注意:Elasticsearch は WGS-84 座標のみを使用します。 |
LineString |
LINESTRING |
linestring |
2 つ以上のポイントを指定して与えられた任意の線。 |
Polygon |
POLYGON |
polygon |
最初と最後のポイントが一致する 閉じた ポリゴン。したがって、n + 1 頂点を作成するには、n 辺のポリゴンと 4 頂点の最小数が必要です。 |
MultiPoint |
MULTIPOINT |
multipoint |
接続されていないが、関連している可能性のあるポイントの配列。 |
MultiLineString |
MULTILINESTRING |
multilinestring |
別々のラインストリングの配列。 |
MultiPolygon |
MULTIPOLYGON |
multipolygon |
別々のポリゴンの配列。 |
GeometryCollection |
GEOMETRYCOLLECTION |
geometrycollection |
複数のタイプが共存できる GeoJSON 形状(例:ポイントとラインストリング)に似ています。 |
N/A |
BBOX |
envelope |
左上と右下のポイントのみを指定することで指定されたバウンディング長方形またはエンベロープ。 |
すべてのタイプについて、内側の type
および coordinates
フィールドが必要です。
Point
ポイントは、建物の位置やスマートフォンのジオロケーション API によって提供される現在の位置など、単一の地理座標です。以下は、GeoJSON におけるポイントの例です。
Python
resp = client.index(
index="example",
document={
"location": {
"type": "Point",
"coordinates": [
-77.03653,
38.897676
]
}
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: {
type: 'Point',
coordinates: [
-77.03653,
38.897676
]
}
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location: {
type: "Point",
coordinates: [-77.03653, 38.897676],
},
},
});
console.log(response);
Console
POST /example/_doc
{
"location" : {
"type" : "Point",
"coordinates" : [-77.03653, 38.897676]
}
}
以下は、WKT におけるポイントの例です:
Python
resp = client.index(
index="example",
document={
"location": "POINT (-77.03653 38.897676)"
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: 'POINT (-77.03653 38.897676)'
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location: "POINT (-77.03653 38.897676)",
},
});
console.log(response);
Console
POST /example/_doc
{
"location" : "POINT (-77.03653 38.897676)"
}
LineString
ラインストリングは、2 つ以上の位置の配列によって定義されます。2 つのポイントのみを指定することで、ラインストリングは直線を表します。2 つ以上のポイントを指定すると、任意のパスが作成されます。以下は、GeoJSON におけるラインストリングの例です。
Python
resp = client.index(
index="example",
document={
"location": {
"type": "LineString",
"coordinates": [
[
-77.03653,
38.897676
],
[
-77.009051,
38.889939
]
]
}
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: {
type: 'LineString',
coordinates: [
[
-77.03653,
38.897676
],
[
-77.009051,
38.889939
]
]
}
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location: {
type: "LineString",
coordinates: [
[-77.03653, 38.897676],
[-77.009051, 38.889939],
],
},
},
});
console.log(response);
Console
POST /example/_doc
{
"location" : {
"type" : "LineString",
"coordinates" : [[-77.03653, 38.897676], [-77.009051, 38.889939]]
}
}
以下は、WKT におけるラインストリングの例です:
Python
resp = client.index(
index="example",
document={
"location": "LINESTRING (-77.03653 38.897676, -77.009051 38.889939)"
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: 'LINESTRING (-77.03653 38.897676, -77.009051 38.889939)'
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location: "LINESTRING (-77.03653 38.897676, -77.009051 38.889939)",
},
});
console.log(response);
Console
POST /example/_doc
{
"location" : "LINESTRING (-77.03653 38.897676, -77.009051 38.889939)"
}
上記のラインストリングは、ホワイトハウスからアメリカ合衆国議会議事堂までの直線を描きます。
Polygon
ポリゴンは、ポイントのリストによって定義されます。各(外側の)リストの最初と最後のポイントは同じでなければなりません(ポリゴンは閉じている必要があります)。以下は、GeoJSON におけるポリゴンの例です。
Python
resp = client.index(
index="example",
document={
"location": {
"type": "Polygon",
"coordinates": [
[
[
100,
0
],
[
101,
0
],
[
101,
1
],
[
100,
1
],
[
100,
0
]
]
]
}
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: {
type: 'Polygon',
coordinates: [
[
[
100,
0
],
[
101,
0
],
[
101,
1
],
[
100,
1
],
[
100,
0
]
]
]
}
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location: {
type: "Polygon",
coordinates: [
[
[100, 0],
[101, 0],
[101, 1],
[100, 1],
[100, 0],
],
],
},
},
});
console.log(response);
Console
POST /example/_doc
{
"location" : {
"type" : "Polygon",
"coordinates" : [
[ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ]
]
}
}
以下は、WKT におけるポリゴンの例です:
Python
resp = client.index(
index="example",
document={
"location": "POLYGON ((100.0 0.0, 101.0 0.0, 101.0 1.0, 100.0 1.0, 100.0 0.0))"
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: 'POLYGON ((100.0 0.0, 101.0 0.0, 101.0 1.0, 100.0 1.0, 100.0 0.0))'
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location:
"POLYGON ((100.0 0.0, 101.0 0.0, 101.0 1.0, 100.0 1.0, 100.0 0.0))",
},
});
console.log(response);
Console
POST /example/_doc
{
"location" : "POLYGON ((100.0 0.0, 101.0 0.0, 101.0 1.0, 100.0 1.0, 100.0 0.0))"
}
最初の配列はポリゴンの外部境界を表し、他の配列は内部形状(”穴”)を表します。以下は、穴のあるポリゴンの GeoJSON の例です:
Python
resp = client.index(
index="example",
document={
"location": {
"type": "Polygon",
"coordinates": [
[
[
100,
0
],
[
101,
0
],
[
101,
1
],
[
100,
1
],
[
100,
0
]
],
[
[
100.2,
0.2
],
[
100.8,
0.2
],
[
100.8,
0.8
],
[
100.2,
0.8
],
[
100.2,
0.2
]
]
]
}
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: {
type: 'Polygon',
coordinates: [
[
[
100,
0
],
[
101,
0
],
[
101,
1
],
[
100,
1
],
[
100,
0
]
],
[
[
100.2,
0.2
],
[
100.8,
0.2
],
[
100.8,
0.8
],
[
100.2,
0.8
],
[
100.2,
0.2
]
]
]
}
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location: {
type: "Polygon",
coordinates: [
[
[100, 0],
[101, 0],
[101, 1],
[100, 1],
[100, 0],
],
[
[100.2, 0.2],
[100.8, 0.2],
[100.8, 0.8],
[100.2, 0.8],
[100.2, 0.2],
],
],
},
},
});
console.log(response);
Console
POST /example/_doc
{
"location" : {
"type" : "Polygon",
"coordinates" : [
[ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ],
[ [100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2] ]
]
}
}
以下は、WKT における穴のあるポリゴンの例です:
Python
resp = client.index(
index="example",
document={
"location": "POLYGON ((100.0 0.0, 101.0 0.0, 101.0 1.0, 100.0 1.0, 100.0 0.0), (100.2 0.2, 100.8 0.2, 100.8 0.8, 100.2 0.8, 100.2 0.2))"
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: 'POLYGON ((100.0 0.0, 101.0 0.0, 101.0 1.0, 100.0 1.0, 100.0 0.0), (100.2 0.2, 100.8 0.2, 100.8 0.8, 100.2 0.8, 100.2 0.2))'
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location:
"POLYGON ((100.0 0.0, 101.0 0.0, 101.0 1.0, 100.0 1.0, 100.0 0.0), (100.2 0.2, 100.8 0.2, 100.8 0.8, 100.2 0.8, 100.2 0.2))",
},
});
console.log(response);
Console
POST /example/_doc
{
"location" : "POLYGON ((100.0 0.0, 101.0 0.0, 101.0 1.0, 100.0 1.0, 100.0 0.0), (100.2 0.2, 100.8 0.2, 100.8 0.8, 100.2 0.8, 100.2 0.2))"
}
Polygon orientation
ポリゴンの向きは、その頂点の順序を示します:RIGHT
(反時計回り)または LEFT
(時計回り)。Elasticsearch は、ポリゴンの向きを使用して、それが国際日付変更線(+/-180° 経度)を越えるかどうかを判断します。
WKT ポリゴンのデフォルトの向きを設定するには、orientation
マッピングパラメータ を使用します。これは、WKT 仕様がデフォルトの向きを指定または強制しないためです。
GeoJSON ポリゴンは、RIGHT
のデフォルトの向きを使用します。これは、orientation
マッピングパラメータの値に関係なく です。これは、GeoJSON 仕様 が外部ポリゴンに反時計回りの向きを使用し、内部形状に時計回りの向きを使用することを義務付けているためです。
GeoJSON ポリゴンのデフォルトの向きをオーバーライドするには、ドキュメントレベルの orientation
パラメータを使用します。たとえば、次のインデックスリクエストは、ドキュメントレベルの orientation
を LEFT
に指定します。
Python
resp = client.index(
index="example",
document={
"location": {
"type": "Polygon",
"orientation": "LEFT",
"coordinates": [
[
[
-177,
10
],
[
176,
15
],
[
172,
0
],
[
176,
-15
],
[
-177,
-10
],
[
-177,
10
]
]
]
}
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: {
type: 'Polygon',
orientation: 'LEFT',
coordinates: [
[
[
-177,
10
],
[
176,
15
],
[
172,
0
],
[
176,
-15
],
[
-177,
-10
],
[
-177,
10
]
]
]
}
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location: {
type: "Polygon",
orientation: "LEFT",
coordinates: [
[
[-177, 10],
[176, 15],
[172, 0],
[176, -15],
[-177, -10],
[-177, 10],
],
],
},
},
});
console.log(response);
Console
POST /example/_doc
{
"location" : {
"type" : "Polygon",
"orientation" : "LEFT",
"coordinates" : [
[ [-177.0, 10.0], [176.0, 15.0], [172.0, 0.0], [176.0, -15.0], [-177.0, -10.0], [-177.0, 10.0] ]
]
}
}
Elasticsearch は、ポリゴンの向きを使用して、それが国際日付変更線を越えるかどうかを判断します。ポリゴンの最小経度と最大経度の差が 180° 未満の場合、ポリゴンは日付変更線を越えず、その向きは影響を与えません。
ポリゴンの最小経度と最大経度の差が 180° 以上の場合、Elasticsearch はポリゴンのドキュメントレベルの orientation
がデフォルトの向きと異なるかどうかを確認します。向きが異なる場合、Elasticsearch はポリゴンが国際日付変更線を越えると見なし、ポリゴンを日付変更線で分割します。
MultiPoint
以下は、GeoJSON ポイントのリストの例です:
Python
resp = client.index(
index="example",
document={
"location": {
"type": "MultiPoint",
"coordinates": [
[
102,
2
],
[
103,
2
]
]
}
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: {
type: 'MultiPoint',
coordinates: [
[
102,
2
],
[
103,
2
]
]
}
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location: {
type: "MultiPoint",
coordinates: [
[102, 2],
[103, 2],
],
},
},
});
console.log(response);
Console
POST /example/_doc
{
"location" : {
"type" : "MultiPoint",
"coordinates" : [
[102.0, 2.0], [103.0, 2.0]
]
}
}
以下は、WKT ポイントのリストの例です:
Python
resp = client.index(
index="example",
document={
"location": "MULTIPOINT (102.0 2.0, 103.0 2.0)"
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: 'MULTIPOINT (102.0 2.0, 103.0 2.0)'
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location: "MULTIPOINT (102.0 2.0, 103.0 2.0)",
},
});
console.log(response);
Console
POST /example/_doc
{
"location" : "MULTIPOINT (102.0 2.0, 103.0 2.0)"
}
MultiLineString
以下は、GeoJSON ラインストリングのリストの例です:
Python
resp = client.index(
index="example",
document={
"location": {
"type": "MultiLineString",
"coordinates": [
[
[
102,
2
],
[
103,
2
],
[
103,
3
],
[
102,
3
]
],
[
[
100,
0
],
[
101,
0
],
[
101,
1
],
[
100,
1
]
],
[
[
100.2,
0.2
],
[
100.8,
0.2
],
[
100.8,
0.8
],
[
100.2,
0.8
]
]
]
}
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: {
type: 'MultiLineString',
coordinates: [
[
[
102,
2
],
[
103,
2
],
[
103,
3
],
[
102,
3
]
],
[
[
100,
0
],
[
101,
0
],
[
101,
1
],
[
100,
1
]
],
[
[
100.2,
0.2
],
[
100.8,
0.2
],
[
100.8,
0.8
],
[
100.2,
0.8
]
]
]
}
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location: {
type: "MultiLineString",
coordinates: [
[
[102, 2],
[103, 2],
[103, 3],
[102, 3],
],
[
[100, 0],
[101, 0],
[101, 1],
[100, 1],
],
[
[100.2, 0.2],
[100.8, 0.2],
[100.8, 0.8],
[100.2, 0.8],
],
],
},
},
});
console.log(response);
Console
POST /example/_doc
{
"location" : {
"type" : "MultiLineString",
"coordinates" : [
[ [102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0] ],
[ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0] ],
[ [100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8] ]
]
}
}
以下は、WKT ラインストリングのリストの例です:
Python
resp = client.index(
index="example",
document={
"location": "MULTILINESTRING ((102.0 2.0, 103.0 2.0, 103.0 3.0, 102.0 3.0), (100.0 0.0, 101.0 0.0, 101.0 1.0, 100.0 1.0), (100.2 0.2, 100.8 0.2, 100.8 0.8, 100.2 0.8))"
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: 'MULTILINESTRING ((102.0 2.0, 103.0 2.0, 103.0 3.0, 102.0 3.0), (100.0 0.0, 101.0 0.0, 101.0 1.0, 100.0 1.0), (100.2 0.2, 100.8 0.2, 100.8 0.8, 100.2 0.8))'
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location:
"MULTILINESTRING ((102.0 2.0, 103.0 2.0, 103.0 3.0, 102.0 3.0), (100.0 0.0, 101.0 0.0, 101.0 1.0, 100.0 1.0), (100.2 0.2, 100.8 0.2, 100.8 0.8, 100.2 0.8))",
},
});
console.log(response);
Console
POST /example/_doc
{
"location" : "MULTILINESTRING ((102.0 2.0, 103.0 2.0, 103.0 3.0, 102.0 3.0), (100.0 0.0, 101.0 0.0, 101.0 1.0, 100.0 1.0), (100.2 0.2, 100.8 0.2, 100.8 0.8, 100.2 0.8))"
}
MultiPolygon
以下は、GeoJSON ポリゴンのリストの例です(2 番目のポリゴンには穴があります):
Python
resp = client.index(
index="example",
document={
"location": {
"type": "MultiPolygon",
"coordinates": [
[
[
[
102,
2
],
[
103,
2
],
[
103,
3
],
[
102,
3
],
[
102,
2
]
]
],
[
[
[
100,
0
],
[
101,
0
],
[
101,
1
],
[
100,
1
],
[
100,
0
]
],
[
[
100.2,
0.2
],
[
100.8,
0.2
],
[
100.8,
0.8
],
[
100.2,
0.8
],
[
100.2,
0.2
]
]
]
]
}
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: {
type: 'MultiPolygon',
coordinates: [
[
[
[
102,
2
],
[
103,
2
],
[
103,
3
],
[
102,
3
],
[
102,
2
]
]
],
[
[
[
100,
0
],
[
101,
0
],
[
101,
1
],
[
100,
1
],
[
100,
0
]
],
[
[
100.2,
0.2
],
[
100.8,
0.2
],
[
100.8,
0.8
],
[
100.2,
0.8
],
[
100.2,
0.2
]
]
]
]
}
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location: {
type: "MultiPolygon",
coordinates: [
[
[
[102, 2],
[103, 2],
[103, 3],
[102, 3],
[102, 2],
],
],
[
[
[100, 0],
[101, 0],
[101, 1],
[100, 1],
[100, 0],
],
[
[100.2, 0.2],
[100.8, 0.2],
[100.8, 0.8],
[100.2, 0.8],
[100.2, 0.2],
],
],
],
},
},
});
console.log(response);
Console
POST /example/_doc
{
"location" : {
"type" : "MultiPolygon",
"coordinates" : [
[ [[102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0], [102.0, 2.0]] ],
[ [[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]],
[[100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2]] ]
]
}
}
以下は、WKT ポリゴンのリストの例です(2 番目のポリゴンには穴があります):
Python
resp = client.index(
index="example",
document={
"location": "MULTIPOLYGON (((102.0 2.0, 103.0 2.0, 103.0 3.0, 102.0 3.0, 102.0 2.0)), ((100.0 0.0, 101.0 0.0, 101.0 1.0, 100.0 1.0, 100.0 0.0), (100.2 0.2, 100.8 0.2, 100.8 0.8, 100.2 0.8, 100.2 0.2)))"
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: 'MULTIPOLYGON (((102.0 2.0, 103.0 2.0, 103.0 3.0, 102.0 3.0, 102.0 2.0)), ((100.0 0.0, 101.0 0.0, 101.0 1.0, 100.0 1.0, 100.0 0.0), (100.2 0.2, 100.8 0.2, 100.8 0.8, 100.2 0.8, 100.2 0.2)))'
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location:
"MULTIPOLYGON (((102.0 2.0, 103.0 2.0, 103.0 3.0, 102.0 3.0, 102.0 2.0)), ((100.0 0.0, 101.0 0.0, 101.0 1.0, 100.0 1.0, 100.0 0.0), (100.2 0.2, 100.8 0.2, 100.8 0.8, 100.2 0.8, 100.2 0.2)))",
},
});
console.log(response);
Console
POST /example/_doc
{
"location" : "MULTIPOLYGON (((102.0 2.0, 103.0 2.0, 103.0 3.0, 102.0 3.0, 102.0 2.0)), ((100.0 0.0, 101.0 0.0, 101.0 1.0, 100.0 1.0, 100.0 0.0), (100.2 0.2, 100.8 0.2, 100.8 0.8, 100.2 0.8, 100.2 0.2)))"
}
Geometry Collection
以下は、GeoJSON ジオメトリオブジェクトのコレクションの例です:
Python
resp = client.index(
index="example",
document={
"location": {
"type": "GeometryCollection",
"geometries": [
{
"type": "Point",
"coordinates": [
100,
0
]
},
{
"type": "LineString",
"coordinates": [
[
101,
0
],
[
102,
1
]
]
}
]
}
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: {
type: 'GeometryCollection',
geometries: [
{
type: 'Point',
coordinates: [
100,
0
]
},
{
type: 'LineString',
coordinates: [
[
101,
0
],
[
102,
1
]
]
}
]
}
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location: {
type: "GeometryCollection",
geometries: [
{
type: "Point",
coordinates: [100, 0],
},
{
type: "LineString",
coordinates: [
[101, 0],
[102, 1],
],
},
],
},
},
});
console.log(response);
Console
POST /example/_doc
{
"location" : {
"type": "GeometryCollection",
"geometries": [
{
"type": "Point",
"coordinates": [100.0, 0.0]
},
{
"type": "LineString",
"coordinates": [ [101.0, 0.0], [102.0, 1.0] ]
}
]
}
}
以下は、WKT ジオメトリオブジェクトのコレクションの例です:
Python
resp = client.index(
index="example",
document={
"location": "GEOMETRYCOLLECTION (POINT (100.0 0.0), LINESTRING (101.0 0.0, 102.0 1.0))"
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: 'GEOMETRYCOLLECTION (POINT (100.0 0.0), LINESTRING (101.0 0.0, 102.0 1.0))'
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location:
"GEOMETRYCOLLECTION (POINT (100.0 0.0), LINESTRING (101.0 0.0, 102.0 1.0))",
},
});
console.log(response);
Console
POST /example/_doc
{
"location" : "GEOMETRYCOLLECTION (POINT (100.0 0.0), LINESTRING (101.0 0.0, 102.0 1.0))"
}
Envelope
Elasticsearch は、envelope
タイプをサポートしており、これは形状の上部左点と下部右点の座標で構成され、[[minLon, maxLat], [maxLon, minLat]]
形式のバウンディング長方形を表します:
Python
resp = client.index(
index="example",
document={
"location": {
"type": "envelope",
"coordinates": [
[
100,
1
],
[
101,
0
]
]
}
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: {
type: 'envelope',
coordinates: [
[
100,
1
],
[
101,
0
]
]
}
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location: {
type: "envelope",
coordinates: [
[100, 1],
[101, 0],
],
},
},
});
console.log(response);
Console
POST /example/_doc
{
"location" : {
"type" : "envelope",
"coordinates" : [ [100.0, 1.0], [101.0, 0.0] ]
}
}
以下は、WKT BBOX 形式を使用したエンベロープの例です:
注意: WKT 仕様は、次の順序を期待します:minLon, maxLon, maxLat, minLat。
Python
resp = client.index(
index="example",
document={
"location": "BBOX (100.0, 102.0, 2.0, 0.0)"
},
)
print(resp)
Ruby
response = client.index(
index: 'example',
body: {
location: 'BBOX (100.0, 102.0, 2.0, 0.0)'
}
)
puts response
Js
const response = await client.index({
index: "example",
document: {
location: "BBOX (100.0, 102.0, 2.0, 0.0)",
},
});
console.log(response);
Console
POST /example/_doc
{
"location" : "BBOX (100.0, 102.0, 2.0, 0.0)"
}
Circle
GeoJSON も WKT も、ポイント半径の円タイプをサポートしていません。代わりに、円のインジェストプロセッサ を使用して、円を polygon
として近似します。
Sorting and Retrieving index Shapes
形状の複雑な入力構造とインデックス表現のため、現在のところ形状をソートしたり、そのフィールドを直接取得したりすることはできません。geo_shape
値は _source
フィールドを通じてのみ取得可能です。
Synthetic source
合成 _source
は、一般的に TSDB インデックス(index.mode
が time_series
に設定されているインデックス)のみで利用可能です。他のインデックスでは、合成 _source
は技術プレビュー中です。技術プレビュー中の機能は、将来のリリースで変更または削除される可能性があります。Elastic は問題を修正するために作業しますが、技術プレビュー中の機能は公式 GA 機能のサポート SLA の対象ではありません。
geo_shape
フィールドは、デフォルト構成で 合成 _source
をサポートします。