Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›Mapping ›Типы данных полей

Тип поля Shape

Тип данных shape облегчает индексирование и поиск с произвольными x, y декартовыми фигурами, такими как прямоугольники и многоугольники. Он может использоваться для индексирования и запросов геометрий, координаты которых находятся в двумерной плоской системе координат.

Вы можете запросить документы, используя этот тип, с помощью запроса формы.

Параметры сопоставления

Как и тип поля geo_shape, сопоставление поля shape преобразует объекты геометрии GeoJSON или Well-Known Text (WKT) в тип формы. Для его активации пользователи должны явно сопоставить поля с типом формы.

Параметр Описание Значение по умолчанию

orientation

Необязательно укажите, как интерпретировать порядок вершин для многоугольников/множественных многоугольников. Этот параметр определяет одно из двух правил системы координат (правостороннее или левостороннее), каждое из которых может быть указано тремя различными способами. 1. Правило правой руки: right, ccw, counterclockwise, 2. Правило левой руки: left, cw, clockwise. Значение по умолчанию (counterclockwise) соответствует стандарту OGC, который определяет вершины внешнего контура против часовой стрелки, а вершины внутренних контуров (дырок) — по часовой стрелке. Установка этого параметра в сопоставлении geo_shape явно задает порядок вершин для списка координат поля geo_shape, но может быть переопределён в каждом отдельном документе GeoJSON или WKT.

ccw

ignore_malformed

Если значение истинно, неправильно сформированные геометрии GeoJSON или WKT игнорируются. Если ложно (по умолчанию), неправильно сформированные геометрии GeoJSON и WKT вызывают исключение и отклоняют весь документ.

false

ignore_z_value

Если значение true (по умолчанию), трёхмерные точки будут приняты (сохранены в источнике), но будут индексироваться только значения широты и долготы; третье измерение игнорируется. Если false, геоточки, содержащие более чем значения широты и долготы (два измерения), вызывают исключение и отклоняют весь документ.

true

coerce

Если true, незамкнутые линейные кольца в многоугольниках будут автоматически закрыты.

false

Подход к индексированию

Как и geo_shape, тип поля shape индексируется путём разбиения геометрий на треугольную сетку и индексирования каждого треугольника как точки с 7 измерениями в дереве BKD. Координаты, предоставляемые индексатору, — это значения с плавающей запятой одинарной точности, поэтому поле гарантирует ту же точность, что и виртуальная машина Java (обычно 1E-38). Для многоугольников/множественных многоугольников производительность триангулятора в первую очередь зависит от количества вершин, определяющих геометрию.

ВАЖНЫЕ ПРИМЕЧАНИЯ

CONTAINS запрос отношений - shape запросы с relation, определённые как contains, поддерживаются для индексов, созданных с ElasticSearch 7.5.0 или более поздней версии.

Пример
PUT /example
{
  "mappings": {
    "properties": {
      "geometry": {
        "type": "shape"
      }
    }
  }
}

Это определение сопоставления сопоставляет поле геометрии с типом формы. Индексатор использует числа с плавающей запятой одинарной точности для значений вершин, поэтому точность гарантируется до той же точности, что и значения float, предоставляемые виртуальной машиной Java (обычно 1E-38).

Структура входных данных

Фигуры могут быть представлены в формате GeoJSON или Well-Known Text (WKT). В следующей таблице представлено сопоставление GeoJSON и WKT с типами Elasticsearch:

Тип GeoJSON Тип WKT Тип Elasticsearch Описание

Point

POINT

point

Одна координата x, y.

LineString

LINESTRING

linestring

Произвольная линия, заданная двумя или более точками.

Polygon

POLYGON

polygon

Закрытый многоугольник, у которого первая и последняя точки должны совпадать, что требует n + 1 вершин для создания n-стороннего многоугольника и как минимум 4 вершин.

MultiPoint

MULTIPOINT

multipoint

Массив несвязанных, но, вероятно, связанных точек.

MultiLineString

MULTILINESTRING

multilinestring

Массив отдельных линий.

MultiPolygon

MULTIPOLYGON

multipolygon

Массив отдельных многоугольников.

GeometryCollection

GEOMETRYCOLLECTION

geometrycollection

Коллекция фигур, похожая на фигуры multi*, за исключением того, что несколько типов могут сосуществовать (например, точка и линия).

N/A

BBOX

envelope

Прямоугольник ограничительной рамки (или огибающая), задаваемый только указанием верхней левой и нижней правой точек.

Для всех типов требуются как внутреннее поле type, так и поле coordinates.

В GeoJSON, WKT и, следовательно, Elasticsearch правильный порядок координат — (X, Y) в массивах координат. Это отличается от многих геопространственных API (например, geo_shape), которые обычно используют порядок широта, долгота (Y, X).

Точка

Точка — это одна координата в декартовой x, y системе координат. Она может представлять местоположение объекта интереса в виртуальном мире или спроецированном пространстве. Ниже приведен пример точки в формате GeoJSON.

POST /example/_doc
{
  "location" : {
    "type" : "point",
    "coordinates" : [-377.03653, 389.897676]
  }
}

Ниже приведён пример точки в формате WKT:

POST /example/_doc
{
  "location" : "POINT (-377.03653 389.897676)"
}
Линия

linestring, определённая массивом из двух или более положений. Указав только две точки, linestring будет представлять прямую линию. Указание более двух точек создаёт произвольную траекторию. Ниже приведён пример LineString в формате GeoJSON.

POST /example/_doc
{
  "location" : {
    "type" : "linestring",
    "coordinates" : [[-377.03653, 389.897676], [-377.009051, 389.889939]]
  }
}

Ниже приведён пример LineString в формате WKT:

POST /example/_doc
{
  "location" : "LINESTRING (-377.03653 389.897676, -377.009051 389.889939)"
}
Многоугольник

Многоугольник определяется списком списков точек. Первая и последняя точки в каждом (внешнем) списке должны совпадать (многоугольник должен быть замкнутым). Ниже приведён пример многоугольника в формате GeoJSON.

POST /example/_doc
{
  "location" : {
    "type" : "polygon",
    "coordinates" : [
      [ [1000.0, -1001.0], [1001.0, -1001.0], [1001.0, -1000.0], [1000.0, -1000.0], [1000.0, -1001.0] ]
    ]
  }
}

Ниже приведён пример многоугольника в формате WKT:

POST /example/_doc
{
  "location" : "POLYGON ((1000.0 -1001.0, 1001.0 -1001.0, 1001.0 -1000.0, 1000.0 -1000.0, 1000.0 -1001.0))"
}

Первый массив представляет внешнюю границу многоугольника, другие массивы представляют внутренние фигуры ("дырки"). Следующий пример GeoJSON — многоугольника с дыркой:

POST /example/_doc
{
  "location" : {
    "type" : "polygon",
    "coordinates" : [
      [ [1000.0, -1001.0], [1001.0, -1001.0], [1001.0, -1000.0], [1000.0, -1000.0], [1000.0, -1001.0] ],
      [ [1000.2, -1001.2], [1000.8, -1001.2], [1000.8, -1001.8], [1000.2, -1001.8], [1000.2, -1001.2] ]
    ]
  }
}

Следующий пример — многоугольника с дыркой в формате WKT:

POST /example/_doc
{
  "location" : "POLYGON ((1000.0 1000.0, 1001.0 1000.0, 1001.0 1001.0, 1000.0 1001.0, 1000.0 1000.0), (1000.2 1000.2, 1000.8 1000.2, 1000.8 1000.8, 1000.2 1000.8, 1000.2 1000.2))"
}

ВАЖНОЕ ПРИМЕЧАНИЕ: WKT не навязывает определённый порядок вершин. GeoJSON предписывает, что внешний многоугольник должен быть против часовой стрелки, а внутренние фигуры — по часовой стрелке, что согласуется со спецификацией порядка вершин Simple Feature Access Открытого геопространственного консорциума (OGC).

По умолчанию Elasticsearch ожидает вершины в порядке против часовой стрелки (правило правой руки). Если данные предоставлены в порядке по часовой стрелке (правило левой руки), пользователь может изменить параметр orientation либо в сопоставлении поля, либо в качестве параметра, предоставленного с документом.

Следующий пример переопределения параметров orientation в документе:

POST /example/_doc
{
  "location" : {
    "type" : "polygon",
    "orientation" : "clockwise",
    "coordinates" : [
      [ [1000.0, 1000.0], [1000.0, 1001.0], [1001.0, 1001.0], [1001.0, 1000.0], [1000.0, 1000.0] ]
    ]
  }
}
Многоточечная геометрия

Следующий пример представляет собой список точек GeoJSON:

POST /example/_doc
{
  "location" : {
    "type" : "multipoint",
    "coordinates" : [
      [1002.0, 1002.0], [1003.0, 2000.0]
    ]
  }
}

Следующий пример представляет собой список точек WKT:

POST /example/_doc
{
  "location" : "MULTIPOINT (1002.0 2000.0, 1003.0 2000.0)"
}
Многолинейная геометрия

Следующий пример представляет собой список линий GeoJSON:

POST /example/_doc
{
  "location" : {
    "type" : "multilinestring",
    "coordinates" : [
      [ [1002.0, 200.0], [1003.0, 200.0], [1003.0, 300.0], [1002.0, 300.0] ],
      [ [1000.0, 100.0], [1001.0, 100.0], [1001.0, 100.0], [1000.0, 100.0] ],
      [ [1000.2, 100.2], [1000.8, 100.2], [1000.8, 100.8], [1000.2, 100.8] ]
    ]
  }
}

Следующий пример представляет собой список линий WKT:

POST /example/_doc
{
  "location" : "MULTILINESTRING ((1002.0 200.0, 1003.0 200.0, 1003.0 300.0, 1002.0 300.0), (1000.0 100.0, 1001.0 100.0, 1001.0 100.0, 1000.0 100.0), (1000.2 0.2, 1000.8 100.2, 1000.8 100.8, 1000.2 100.8))"
}
Многоугольная геометрия

Следующий пример представляет собой список многоугольников GeoJSON (второй многоугольник содержит дыру):

POST /example/_doc
{
  "location" : {
    "type" : "multipolygon",
    "coordinates" : [
      [ [[1002.0, 200.0], [1003.0, 200.0], [1003.0, 300.0], [1002.0, 300.0], [1002.0, 200.0]] ],
      [ [[1000.0, 200.0], [1001.0, 100.0], [1001.0, 100.0], [1000.0, 100.0], [1000.0, 100.0]],
        [[1000.2, 200.2], [1000.8, 100.2], [1000.8, 100.8], [1000.2, 100.8], [1000.2, 100.2]] ]
    ]
  }
}

Следующий пример представляет собой список многоугольников WKT (второй многоугольник содержит дыру):

POST /example/_doc
{
  "location" : "MULTIPOLYGON (((1002.0 200.0, 1003.0 200.0, 1003.0 300.0, 1002.0 300.0, 102.0 200.0)), ((1000.0 100.0, 1001.0 100.0, 1001.0 100.0, 1000.0 100.0, 1000.0 100.0), (1000.2 100.2, 1000.8 100.2, 1000.8 100.8, 1000.2 100.8, 1000.2 100.2)))"
}
Коллекция геометрий

Следующий пример представляет собой коллекцию геометрических объектов GeoJSON:

POST /example/_doc
{
  "location" : {
    "type": "geometrycollection",
    "geometries": [
      {
        "type": "point",
        "coordinates": [1000.0, 100.0]
      },
      {
        "type": "linestring",
        "coordinates": [ [1001.0, 100.0], [1002.0, 100.0] ]
      }
    ]
  }
}

Следующий пример представляет собой коллекцию геометрических объектов WKT:

POST /example/_doc
{
  "location" : "GEOMETRYCOLLECTION (POINT (1000.0 100.0), LINESTRING (1001.0 100.0, 1002.0 100.0))"
}
Огибающая

Elasticsearch поддерживает тип envelope, который состоит из координат верхней левой и нижней правой точек фигуры для представления прямоугольника охвата в формате [[minX, maxY], [maxX, minY]]:

POST /example/_doc
{
  "location" : {
    "type" : "envelope",
    "coordinates" : [ [1000.0, 100.0], [1001.0, 100.0] ]
  }
}

Следующий пример представляет собой огибающую, использующую формат WKT BBOX:

ПРИМЕЧАНИЕ: Спецификация WKT ожидает следующий порядок: minLon, maxLon, maxLat, minLat.

POST /example/_doc
{
  "location" : "BBOX (1000.0, 1002.0, 2000.0, 1000.0)"
}

Сортировка и извлечение фигур индекса

Из-за сложной структуры ввода и представления индекса фигур в настоящее время невозможно сортировать фигуры или извлекать их поля напрямую. Значение shape можно извлечь только через поле _source.

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/shape.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API