円処理装置

形状の円定義を、近似する正多角形に変換します。


表6. 円処理装置オプション

名前 必須 デフォルト 説明
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

  1. resp = client.indices.create(
  2. index="circles",
  3. mappings={
  4. "properties": {
  5. "circle": {
  6. "type": "geo_shape"
  7. }
  8. }
  9. },
  10. )
  11. print(resp)
  12. resp1 = client.ingest.put_pipeline(
  13. id="polygonize_circles",
  14. description="translate circle to polygon",
  15. processors=[
  16. {
  17. "circle": {
  18. "field": "circle",
  19. "error_distance": 28,
  20. "shape_type": "geo_shape"
  21. }
  22. }
  23. ],
  24. )
  25. print(resp1)

Ruby

  1. response = client.indices.create(
  2. index: 'circles',
  3. body: {
  4. mappings: {
  5. properties: {
  6. circle: {
  7. type: 'geo_shape'
  8. }
  9. }
  10. }
  11. }
  12. )
  13. puts response
  14. response = client.ingest.put_pipeline(
  15. id: 'polygonize_circles',
  16. body: {
  17. description: 'translate circle to polygon',
  18. processors: [
  19. {
  20. circle: {
  21. field: 'circle',
  22. error_distance: 28,
  23. shape_type: 'geo_shape'
  24. }
  25. }
  26. ]
  27. }
  28. )
  29. puts response

Js

  1. const response = await client.indices.create({
  2. index: "circles",
  3. mappings: {
  4. properties: {
  5. circle: {
  6. type: "geo_shape",
  7. },
  8. },
  9. },
  10. });
  11. console.log(response);
  12. const response1 = await client.ingest.putPipeline({
  13. id: "polygonize_circles",
  14. description: "translate circle to polygon",
  15. processors: [
  16. {
  17. circle: {
  18. field: "circle",
  19. error_distance: 28,
  20. shape_type: "geo_shape",
  21. },
  22. },
  23. ],
  24. });
  25. console.log(response1);

コンソール

  1. PUT circles
  2. {
  3. "mappings": {
  4. "properties": {
  5. "circle": {
  6. "type": "geo_shape"
  7. }
  8. }
  9. }
  10. }
  11. PUT _ingest/pipeline/polygonize_circles
  12. {
  13. "description": "translate circle to polygon",
  14. "processors": [
  15. {
  16. "circle": {
  17. "field": "circle",
  18. "error_distance": 28.0,
  19. "shape_type": "geo_shape"
  20. }
  21. }
  22. ]
  23. }

上記のパイプラインを使用して、circlesインデックスにドキュメントをインデックスすることを試みることができます。円はWKT円またはGeoJSON円として表現できます。結果のポリゴンは、入力円と同じ形式で表現され、インデックスされます。WKTはWKTポリゴンに変換され、GeoJSON円はGeoJSONポリゴンに変換されます。

極を含む円はサポートされていません。

例: Well Known Textで定義された円

この例では、WKT形式で定義された円がインデックスされます。

Python

  1. resp = client.index(
  2. index="circles",
  3. id="1",
  4. pipeline="polygonize_circles",
  5. document={
  6. "circle": "CIRCLE (30 10 40)"
  7. },
  8. )
  9. print(resp)
  10. resp1 = client.get(
  11. index="circles",
  12. id="1",
  13. )
  14. print(resp1)

Ruby

  1. response = client.index(
  2. index: 'circles',
  3. id: 1,
  4. pipeline: 'polygonize_circles',
  5. body: {
  6. circle: 'CIRCLE (30 10 40)'
  7. }
  8. )
  9. puts response
  10. response = client.get(
  11. index: 'circles',
  12. id: 1
  13. )
  14. puts response

Js

  1. const response = await client.index({
  2. index: "circles",
  3. id: 1,
  4. pipeline: "polygonize_circles",
  5. document: {
  6. circle: "CIRCLE (30 10 40)",
  7. },
  8. });
  9. console.log(response);
  10. const response1 = await client.get({
  11. index: "circles",
  12. id: 1,
  13. });
  14. console.log(response1);

コンソール

  1. PUT circles/_doc/1?pipeline=polygonize_circles
  2. {
  3. "circle": "CIRCLE (30 10 40)"
  4. }
  5. GET circles/_doc/1

上記のインデックスリクエストからの応答:

コンソール-結果

  1. {
  2. "found": true,
  3. "_index": "circles",
  4. "_id": "1",
  5. "_version": 1,
  6. "_seq_no": 22,
  7. "_primary_term": 1,
  8. "_source": {
  9. "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))"
  10. }
  11. }

例: GeoJSONで定義された円

この例では、GeoJSON形式で定義された円がインデックスされます。

Python

  1. resp = client.index(
  2. index="circles",
  3. id="2",
  4. pipeline="polygonize_circles",
  5. document={
  6. "circle": {
  7. "type": "circle",
  8. "radius": "40m",
  9. "coordinates": [
  10. 30,
  11. 10
  12. ]
  13. }
  14. },
  15. )
  16. print(resp)
  17. resp1 = client.get(
  18. index="circles",
  19. id="2",
  20. )
  21. print(resp1)

Ruby

  1. response = client.index(
  2. index: 'circles',
  3. id: 2,
  4. pipeline: 'polygonize_circles',
  5. body: {
  6. circle: {
  7. type: 'circle',
  8. radius: '40m',
  9. coordinates: [
  10. 30,
  11. 10
  12. ]
  13. }
  14. }
  15. )
  16. puts response
  17. response = client.get(
  18. index: 'circles',
  19. id: 2
  20. )
  21. puts response

Js

  1. const response = await client.index({
  2. index: "circles",
  3. id: 2,
  4. pipeline: "polygonize_circles",
  5. document: {
  6. circle: {
  7. type: "circle",
  8. radius: "40m",
  9. coordinates: [30, 10],
  10. },
  11. },
  12. });
  13. console.log(response);
  14. const response1 = await client.get({
  15. index: "circles",
  16. id: 2,
  17. });
  18. console.log(response1);

コンソール

  1. PUT circles/_doc/2?pipeline=polygonize_circles
  2. {
  3. "circle": {
  4. "type": "circle",
  5. "radius": "40m",
  6. "coordinates": [30, 10]
  7. }
  8. }
  9. GET circles/_doc/2

上記のインデックスリクエストからの応答:

コンソール-結果

  1. {
  2. "found": true,
  3. "_index": "circles",
  4. "_id": "2",
  5. "_version": 1,
  6. "_seq_no": 22,
  7. "_primary_term": 1,
  8. "_source": {
  9. "circle": {
  10. "coordinates": [
  11. [
  12. [30.000365257263184, 10.0],
  13. [30.000111397193788, 10.00034284530941],
  14. [29.999706043744222, 10.000213571721195],
  15. [29.999706043744222, 9.999786428278805],
  16. [30.000111397193788, 9.99965715469059],
  17. [30.000365257263184, 10.0]
  18. ]
  19. ],
  20. "type": "Polygon"
  21. }
  22. }
  23. }

精度に関する注意事項

円を表すポリゴンの精度はerror_distanceとして定義されます。この差が小さいほど、ポリゴンは完璧な円に近づきます。

以下は、円の半径が異なる入力に対してポリゴンの側面数にどのように影響するかを示す表です。

最小側面数は4で、最大は1000です。


表7. 円処理装置の精度

エラーディスタンス メートル単位の半径 ポリゴンの側面数
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