Mam wieloboczną warstwę wektorową reprezentującą obszar zalany powodzią. Warstwa została wykonana w taki sposób, że niektóre obszary składają się z wielu mniejszych dotykających się wielokątów (patrz zrzut ekranu poniżej, z etykietą „oryginalne dane”).
Chciałbym rozpuścić wielokąty tam, gdzie się dotykają. Jeśli użyję narzędzia geoprzetwarzania rozpuszczania w narzędziu fGools QGIS, które korzysta z biblioteki GEOS, otrzymam nieoczekiwane wyniki (patrz „rozpuszczanie z QGIS fTools”). Wygląda na to, że GEOS nie używa progu do określania, czy wielokąty się dotykają, jak wspomniano w tych kwestiach:
http://trac.osgeo.org/qgis/ticket/3126
http://trac.osgeo.org/qgis/ticket/3184
http://hub.qgis.org/issues/2806
To samo podejście w ArcGIS daje oczekiwany wynik (patrz „rozpuszczenie z ArcGIS 10.1”).
Najwyraźniej jest to „funkcja” GEOS, a nie błąd. Czy jest jakiś sposób, aby naprawić dane, które muszę wygenerować oczekiwany wynik? Drobna utrata precyzji (kilka cm?) Może być dla mnie do zaakceptowania. Idealnie rozwiązaniem byłoby coś, co mógłbym napisać we wtyczce QGIS, jako etap wstępnego przetwarzania.
Powiązane pytanie (bez odpowiedzi): Jak ustawić wartość tolerancji narzędzia Geoprocessing w QGIS?
Link do przykładowych danych jako plik kształtu: https://www.dropbox.com/s/c8ns7wwfv289ad0/sample.zip
Odpowiedzi:
W takim przypadku wygląda na to, że musisz pomóc w rozwiązaniu narzędzia, najpierw ustalając topologię. Oto, jak możesz to zrobić w GRASS.
Kiedy ładujesz plik kształtu, tak go widzi GRASS:
Każdy krzyż oznacza obszar. Widać, że na liniach granicznych znajdują się krzyże: są to wielokąty taśmy spowodowane niewielkim przesunięciem między liniami granicznymi.
Usuń wielokątne taśmy utworzone przez luki między prawdziwymi wielokątami:
Przyciągaj linie graniczne:
Przełam linie graniczne na nowych skrzyżowaniach:
Usuń teraz zduplikowane linie graniczne:
Rozpuść wielokąty
Zrobione:
źródło
Użyj polecenia GRASS GIS v.dissolve (we wtyczce Sextante -> Polecenia GRASS -> Wektor)
Jeśli szybko odtworzę przykład:
Wynik z v.dissolve:
Wyjaśnienie
Problem jest łatwy do zrozumienia. Plik shapefile nie ma topologii, jeśli dwa obszary mają wspólną granicę, która byłaby dwukrotnie digitalizowana, a także przechowywana w duplikacie.
Widać to wyraźnie, gdy próbujesz edytować plik kształtu:
GRASS GIS (jako ArcGIS) jest topologicznym gis. Po zaimportowaniu pliku kształtu w GRASS uzyskana warstwa ma topologię: wspólna granica między dwoma obszarami istnieje raz i jest współdzielona.
Z tego powodu, gdy chcesz rozpuścić plik kształtu ( rozwiązać dwie granice ), możesz napotkać problemy (w QGIS, GvSIG, OpenJUMP lub starym ArcView 3.x), patrz ArcUserI: Zrozumienie topologii i plików kształtów .
W GRASS v.dissolve ma na celu zlikwidowanie wspólnych granic między obszarami o tym samym numerze kategorii
źródło
v.dissolve
ma parametr tolerancji, który rozwiązuje problem PO.v.dissolve
go używam , wydaje się, że działa, poza tym, że „wypełnia” mały kwadrat pośrodku elementów. i.stack.imgur.com/AA59l.png