Oto mapa konturowa, dla której dostępne są wszystkie wielokąty poziomów.
Zapytajmy, jak wygładzić wielokąty, zachowując wszystkie wierzchołki w ich dokładnych lokalizacjach?
Rzeczywiście kontur jest nałożony na dane siatki, możesz więc zasugerować wygładzenie danych siatki, a tym samym powstały kontur będzie gładszy. Zauważ, że to nie działa zgodnie z moim pragnieniem, ponieważ funkcja wygładzania, taka jak filtr Gaussa, usunie małe paczki danych i zmieni zakres trzeciej zmiennej, np. Wysokość, która nie jest dozwolona w mojej aplikacji.
Właściwie szukam kawałka kodu (najlepiej w Pythonie ), który może wygładzać wielokąty 2D (dowolnego typu: wypukły, wklęsły, przecinający się itp.) W miarę bezbolesny (zapomnij o stronach kodów) i dokładny.
Do Twojej dyspozycji jest funkcja ArcGIS, która robi to doskonale, ale korzystanie z komercyjnych aplikacji innych firm nie jest moim wyborem.
1)
Scipy.interpolate:
Jak widać, powstałe splajny (czerwone) nie są zadowalające!
2)
Oto wynik przy użyciu kodu podanego tutaj . To nie działa dobrze!
3)
Dla mnie najlepszym rozwiązaniem powinno być coś takiego jak poniższy rysunek, w którym kwadrat jest wygładzany stopniowo poprzez zmianę tylko jednej wartości. Mam nadzieję na podobną koncepcję wygładzania dowolnej formy wielokątów.
Spełniając warunek, że splajn przechodzi przez punkty:
4)
Oto moja implementacja „pomysłu Whubera” wiersz po wierszu w Pythonie na jego danych. Możliwe są pewne błędy, ponieważ wyniki nie są dobre.
K = 2 to katastrofa, więc dla k> = 4.
5)
Usunąłem jeden punkt w problematycznej lokalizacji, a powstały splajn jest teraz identyczny z Whuberem. Ale wciąż pozostaje pytanie, dlaczego ta metoda nie działa we wszystkich przypadkach?
6)
Dobre wygładzanie danych Whubera może być następujące (rysowane przez oprogramowanie do grafiki wektorowej), w którym płynnie dodano dodatkowy punkt (porównaj z aktualizacją
4):
7)
Zobacz wynik z wersji Whubera w Pythonie dla niektórych ikonicznych kształtów:
Zauważ, że metoda wydaje się nie działać dla polilinii. Dla narożnej polilinii (konturu) chcę tego, co jest zielone, ale zrobiło się czerwone. Należy się tym zająć, ponieważ mapy konturowe są zawsze poliliniami, chociaż zamknięte polilinie można traktować jak wielokąty, jak w moich przykładach. Nie oznacza to również, że problem pojawiający się w aktualizacji 4 nie został jeszcze rozwiązany.
8) [mój ostatni]
Oto ostateczne rozwiązanie (nie idealne!):
Pamiętaj, że będziesz musiał coś zrobić z obszarem wskazanym przez gwiazdy. Być może w moim kodzie występuje błąd lub proponowana metoda wymaga dalszego rozwoju, aby uwzględnić wszystkie sytuacje i zapewnić pożądane wyniki.