Quindi, il titolo è un po 'imbarazzante. Darò alcuni retroscena e poi farò la mia domanda.
Contesto : lavoro come sviluppatore di applicazioni GIS Web , ma nel mio tempo libero ho giocato con il rendering delle mappe e il miglioramento dei formati di scambio di dati. Lavoro solo nello spazio 2D.
Un problema interessante che ho riscontrato è che quando si esegue il rendering di un poligono su piccola scala (ingrandito), molti dei vertici sono ridondanti. Un caso estremo sarebbe che hai un poligono con 500.000 vertici che occupa solo un singolo pixel. Se stai inviando questi dati al browser, sarebbe logico omettere ~ 499.999 di quei vertici. Un modo per raggiungerlo è il rendering di un'immagine su un server e l'invio come PNG: voilà, è un punto. A volte, tuttavia, vogliamo che i dati vengano inviati al browser in modo che possano essere visualizzati con SVG (o canvas o webgl) in modo che possano essere interattivi.
Il problema : risulta che, utilizzando i moderni set di dati geografici, è molto facile sovraccaricare le capacità di rendering di SVG. Nel tentativo di far fronte a tali limiti, sto cercando di capire come ridurre visivamente senza perdita di dati un set di dati per una data scala e estensione della mappa (e, se necessario, per una larghezza e altezza dei pixel della mappa nota).
Ho ottenuto una notevole riduzione delle dimensioni dei dati semplicemente usando l' algoritmo Douglas-Peucker e credo di essere riuscito a mantenerlo fedele ai poligoni entro un pixel. Sfortunatamente, Douglas-Peucker non conserva la topologia, quindi ha cambiato il modo in cui sono stati resi i bordi tra i poligoni. Non sono riuscito a trovare facilmente altri algoritmi da provare e adattare allo scopo, ma non ho molti background CS / algoritmo e potrei non riconoscerli se li vedessi.