Как пересечь более двух полигонов с помощью Turf.js?

Мы используем Mapbox GL JS 1.12.0 в нашем проекте Vue.js. Мне нужно создать объекты пересечения, если у меня есть 2 или более полигонов. Но я могу сделать это только с двумя полигонами. Код выглядит следующим образом:

import * as turf from '@turf/turf';

export function createIntersection(features) {
  // features = 3 polygons on the screen bellow
  const intersection = turf.intersect(...features);

  return intersection;
}

Скриншоты:

  1. Невыделенные полигоны:

введите здесь описание изображения

  1. Выбранные полигоны

введите здесь описание изображения

  1. После выполнения кода

введите здесь описание изображения

Как видите, создан только 1 объект пересечения.

Как это сделать с более чем 2 полигонами?


person tesicg    schedule 18.11.2020    source источник
comment
Вам нужно перебрать все пары.   -  person Anatoly Sukhanov    schedule 18.11.2020


Ответы (1)


turf.intersect() может пересекать только 2 полигона.

Если вы хотите пересечь несколько полигонов, вы можете пересечь каждый полигон с каждым другим полигоном с помощью turf.intersect() а затем объедините результаты с помощью turf.combine().

Вот пример кода:

const polygonA = ...;
const polygonB = ...;
const polygonC = ...;

const allIntersections = {
  type: 'FeatureCollections',
  features: [
    turf.intersect(polygonA, polygonB),
    turf.intersect(polygonA, polygonC),
    turf.intersect(polygonB, polygonC),
  ],
};

const combinedIntersection = turf.combine(allIntersections);
person Nick VN    schedule 19.11.2020