Semplificare i poligoni al linestring?


16

Vorrei semplificare alcuni poligoni che rappresentano i fiumi in linestring. Presumo che i buchi nei poligoni possano essere omessi. Qualcuno ha qualche buona idea su come farlo semplicemente?

Sarebbe bello se fosse possibile farlo direttamente in postgis o con un altro strumento open source, ma sarà sufficiente una breve descrizione dell'algoritmo.

Risposte:


13

Quello che ti serve è chiamato "algoritmo di scheletratura".

Dai un'occhiata a questo articolo:

Haunert, J.-H., Sester, M., giugno 2008. Crollo dell'area e linee di mezzeria della strada basate su scheletri dritti. GeoInformatica 12 (2), 169-191. URL http://dx.doi.org/10.1007/s10707-007-0028-x

Alcuni di questi algoritmi sono sviluppati nella libreria CGAL .


Nessuno dei due link funziona più, Julien: pensi di poter fornire un riepilogo degli algoritmi o almeno riferimenti formali per consentire alle persone di consultare gli articoli?
whuber

Sì, ho aggiornato la risposta con un riferimento adeguato a un articolo più recente.
luglio

2
Grazie! (Non posso aggiungere un altro voto però - ne avevo solo uno da dare. :-)
whuber

4

In PostGIS 2.2 con SFCGAL, questo può essere fatto con ST_StraightSkeleton o ST_ApproximateMedialAxis , a seconda dei criteri.


2

il plug-in di scheletro JUMP è disponibile come parte di openjump http://www.openjump.org


1

Proprio come un avvertimento, non l'ho mai provato prima. Il tuo successo dipenderà dalla qualità dei dati che hai attualmente.

Quindi, pensa al poligono come una striscia di triangoli. Ogni triangolo si collega a un vertice sul lato opposto del corridoio con un bordo. Ora, per ciascuno dei bordi del corridoio, posiziona semplicemente un vertice proprio al centro. Questi nuovi vertici sono i punti del tuo linestring. Probabilmente puoi giocherellare con il modo in cui selezioni il punto centrale sul bordo per una maggiore precisione.


0

Ancora una volta, ET GeoWizards potrebbe essere la risposta. Prova lo strumento Crea linee di mezzeria da poligoni .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.