Я пытаюсь использовать 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;
}
});
Похоже, ошибка возникает потому что код ищет дуги на один шаг ниже, чем они существуют ...
Что я делаю не так?