ジオグリッドプロセッサ
グリッドタイルまたはセルのジオグリッド定義を、形状を説明する通常のバウンディングボックスまたはポリゴンに変換します。これは、タイルの形状を空間的にインデックス可能なフィールドとして操作する必要がある場合に便利です。たとえば、geotile
フィールドの値"4/8/3"
は文字列フィールドとしてインデックス化できますが、それでは空間操作を行うことはできません。代わりに、"POLYGON ((0.0 40.979898069620134, 22.5 40.979898069620134, 22.5 55.77657301866769, 0.0 55.77657301866769, 0.0 40.979898069620134))"
の値に変換し、geo_shape
フィールドとしてインデックス化できるようにします。
名前 | 必須 | デフォルト | 説明 |
---|---|---|---|
field |
はい | - | ジオタイルとして解釈するフィールド。フィールド形式はtile_type によって決まります。 |
tile_type |
はい | - | 理解されるタイル形式は3つあります: geohash 、geotile 、geohex 。 |
target_field |
いいえ | field |
ポリゴン形状を割り当てるフィールド。デフォルトではfield がインプレースで更新されます。 |
parent_field |
いいえ | - | 指定された場合、親タイルが存在する場合は、そのタイルアドレスをこのフィールドに保存します。 |
children_field |
いいえ | - | 指定された場合、子タイルが存在する場合は、それらのタイルアドレスをこのフィールドに文字列の配列として保存します。 |
non_children_field |
いいえ | - | 指定された場合、交差する非子タイルが存在する場合は、それらのアドレスをこのフィールドに文字列の配列として保存します。 |
precision_field |
いいえ | - | 指定された場合、タイルの精度(ズーム)を整数としてこのフィールドに保存します。 |
ignore_missing |
いいえ | - | true およびfield が存在しない場合、プロセッサは静かに終了し、ドキュメントを変更しません。 |
target_format |
いいえ | “GeoJSON” | 生成されたポリゴンを保存する形式。WKT またはGeoJSON のいずれか。 |
description |
いいえ | - | プロセッサの説明。プロセッサの目的や構成を説明するのに便利です。 |
if |
いいえ | - | 条件付きでプロセッサを実行します。条件付きでプロセッサを実行するを参照してください。 |
ignore_failure |
いいえ | false |
プロセッサの失敗を無視します。パイプラインの失敗を処理するを参照してください。 |
on_failure |
いいえ | - | プロセッサの失敗を処理します。パイプラインの失敗を処理するを参照してください。 |
tag |
いいえ | - | プロセッサの識別子。デバッグやメトリクスに便利です。 |
このインジェストプロセッサの使用法を示すために、geocells
というインデックスを考え、そのフィールドgeocell
のマッピングがgeo_shape
型であるとします。geotile
およびgeohex
フィールドを使用してそのインデックスをポピュレートするために、2つのインジェストプロセッサを定義します:
Python
resp = client.indices.create(
index="geocells",
mappings={
"properties": {
"geocell": {
"type": "geo_shape"
}
}
},
)
print(resp)
resp1 = client.ingest.put_pipeline(
id="geotile2shape",
description="translate rectangular z/x/y geotile to bounding box",
processors=[
{
"geo_grid": {
"field": "geocell",
"tile_type": "geotile"
}
}
],
)
print(resp1)
resp2 = client.ingest.put_pipeline(
id="geohex2shape",
description="translate H3 cell to polygon",
processors=[
{
"geo_grid": {
"field": "geocell",
"tile_type": "geohex",
"target_format": "wkt"
}
}
],
)
print(resp2)
Ruby
response = client.indices.create(
index: 'geocells',
body: {
mappings: {
properties: {
geocell: {
type: 'geo_shape'
}
}
}
}
)
puts response
response = client.ingest.put_pipeline(
id: 'geotile2shape',
body: {
description: 'translate rectangular z/x/y geotile to bounding box',
processors: [
{
geo_grid: {
field: 'geocell',
tile_type: 'geotile'
}
}
]
}
)
puts response
response = client.ingest.put_pipeline(
id: 'geohex2shape',
body: {
description: 'translate H3 cell to polygon',
processors: [
{
geo_grid: {
field: 'geocell',
tile_type: 'geohex',
target_format: 'wkt'
}
}
]
}
)
puts response
Js
const response = await client.indices.create({
index: "geocells",
mappings: {
properties: {
geocell: {
type: "geo_shape",
},
},
},
});
console.log(response);
const response1 = await client.ingest.putPipeline({
id: "geotile2shape",
description: "translate rectangular z/x/y geotile to bounding box",
processors: [
{
geo_grid: {
field: "geocell",
tile_type: "geotile",
},
},
],
});
console.log(response1);
const response2 = await client.ingest.putPipeline({
id: "geohex2shape",
description: "translate H3 cell to polygon",
processors: [
{
geo_grid: {
field: "geocell",
tile_type: "geohex",
target_format: "wkt",
},
},
],
});
console.log(response2);
コンソール
PUT geocells
{
"mappings": {
"properties": {
"geocell": {
"type": "geo_shape"
}
}
}
}
PUT _ingest/pipeline/geotile2shape
{
"description": "translate rectangular z/x/y geotile to bounding box",
"processors": [
{
"geo_grid": {
"field": "geocell",
"tile_type": "geotile"
}
}
]
}
PUT _ingest/pipeline/geohex2shape
{
"description": "translate H3 cell to polygon",
"processors": [
{
"geo_grid": {
"field": "geocell",
"tile_type": "geohex",
"target_format": "wkt"
}
}
]
}
これらの2つのパイプラインは、geocells
インデックスにドキュメントをインデックス化するために使用できます。geocell
フィールドは、z/x/y
形式の長方形タイルまたはH3セルアドレスのいずれかの文字列バージョンになります。結果のジオメトリは、geo_shape
フィールドとして、GeoJSONまたはWell-Known Text形式で表現され、インデックス化されます。
例: GeoJSONのエンベロープを持つ長方形ジオタイル
この例では、geocell
フィールドがz/x/y
形式で定義されている値を持ち、GeoJSONエンベロープとしてインデックス化されます。これは、上記のインジェストプロセッサがデフォルトのtarget_format
で定義されているためです。
Python
resp = client.index(
index="geocells",
id="1",
pipeline="geotile2shape",
document={
"geocell": "4/8/5"
},
)
print(resp)
resp1 = client.get(
index="geocells",
id="1",
)
print(resp1)
Ruby
response = client.index(
index: 'geocells',
id: 1,
pipeline: 'geotile2shape',
body: {
geocell: '4/8/5'
}
)
puts response
response = client.get(
index: 'geocells',
id: 1
)
puts response
Js
const response = await client.index({
index: "geocells",
id: 1,
pipeline: "geotile2shape",
document: {
geocell: "4/8/5",
},
});
console.log(response);
const response1 = await client.get({
index: "geocells",
id: 1,
});
console.log(response1);
コンソール
PUT geocells/_doc/1?pipeline=geotile2shape
{
"geocell": "4/8/5"
}
GET geocells/_doc/1
レスポンスは、インジェストプロセッサがgeocell
フィールドをインデックス可能なgeo_shape
に置き換えた方法を示しています:
コンソール-結果
{
"_index": "geocells",
"_id": "1",
"_version": 1,
"_seq_no": 0,
"_primary_term": 1,
"found": true,
"_source": {
"geocell": {
"type": "Envelope",
"coordinates": [
[ 0.0, 55.77657301866769 ],
[ 22.5, 40.979898069620134 ]
]
}
}
}
例: WKT形式のポリゴンを持つ六角形ジオヘックス
この例では、geocell
フィールドがH3文字列アドレスを持ち、WKTポリゴンとしてインデックス化されます。これは、このインジェストプロセッサがtarget_format
を明示的に定義しているためです。
Python
resp = client.index(
index="geocells",
id="1",
pipeline="geohex2shape",
document={
"geocell": "811fbffffffffff"
},
)
print(resp)
resp1 = client.get(
index="geocells",
id="1",
)
print(resp1)
Ruby
response = client.index(
index: 'geocells',
id: 1,
pipeline: 'geohex2shape',
body: {
geocell: '811fbffffffffff'
}
)
puts response
response = client.get(
index: 'geocells',
id: 1
)
puts response
Js
const response = await client.index({
index: "geocells",
id: 1,
pipeline: "geohex2shape",
document: {
geocell: "811fbffffffffff",
},
});
console.log(response);
const response1 = await client.get({
index: "geocells",
id: 1,
});
console.log(response1);
コンソール
PUT geocells/_doc/1?pipeline=geohex2shape
{
"geocell": "811fbffffffffff"
}
GET geocells/_doc/1
レスポンスは、インジェストプロセッサがgeocell
フィールドをインデックス可能なgeo_shape
に置き換えた方法を示しています:
コンソール-結果
{
"_index": "geocells",
"_id": "1",
"_version": 1,
"_seq_no": 0,
"_primary_term": 1,
"found": true,
"_source": {
"geocell": "POLYGON ((1.1885095294564962 49.470279179513454, 2.0265689212828875 45.18424864858389, 7.509948452934623 43.786609335802495, 12.6773177459836 46.40695743262768, 12.345747342333198 50.55427505169064, 6.259687012061477 51.964770150370896, 3.6300085578113794 50.610463307239115, 1.1885095294564962 49.470279179513454))"
}
}
例: 豊富なタイルの詳細
geo_gridプロセッサオプションで説明されているように、設定できる他の多くのフィールドがあり、利用可能な情報を豊かにします。たとえば、H3タイルには7つの子タイルがありますが、最初のタイルだけが親タイルに完全に含まれています。残りの6つは親と部分的に重なっており、親と重なるさらに6つの非子タイルが存在します。これは、インジェストプロセッサに親と子の追加フィールドを追加することで調査できます:
Python
resp = client.ingest.put_pipeline(
id="geohex2shape",
description="translate H3 cell to polygon with enriched fields",
processors=[
{
"geo_grid": {
"description": "Ingest H3 cells like '811fbffffffffff' and create polygons",
"field": "geocell",
"tile_type": "geohex",
"target_format": "wkt",
"target_field": "shape",
"parent_field": "parent",
"children_field": "children",
"non_children_field": "nonChildren",
"precision_field": "precision"
}
}
],
)
print(resp)
Ruby
response = client.ingest.put_pipeline(
id: 'geohex2shape',
body: {
description: 'translate H3 cell to polygon with enriched fields',
processors: [
{
geo_grid: {
description: "Ingest H3 cells like '811fbffffffffff' and create polygons",
field: 'geocell',
tile_type: 'geohex',
target_format: 'wkt',
target_field: 'shape',
parent_field: 'parent',
children_field: 'children',
non_children_field: 'nonChildren',
precision_field: 'precision'
}
}
]
}
)
puts response
Js
const response = await client.ingest.putPipeline({
id: "geohex2shape",
description: "translate H3 cell to polygon with enriched fields",
processors: [
{
geo_grid: {
description:
"Ingest H3 cells like '811fbffffffffff' and create polygons",
field: "geocell",
tile_type: "geohex",
target_format: "wkt",
target_field: "shape",
parent_field: "parent",
children_field: "children",
non_children_field: "nonChildren",
precision_field: "precision",
},
},
],
});
console.log(response);
コンソール
PUT _ingest/pipeline/geohex2shape
{
"description": "translate H3 cell to polygon with enriched fields",
"processors": [
{
"geo_grid": {
"description": "Ingest H3 cells like '811fbffffffffff' and create polygons",
"field": "geocell",
"tile_type": "geohex",
"target_format": "wkt",
"target_field": "shape",
"parent_field": "parent",
"children_field": "children",
"non_children_field": "nonChildren",
"precision_field": "precision"
}
}
]
}
ドキュメントをインデックス化して異なる結果を確認します:
Python
resp = client.index(
index="geocells",
id="1",
pipeline="geohex2shape",
document={
"geocell": "811fbffffffffff"
},
)
print(resp)
resp1 = client.get(
index="geocells",
id="1",
)
print(resp1)
Ruby
response = client.index(
index: 'geocells',
id: 1,
pipeline: 'geohex2shape',
body: {
geocell: '811fbffffffffff'
}
)
puts response
response = client.get(
index: 'geocells',
id: 1
)
puts response
Js
const response = await client.index({
index: "geocells",
id: 1,
pipeline: "geohex2shape",
document: {
geocell: "811fbffffffffff",
},
});
console.log(response);
const response1 = await client.get({
index: "geocells",
id: 1,
});
console.log(response1);
コンソール
PUT geocells/_doc/1?pipeline=geohex2shape
{
"geocell": "811fbffffffffff"
}
GET geocells/_doc/1
コンソール-結果
{
"_index": "geocells",
"_id": "1",
"_version": 1,
"_seq_no": 0,
"_primary_term": 1,
"found": true,
"_source": {
"parent": "801ffffffffffff",
"geocell": "811fbffffffffff",
"precision": 1,
"shape": "POLYGON ((1.1885095294564962 49.470279179513454, 2.0265689212828875 45.18424864858389, 7.509948452934623 43.786609335802495, 12.6773177459836 46.40695743262768, 12.345747342333198 50.55427505169064, 6.259687012061477 51.964770150370896, 3.6300085578113794 50.610463307239115, 1.1885095294564962 49.470279179513454))",
"children": [
"821f87fffffffff",
"821f8ffffffffff",
"821f97fffffffff",
"821f9ffffffffff",
"821fa7fffffffff",
"821faffffffffff",
"821fb7fffffffff"
],
"nonChildren": [
"821ea7fffffffff",
"82186ffffffffff",
"82396ffffffffff",
"821f17fffffffff",
"821e37fffffffff",
"82194ffffffffff"
]
}
}
この追加情報により、たとえば、H3セル、その子、および交差する非子セルの視覚化を作成できるようになります。