MultiPoint, MultiLineString, MultiPolygon

Общая модель составных геометрий

В OpenLayers составные геометрии используются для представления наборов однотипных простых объектов в рамках одной сущности. Они позволяют работать с группами координат как с единым геометрическим объектом, сохраняя при этом структурную независимость каждого элемента.

К таким типам относятся:

  • MultiPoint — набор точек
  • MultiLineString — набор линий
  • MultiPolygon — набор полигонов

Все они наследуют поведение базового класса геометрий и поддерживают стандартные операции: трансформации, сериализацию, взаимодействие с проекциями и отрисовку через стили.


MultiPoint

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

Многоточечная геометрия представляет собой массив точек, где каждая точка задаётся координатами:

import MultiPoint from 'ol/geom/MultiPoint';

const multiPoint = new MultiPoint([
  [30, 10],
  [40, 40],
  [50, 20]
]);

Каждый вложенный массив — это координаты одной точки в пространстве карты.

Особенности представления

MultiPoint не создаёт отдельных геометрий для каждой точки. Вместо этого используется единая сущность, которая хранит массив координат и обрабатывает их совместно.

Ключевые особенности:

  • все точки принадлежат одной геометрии;
  • применяется единый стиль ко всем точкам;
  • геометрия эффективно хранит большие наборы точек;
  • поддерживается частичное обновление координат.

Получение и изменение координат

const coords = multiPoint.getCoordinates();

multiPoint.setCoordinates([
  [10, 10],
  [20, 20]
]);

Изменение координат полностью заменяет набор точек.


Применение

MultiPoint используется в задачах:

  • отображение наборов однотипных объектов;
  • кластеризация результатов без агрегации;
  • визуализация событийных точек;
  • упрощённая работа с массивами координат.

MultiLineString

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

Многолинейная геометрия представляет собой массив линий, каждая из которых — это массив координат точек:

import MultiLineString from 'ol/geom/MultiLineString';

const multiLine = new MultiLineString([
  [
    [10, 10],
    [20, 20],
    [30, 30]
  ],
  [
    [40, 40],
    [50, 50],
    [60, 40]
  ]
]);

Каждый вложенный массив координат представляет отдельную линию.


Поведение и особенности

MultiLineString объединяет несколько независимых линий в одну геометрию:

  • линии не соединяются между собой;
  • каждая линия имеет собственную топологию;
  • стили применяются ко всей геометрии целиком;
  • поддерживается обработка сегментов.

Модификация координат

const lines = multiLine.getCoordinates();

multiLine.setCoordinates([
  [
    [0, 0],
    [10, 10]
  ]
]);

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


Практические сценарии использования

MultiLineString применяется для:

  • отображения дорожных сетей с несколькими маршрутами;
  • представления рек с притоками как отдельных линий;
  • визуализации траекторий движения объектов;
  • группировки логически связанных, но геометрически раздельных линий.

MultiPolygon

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

Многополигональная геометрия представляет собой массив полигонов, каждый из которых задаётся массивом контуров:

import MultiPolygon from 'ol/geom/MultiPolygon';

const multiPolygon = new MultiPolygon([
  [
    [
      [10, 10],
      [20, 10],
      [20, 20],
      [10, 20],
      [10, 10]
    ]
  ],
  [
    [
      [30, 30],
      [40, 30],
      [40, 40],
      [30, 40],
      [30, 30]
    ]
  ]
]);

Структура включает три уровня:

  • набор полигонов;
  • набор колец (внешний контур и внутренние отверстия);
  • координаты точек.

Внешние и внутренние кольца

Каждый полигон может содержать:

  • внешнее кольцо (обязательное);
  • внутренние кольца (дыры).

Пример полигона с отверстием:

const polygonWithHole = new MultiPolygon([
  [
    [
      [0, 0],
      [100, 0],
      [100, 100],
      [0, 100],
      [0, 0]
    ],
    [
      [20, 20],
      [80, 20],
      [80, 80],
      [20, 80],
      [20, 20]
    ]
  ]
]);

Внутренний контур вырезает область внутри внешнего полигона.


Поведение геометрии

MultiPolygon объединяет несколько независимых областей:

  • полигоны не обязаны пересекаться;
  • каждый полигон может иметь собственные отверстия;
  • применяется единый стиль ко всей геометрии;
  • поддерживается геометрическая трансформация.

Изменение координат

const polygons = multiPolygon.getCoordinates();

multiPolygon.setCoordinates([
  [
    [
      [0, 0],
      [50, 0],
      [50, 50],
      [0, 50],
      [0, 0]
    ]
  ]
]);

При изменении координат структура должна строго соответствовать формату вложенности.


Сценарии применения

MultiPolygon используется для:

  • отображения административных границ (страны, регионы, районы);
  • представления островных территорий;
  • визуализации зон покрытия;
  • работы с наборами пространственных областей.

Общие принципы работы с составными геометриями

Единая система координат

Все составные геометрии в OpenLayers используют одинаковую модель координат, что позволяет:

  • комбинировать разные типы геометрий на одной карте;
  • выполнять трансформации между проекциями;
  • использовать общие алгоритмы обработки.

Производительность

Использование Multi*-геометрий снижает нагрузку при большом количестве объектов:

  • уменьшается количество отдельных экземпляров геометрий;
  • упрощается рендеринг;
  • оптимизируется хранение координат.

Однако при необходимости индивидуальной стилизации каждого элемента предпочтительнее использовать набор отдельных геометрий.


Сериализация и форматирование

Все составные геометрии поддерживают:

  • экспорт в JSON;
  • чтение из GeoJSON через форматтер OpenLayers;
  • преобразование координат при смене проекции.

Пример работы через GeoJSON:

import GeoJSON from 'ol/format/GeoJSON';

const format = new GeoJSON();

const feature = format.writeFeatureObject({
  geometry: multiPolygon
});

Взаимодействие со стилями

Для MultiPoint, MultiLineString и MultiPolygon применяется единый стиль на всю геометрию. При необходимости дифференциации используется:

  • разбиение на отдельные Feature;
  • кастомные функции стиля;
  • использование атрибутов внутри Feature.

Геометрические операции

Составные геометрии поддерживают стандартные операции:

  • смещение координат;
  • масштабирование;
  • вращение;
  • вычисление экстентов;
  • пересечение и объединение (через внешние библиотеки или дополнительные алгоритмы).

Особенность заключается в том, что операции применяются ко всему набору элементов одновременно, без разделения на отдельные компоненты.