Как понять, пересекает ли многоугольник два или более многоугольника? - PullRequest
0 голосов
/ 03 мая 2019

У меня есть сетка квадратов, нарисованных на карте, у всех этих квадратов фиксированная площадь. Затем карта снова делится на 4 других макрокадра. Давайте назовем их A, B, C, D.

Все предыдущие квадраты попадают в тот или иной квадрант (A, B, C, D). Но, конечно, те, что на границах, попадают в два или хуже, в середине падают в 4 квадранта.

Вот картинка, чтобы лучше объяснить ситуацию: enter image description here

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

Мне понадобится способ понять, содержится ли один квадрат в одном квадранте или более. И если так, верните соответствующий квадрант / ы.

Я пытался сделать это с TurfJS, более конкретно с booleanContains и booleanWithin, но оба они, кажется, выполняют часть того, что я ищу:

логическое значение содержит Boolean-contains возвращает True, если вторая геометрия полностью содержится в первой геометрии. Внутренние части обеих геометрий должны пересекаться, а внутренняя часть и граница вторичного элемента (геометрия b) не должны пересекать внешнюю часть первичного элемента (геометрия a). Boolean-contains возвращает прямо противоположный результат @ turf / boolean-inside.

Boolean в пределах Boolean-Within возвращает true, если первая геометрия полностью находится во второй геометрии. Внутренние части обеих геометрий должны пересекаться, а внутренняя часть и граница первичного элемента (геометрия а) не должны пересекать внешнюю часть вторичного элемента (геометрия b). Boolean-Within возвращает точный противоположный результат @ turf / boolean-contains.

Итак, у меня есть массив полигонов, определяющих основные кварданты, и у меня есть еще один массив полигонов (квадратов). Я хотел бы перебрать массив квадратов, и для каждого квадрата сравнить его с 4 основными квадрантами и понять, в какой квадрант / с этот квадрат попадает.

Вот массив квадрантов:

export const QUADRANTS_MAP: IQuadrant[] = [
    {
        collectionName: 'quad-a',
        geometry: { type: 'Polygon', coordinates: [[-180, 0], [-180, 90], [0, 90], [0, 0], [-180, 0]] }
    },
    {
        collectionName: 'quad-b',
        geometry: { type: 'Polygon', coordinates: [[0, 0], [0, 90], [180, 90], [180, 0], [0, 0]] }
    },
    {
        collectionName: 'quad-c',
        geometry: { type: 'Polygon', coordinates: [[-180, -90], [-180, 0], [0, 0], [0, -90], [-180, -90]] }
    },
    {
        collectionName: 'quad-d',
        geometry: { type: 'Polygon', coordinates: [[0, -90], [0, 0], [180, 0], [180, -90], [0, -90]] }
    }
];

Массив квадратов похож, но ваааааа еще больше :) Итак, в заключение, учитывая один полигон (P1) и массив полигонов (PX), как я могу выяснить, в каком полигоне (PX) содержится полигон (P1). И если он кровоточит на двух или более полигонах (PX), узнайте, какие из них.

...