円処理装置
形状の円定義を、近似する正多角形に変換します。
名前 | 必須 | デフォルト | 説明 |
---|---|---|---|
field |
はい | - | 円として解釈するフィールド。WKT形式の文字列またはGeoJSON用のマップのいずれか。 |
target_field |
いいえ | field |
ポリゴン形状を割り当てるフィールド。デフォルトではfield がその場で更新されます。 |
ignore_missing |
いいえ | false |
true およびfield が存在しない場合、プロセッサは静かに終了し、ドキュメントを変更しません。 |
error_distance |
はい | - | 中心から側面までの内接距離と円の半径の違い(geo_shape ではメートル単位、shape では単位なしで測定) |
shape_type |
はい | - | 円を処理する際に使用するフィールドマッピングタイプ:geo_shape またはshape |
description |
いいえ | - | プロセッサの説明。プロセッサの目的や設定を説明するのに役立ちます。 |
if |
いいえ | - | 条件付きでプロセッサを実行します。条件付きでプロセッサを実行するを参照してください。 |
ignore_failure |
いいえ | false |
プロセッサの失敗を無視します。パイプラインの失敗を処理するを参照してください。 |
on_failure |
いいえ | - | プロセッサの失敗を処理します。パイプラインの失敗を処理するを参照してください。 |
tag |
いいえ | - | プロセッサの識別子。デバッグやメトリクスに役立ちます。 |
Python
resp = client.indices.create(
index="circles",
mappings={
"properties": {
"circle": {
"type": "geo_shape"
}
}
},
)
print(resp)
resp1 = client.ingest.put_pipeline(
id="polygonize_circles",
description="translate circle to polygon",
processors=[
{
"circle": {
"field": "circle",
"error_distance": 28,
"shape_type": "geo_shape"
}
}
],
)
print(resp1)
Ruby
response = client.indices.create(
index: 'circles',
body: {
mappings: {
properties: {
circle: {
type: 'geo_shape'
}
}
}
}
)
puts response
response = client.ingest.put_pipeline(
id: 'polygonize_circles',
body: {
description: 'translate circle to polygon',
processors: [
{
circle: {
field: 'circle',
error_distance: 28,
shape_type: 'geo_shape'
}
}
]
}
)
puts response
Js
const response = await client.indices.create({
index: "circles",
mappings: {
properties: {
circle: {
type: "geo_shape",
},
},
},
});
console.log(response);
const response1 = await client.ingest.putPipeline({
id: "polygonize_circles",
description: "translate circle to polygon",
processors: [
{
circle: {
field: "circle",
error_distance: 28,
shape_type: "geo_shape",
},
},
],
});
console.log(response1);
コンソール
PUT circles
{
"mappings": {
"properties": {
"circle": {
"type": "geo_shape"
}
}
}
}
PUT _ingest/pipeline/polygonize_circles
{
"description": "translate circle to polygon",
"processors": [
{
"circle": {
"field": "circle",
"error_distance": 28.0,
"shape_type": "geo_shape"
}
}
]
}
上記のパイプラインを使用して、circles
インデックスにドキュメントをインデックスすることを試みることができます。円はWKT円またはGeoJSON円として表現できます。結果のポリゴンは、入力円と同じ形式で表現され、インデックスされます。WKTはWKTポリゴンに変換され、GeoJSON円はGeoJSONポリゴンに変換されます。
極を含む円はサポートされていません。
例: Well Known Textで定義された円
この例では、WKT形式で定義された円がインデックスされます。
Python
resp = client.index(
index="circles",
id="1",
pipeline="polygonize_circles",
document={
"circle": "CIRCLE (30 10 40)"
},
)
print(resp)
resp1 = client.get(
index="circles",
id="1",
)
print(resp1)
Ruby
response = client.index(
index: 'circles',
id: 1,
pipeline: 'polygonize_circles',
body: {
circle: 'CIRCLE (30 10 40)'
}
)
puts response
response = client.get(
index: 'circles',
id: 1
)
puts response
Js
const response = await client.index({
index: "circles",
id: 1,
pipeline: "polygonize_circles",
document: {
circle: "CIRCLE (30 10 40)",
},
});
console.log(response);
const response1 = await client.get({
index: "circles",
id: 1,
});
console.log(response1);
コンソール
PUT circles/_doc/1?pipeline=polygonize_circles
{
"circle": "CIRCLE (30 10 40)"
}
GET circles/_doc/1
コンソール-結果
{
"found": true,
"_index": "circles",
"_id": "1",
"_version": 1,
"_seq_no": 22,
"_primary_term": 1,
"_source": {
"circle": "POLYGON ((30.000365257263184 10.0, 30.000111397193788 10.00034284530941, 29.999706043744222 10.000213571721195, 29.999706043744222 9.999786428278805, 30.000111397193788 9.99965715469059, 30.000365257263184 10.0))"
}
}
例: GeoJSONで定義された円
この例では、GeoJSON形式で定義された円がインデックスされます。
Python
resp = client.index(
index="circles",
id="2",
pipeline="polygonize_circles",
document={
"circle": {
"type": "circle",
"radius": "40m",
"coordinates": [
30,
10
]
}
},
)
print(resp)
resp1 = client.get(
index="circles",
id="2",
)
print(resp1)
Ruby
response = client.index(
index: 'circles',
id: 2,
pipeline: 'polygonize_circles',
body: {
circle: {
type: 'circle',
radius: '40m',
coordinates: [
30,
10
]
}
}
)
puts response
response = client.get(
index: 'circles',
id: 2
)
puts response
Js
const response = await client.index({
index: "circles",
id: 2,
pipeline: "polygonize_circles",
document: {
circle: {
type: "circle",
radius: "40m",
coordinates: [30, 10],
},
},
});
console.log(response);
const response1 = await client.get({
index: "circles",
id: 2,
});
console.log(response1);
コンソール
PUT circles/_doc/2?pipeline=polygonize_circles
{
"circle": {
"type": "circle",
"radius": "40m",
"coordinates": [30, 10]
}
}
GET circles/_doc/2
コンソール-結果
{
"found": true,
"_index": "circles",
"_id": "2",
"_version": 1,
"_seq_no": 22,
"_primary_term": 1,
"_source": {
"circle": {
"coordinates": [
[
[30.000365257263184, 10.0],
[30.000111397193788, 10.00034284530941],
[29.999706043744222, 10.000213571721195],
[29.999706043744222, 9.999786428278805],
[30.000111397193788, 9.99965715469059],
[30.000365257263184, 10.0]
]
],
"type": "Polygon"
}
}
}
精度に関する注意事項
円を表すポリゴンの精度はerror_distance
として定義されます。この差が小さいほど、ポリゴンは完璧な円に近づきます。
以下は、円の半径が異なる入力に対してポリゴンの側面数にどのように影響するかを示す表です。
最小側面数は4
で、最大は1000
です。
エラーディスタンス | メートル単位の半径 | ポリゴンの側面数 |
---|---|---|
1.00 | 1.0 | 4 |
1.00 | 10.0 | 14 |
1.00 | 100.0 | 45 |
1.00 | 1000.0 | 141 |
1.00 | 10000.0 | 445 |
1.00 | 100000.0 | 1000 |