Ecco una mappa di contorno per la quale sono disponibili tutti i poligoni dei livelli.
Chiediamo come levigare i poligoni mantenendo tutti i vertici conservati nella loro posizione esatta?
In effetti il contorno viene creato sopra i dati di una griglia, è possibile suggerire quindi di uniformare i dati della griglia e quindi il contorno risultante sarà più uniforme. Si noti che questo non funziona come desidero dal momento che la funzione di smoothing come il filtro gaussiano rimuoverà piccoli pacchetti di dati e cambierà l'intervallo della terza variabile, ad esempio l'altezza non consentita nella mia applicazione.
In realtà sto cercando un pezzo di codice (preferibilmente in Python ) che possa fare il livellamento di poligoni 2D (qualsiasi tipo: convesso, concavo, autointersecante ecc.) Ragionevolmente indolore (dimentica le pagine di codici) e preciso.
Cordiali saluti, c'è una funzione in ArcGIS che lo fa perfettamente, ma l'uso di applicazioni commerciali di terze parti non è la mia scelta per questa domanda.
1)
Scipy.interpolate:
Come vedi le spline risultanti (rosso) non sono soddisfacenti!
2)
Ecco il risultato usando il codice indicato qui . Non funziona bene!
3)
Per me la soluzione migliore dovrebbe essere qualcosa di simile alla figura seguente in cui un quadrato viene smussato gradualmente cambiando solo un valore. Spero in un concetto simile per levigare qualsiasi forma di poligoni.
Soddisfare la condizione che la spline superi i punti:
4)
Ecco la mia implementazione dell '"idea di whuber" riga per riga in Python sui suoi dati. Probabilmente ci sono alcuni bug poiché i risultati non sono buoni.
K = 2 è un disastro e quindi per k> = 4.
5)
Ho rimosso un punto nella posizione problematica e la spline risultante è identica a quella di whuber. Ma è ancora una domanda che perché il metodo non funziona in tutti i casi?
6)
Un buon livellamento per i dati di whuber può essere il seguente (disegnato da un software di grafica vettoriale) in cui è stato aggiunto senza problemi un punto in più (confrontare con l'aggiornamento
4):
7)
Guarda il risultato della versione Python del codice di Whuber per alcune forme iconiche:
Si noti che il metodo sembra non funzionare per le polilinee. Per la polilinea d'angolo (contorno) il verde è quello che voglio ma è diventato rosso. Questo deve essere affrontato poiché le mappe di contorno sono sempre polilinee sebbene le polilinee chiuse possano essere trattate come poligoni come nei miei esempi. Inoltre, il problema emerso nell'aggiornamento 4 non è stato ancora risolto.
8) [il mio ultimo]
Ecco la soluzione finale (non perfetta!):
Ricorda che dovrai fare qualcosa per l'area indicata dalle stelle. C'è forse un bug nel mio codice o il metodo proposto necessita di ulteriore sviluppo per considerare tutte le situazioni e fornire gli output desiderati.