Quindi, il titolo è un po 'imbarazzante. Darò un po 'di background e poi farò la mia domanda.
Sfondo : lavoro come uno sviluppatore di applicazioni web GIS , ma nel mio tempo libero Ho giocato con il rendering delle mappe e il miglioramento dei formati di interscambio dati. Lavoro solo nello spazio 2D.
Un problema interessante che ho riscontrato è che quando si esegue il rendering di un poligono su piccola scala (via d'uscita ridotta), 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, avrebbe senso omettere ~ 499.999 di quei vertici. Un modo per raggiungerlo è quello di rendere un'immagine su un server e inviarla come PNG: voilà, è un punto. A volte, tuttavia, desideriamo che i dati vengano inviati al browser in cui può essere visualizzato con SVG (o canvas o webgl) in modo che possa essere interattivo.
Il problema : si scopre che, utilizzando i moderni set di dati geografici, è molto facile sovraccaricare le capacità di rendering di SVG. Nel tentativo di far fronte a questi limiti, sto cercando di capire come ridurre visivamente senza perdita un set di dati per una data scala e l'estensione della mappa (e, se necessario , per una larghezza e altezza del pixel di una mappa nota).
Ho ottenuto una notevole riduzione delle dimensioni dei dati utilizzando solo l'algoritmo Douglas-Peucker , e credo di essere riuscito a mantenere i poligoni veri con un pixel. Sfortunatamente, Douglas-Peucker non conserva la topologia, quindi ha cambiato il modo in cui i bordi tra i poligoni sono stati renderizzati. Non sono riuscito a trovare prontamente altri algoritmi da provare e adattare allo scopo, ma non ho molto background su CS / Algoritmo e potrei non riconoscerli se li vedessi.