Link Search Menu Expand Document Documentation Menu

xy 形状字段类型

2.4 版引入

xy 形状字段类型包含一个形状,例如多边形或 xy 点的集合。它基于 Lucene XYShape 字段类型。为了索引 xy 形状,OpenSearch 将形状细分为三角形网格,并将每个三角形存储在 BKD 树中(一组平衡的 k 维树)。这提供了 10-7十进制度的精度,代表近乎完美的空间分辨率。

xy 形状字段类型类似于 geoshape 字段类型,但它表示笛卡尔平面上的形状,而不是基于地球固定陆地参考系。xy 形状的坐标是单精度浮点值。有关浮点值的范围和精度信息,请参阅 数值字段类型

示例

使用 xy 形状字段类型创建映射

PUT testindex
{
  "mappings": {
    "properties": {
      "location": {
        "type": "xy_shape"
      }
    }
  }
}

格式

xy 形状可以按以下格式索引

在 GeoJSON 和 WKT 中,必须在坐标数组中以 x, y 顺序指定坐标。

xy 形状类型

下表描述了可能的 xy 形状类型及其与 GeoJSON 和 WKT 类型的关系。

OpenSearch 类型 GeoJSON 类型 WKT 类型 描述
point(点) Point(点) POINT(点) 由 x 和 y 坐标指定的地理点。
linestring(线串) LineString(线串) LINESTRING(线串) 由两个或多个点指定的线。可以是直线或连接线段的路径。
polygon(多边形) Polygon(多边形) POLYGON(多边形) 由坐标形式的顶点列表指定的多边形。多边形必须闭合,这意味着最后一个点必须与第一个点相同。因此,要创建一个 n 边形,需要 n+1 个顶点。最小顶点数为四个,这将创建一个三角形。
multipoint(多点) MultiPoint(多点) MULTIPOINT(多点) 不连接的离散相关点的数组。
multilinestring(多线串) MultiLineString(多线串) MULTILINESTRING(多线串) 线串数组。
multipolygon(多多边形) MultiPolygon(多多边形) MULTIPOLYGON(多多边形) 多边形数组。
geometrycollection(几何图形集合) GeometryCollection(几何图形集合) GEOMETRYCOLLECTION(几何图形集合) 可能是不同类型的 xy 形状的集合。
envelope(信封) 不适用 BBOX 由左上角和右下角顶点指定的边界矩形。

Point(点)

点由单个坐标对指定。

以 GeoJSON 格式索引点

PUT testindex/_doc/1
{
  "location" : {
    "type" : "point",
    "coordinates" : [0.5, 4.5]        
  }
}

以 WKT 格式索引点

PUT testindex/_doc/1
{
  "location" : "POINT (0.5 4.5)"        
}

线串

线串是由两个或多个点指定的线。如果点是共线的,则线串是直线。否则,线串表示由线段组成的路径。

以 GeoJSON 格式索引线串

PUT testindex/_doc/2
{
  "location" : {
    "type" : "linestring",
    "coordinates" : [[0.5, 4.5], [-1.5, 2.3]]
  }
}

以 WKT 格式索引线串

PUT testindex/_doc/2
{
  "location" : "LINESTRING (0.5 4.5, -1.5 2.3)"
}

Polygon(多边形)

多边形由坐标形式的顶点列表指定。多边形必须闭合,这意味着最后一个点必须与第一个点相同。在以下示例中,使用四个点创建一个三角形。

GeoJSON 要求您逆时针列出多边形的顶点。WKT 不对顶点施加特定的顺序。

以 GeoJSON 格式索引多边形(三角形)

PUT testindex/_doc/3
{
  "location" : {
    "type" : "polygon",
    "coordinates" : [
      [[0.5, 4.5], 
      [2.5, 6.0], 
      [1.5, 2.0], 
      [0.5, 4.5]]
    ]
  }
}

以 WKT 格式索引多边形(三角形)

PUT testindex/_doc/3
{
  "location" : "POLYGON ((0.5 4.5, 2.5 6.0, 1.5 2.0, 0.5 4.5))"
}

多边形内部可能有孔。在这种情况下,coordinates 字段将包含多个数组。第一个数组表示外部多边形,每个后续数组表示一个孔。孔表示为多边形,并指定为坐标数组。

GeoJSON 要求您逆时针列出多边形的顶点,顺时针列出孔的顶点。WKT 不对顶点施加特定的顺序。

以 GeoJSON 格式索引带有三角形孔的多边形(三角形)

PUT testindex/_doc/4
{
  "location" : {
    "type" : "polygon",
    "coordinates" : [
      [[0.5, 4.5], 
      [2.5, 6.0], 
      [1.5, 2.0], 
      [0.5, 4.5]],
      
      [[1.0, 4.5], 
      [1.5, 4.5], 
      [1.5, 4.0], 
      [1.0, 4.5]]
    ]
  }
}

以 WKT 格式索引带有三角形孔的多边形(三角形)

PUT testindex/_doc/4
{
  "location" : "POLYGON ((0.5 4.5, 2.5 6.0, 1.5 2.0, 0.5 4.5), (1.0 4.5, 1.5 4.5, 1.5 4.0, 1.0 4.5))"
}

默认情况下,多边形的顶点以逆时针顺序遍历。您可以定义一个 orientation 参数,以在映射时指定顶点遍历顺序

PUT testindex
{
  "mappings": {
    "properties": {
      "location": {
        "type": "xy_shape",
        "orientation" : "left"
      }
    }
  }
}

随后索引的文档可以覆盖 orientation 设置

PUT testindex/_doc/3
{
  "location" : {
    "type" : "polygon",
    "orientation" : "cw",
    "coordinates" : [
      [[0.5, 4.5], 
      [2.5, 6.0], 
      [1.5, 2.0], 
      [0.5, 4.5]]
    ]
  }
}

多点

多点是不连接的离散相关点的数组。

以 GeoJSON 格式索引多点

PUT testindex/_doc/6
{
  "location" : {
    "type" : "multipoint",
    "coordinates" : [
      [0.5, 4.5], 
      [2.5, 6.0]
    ]
  }
}

以 WKT 格式索引多点

PUT testindex/_doc/6
{
  "location" : "MULTIPOINT (0.5 4.5, 2.5 6.0)"
}

多线串

多线串是线串数组。

以 GeoJSON 格式索引多线串

PUT testindex/_doc/2
{
  "location" : {
    "type" : "multilinestring",
    "coordinates" : [
      [[0.5, 4.5], [2.5, 6.0]],
      [[1.5, 2.0], [3.5, 3.5]]
      ]
  }
}

以 WKT 格式索引线串

PUT testindex/_doc/2
{
  "location" : "MULTILINESTRING ((0.5 4.5, 2.5 6.0), (1.5 2.0, 3.5 3.5))"
}

多多边形

多多边形是多边形数组。在此示例中,第一个多边形包含一个孔,第二个多边形不包含。

以 GeoJSON 格式索引多多边形

PUT testindex/_doc/4
{
  "location" : {
    "type" : "multipolygon",
    "coordinates" : [
    [
      [[0.5, 4.5], 
      [2.5, 6.0], 
      [1.5, 2.0], 
      [0.5, 4.5]],
      
      [[1.0, 4.5], 
      [1.5, 4.5], 
      [1.5, 4.0], 
      [1.0, 4.5]]
    ],
    [
      [[2.0, 0.0], 
      [1.0, 2.0], 
      [3.0, 1.0], 
      [2.0, 0.0]]
      ]
    ]
  }
}

以 WKT 格式索引多多边形

PUT testindex/_doc/4
{
  "location" : "MULTIPOLYGON (((0.5 4.5, 2.5 6.0, 1.5 2.0, 0.5 4.5), (1.0 4.5, 1.5 4.5, 1.5 4.0, 1.0 4.5)), ((2.0 0.0, 1.0 2.0, 3.0 1.0, 2.0 0.0)))"
}

几何集合

几何图形集合是可能是不同类型的 xy 形状的集合。

以 GeoJSON 格式索引几何图形集合

PUT testindex/_doc/7
{
  "location" : {
    "type": "geometrycollection",
    "geometries": [
      {
        "type": "point",
        "coordinates": [0.5, 4.5]
      },
      {
        "type": "linestring",
        "coordinates": [[2.5, 6.0], [1.5, 2.0]]
      }
    ]
  }
}

以 WKT 格式索引几何图形集合

PUT testindex/_doc/7
{
  "location" : "GEOMETRYCOLLECTION (POINT (0.5 4.5), LINESTRING(2.5 6.0, 1.5 2.0))"
}

包络

信封是由左上角和右下角顶点指定的边界矩形。GeoJSON 格式为 [[minX, maxY], [maxX, minY]]

以 GeoJSON 格式索引信封

PUT testindex/_doc/2
{
  "location" : {
    "type" : "envelope",
    "coordinates" : [[3.0, 2.0], [6.0, 0.0]]
  }
}

在 WKT 格式中,使用 BBOX (minX, maxY, maxX, minY)

以 WKT BBOX 格式索引信封

PUT testindex/_doc/8
{
  "location" : "BBOX (3.0, 2.0, 6.0, 0.0)"
}

参数

下表列出了 xy 形状字段类型接受的参数。所有参数都是可选的。

参数 描述
强制转换 (coerce) 一个布尔值,指定是否自动关闭未闭合的线性环。默认为 false
忽略畸形值 (ignore_malformed) 一个布尔值,指定忽略格式错误的 GeoJSON 或 WKT xy 形状,而不引发异常。默认为 false(当 xy 形状格式错误时引发异常)。
ignore_z_value 特定于具有三个坐标的点。如果 ignore_z_valuetrue,则第三个坐标不会被索引,但仍存储在 _source 字段中。如果 ignore_z_valuefalse,则会引发异常。默认为 true
orientation(方向) 指定 xy 形状的坐标列表中顶点的遍历顺序。orientation 采用以下值
1. RIGHT(右):逆时针。通过使用以下字符串之一(大写或小写)指定 RIGHT 方向:rightcounterclockwiseccw
2. LEFT(左):顺时针。通过使用以下字符串之一(大写或小写)指定 LEFT 方向:leftclockwisecw。此值可以被单个文档覆盖。
默认为 RIGHT
剩余 350 字符

有问题?

想要贡献吗?