圆形处理器编辑

将形状的圆形定义转换为近似它们的规则多边形。

表 6. 圆形处理器选项

名称 必需 默认值 描述

field

-

要解释为圆形的字段。可以是 WKT 格式的字符串或 GeoJSON 的映射。

target_field

field

要将多边形形状分配到的字段,默认情况下 field 会就地更新

ignore_missing

如果 truefield 不存在,则处理器将静默退出,不会修改文档

error_distance

-

结果内接距离(从中心到边)与圆半径之间的差值(对于 geo_shape 以米为单位,对于 shape 无单位)

shape_type

-

处理圆形时要使用的字段映射类型:geo_shapeshape

description

-

处理器的描述。用于描述处理器的目的或其配置。

if

-

有条件地执行处理器。请参阅 有条件地运行处理器

ignore_failure

忽略处理器的错误。请参阅 处理管道错误

on_failure

-

处理处理器的错误。请参阅 处理管道错误

tag

-

处理器的标识符。用于调试和指标。

error distance

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
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 格式定义的圆形被索引

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
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 格式定义的圆形被索引

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
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

表 7. 圆形处理器精度

error_distance 半径(米) 多边形的边数

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