Как объединить два многоугольника с помощью topo json merge - PullRequest
1 голос
/ 05 апреля 2020

Я пытаюсь использовать topo json для объединения двух многоугольников. Сначала два полигона не содержат сходных / общих точек, которые, как я полагаю, необходимы topo json .merge для выполнения слияния. Перед выполнением топологии я пробегаю полигоны и добавляю общие точки к нужному им полигону. Результирующая коллекция FeatureCollection, созданная следующим образом:

{
    "type": "FeatureCollection",
    "features": [
    {
        "type": "Feature",
        "properties":
        {
            "id": "area_1"
        },
        "geometry":
        {
            "type": "Polygon",
            "coordinates": [
                [
                    [148, 105],
                    [160, 105],
                    [160, 113],
                    [148, 113]
                ]
            ]
        }
    },
    {
        "type": "Feature",
        "properties":
        {
            "id": "area_2"
        },
        "geometry":
        {
            "type": "Polygon",
            "coordinates": [
                [
                    [143, 113],
                    [148, 113],
                    [160, 113],
                    [171, 113],
                    [171, 132],
                    [143, 132]
                ]
            ]
        }
    }]
} 

let topology = topojson.topology({ collection: collection });

Полученная топология:

{
    "type": "Topology",
    "objects":
    {
        "collection":
        {
            "type": "GeometryCollection",
            "geometries": [
            {
                "type": "Polygon",
                "arcs": [
                    [-1]
                ],
                "properties":
                {
                    "id": "area_1"
                }
            },
            {
                "type": "Polygon",
                "arcs": [
                    [-2]
                ],
                "properties":
                {
                    "id": "area_2"
                }
            }]
        }
    },
    "arcs": [
        [
            [
                [148, 105],
                [160, 105],
                [160, 113],
                [148, 113]
            ]
        ],
        [
            [
                [143, 113],
                [148, 113],
                [160, 113],
                [171, 113],
                [171, 132],
                [143, 132]
            ]
        ]
    ]
}

Вот как я вызов слияния: topojson.merge(topology, topology.objects.collection.geometries);

и полученная ошибка: Uncaught TypeError: Cannot read property '0' of undefined - stitch.js:13

строк кода, где возникает ошибка:

arcs.forEach(function (i, j) {
    var arc = topology.arcs[i < 0 ? ~i : i],
        t;

    if (arc.length < 3 && !arc[1][0] && !arc[1][1]) {
      t = arcs[++emptyIndex], arcs[emptyIndex] = i, arcs[j] = t;
    }
  });

Похоже, ошибка возникает потому что код ищет дуги на один шаг ниже, чем они существуют ...

Что я делаю не так?

...