Sto utilizzando un'implementazione Javascript dell'algoritmo di Fortune per calcolare le celle di voronoi (https://github.com/gorhill/Javascript-Voronoi). I miei siti da calcolare sono punti su una mappa (quindi (lat,lng)
). Per prima cosa ho realizzato la proiezione (lat,lng) -> (x,y)
, ho quindi calcolato le celle di voronoi e ho fatto la proiezione dei mezzi bordi nell'altro senso.
Funziona bene, visualizzo il risultato usando il volantino ma ho bisogno di fare ancora una cosa.Come unire poligoni adiacenti
Ogni sito inizialmente computo dipende da un ID, ho riclassificare le celle Voronoi per ID e io alla fine, per ogni ID con una struttura dati standard simile a questo:
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [[
[9.994812, 53.549487],
[10.046997, 53.598209],
[10.117721, 53.531737],
[9.994812, 53.549487]
]]
}
}, {
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [[
[10.000991, 53.50418],
[10.03807, 53.562539],
[9.926834, 53.551731],
[10.000991, 53.50418]
]]
}
}
]
};
Un insieme di poligoni (fatto formare il mezzo bordo delle cellule di voronoi) per un dato ID.
ho bisogno di unire i poligoni per ID, ho intenzione di usare turf.merge()
, ma ho errori di topologia
turf.min.js:13 Uncaught TopologyError: side location conflict
Sulla base di questo post (http://lists.refractions.net/pipermail/jts-devel/2009-March/002939.html), ho cercato di arrotondare la coppia (lat,lng)
da 10^-14 a 10^-7 ma non ha funzionato veramente. Prima di cercare i nodi e provare a rimuoverli, ho stampato un campione di dati e sono sicuro di chiedermi se ho usato i buoni dati dall'algoritmo di Fortune. Quando sono visualizzati tutti i poligoni per tutti gli ID, ho il diagramma di destra, ma quando visualizzare tutti i poligoni per un ID o alcuni poligoni per un ID alla fine con diagrammi incomplete:
Parte il diagramma completo
parte del diagramma per un ID
Due "poligoni" per un dato ID
Qualcuno ha un'idea di come unire poligono che condivide almeno un vertice comune? E perché c'è un errore di topologia?
Edit: I poligoni non sono "incompleti" (stavo usando polilinea)
Ho anche provato su un campione di più facile:
e ancora ricevuto l'errore:
Uncaught TopologyError: side location conflict [ (44.8220601, -0.5869532) ]
Quindi non è (o almeno non solo) a causa di nodi
Ho usato questa libreria ma non ho avuto di unire tutte le cellule purtroppo così non si può aiutare ... Si dovrebbe provare la pubblicazione questa domanda come un bug sul repository github se riesci a riprodurlo in un caso molto semplice. – deKajoo
grazie, ho creato un bug sul repository github. Incontro lo stesso problema con turf.union() – kwn
Hai provato d3.js? https://github.com/mbostock/d3/wiki/Geometry – cbertelegni