Jak uogólnić SpatialPolygons i zachować topologię w R?

18

Chciałbym uogólnić SpatialPolygonsDataFrame w R, aby wykres był bardziej wydajny. Wieloboki, które mam, powodują powstanie ogromnych wykresów pdf, które wolno się ładują i trudno je zintegrować z dokumentem.

Próbowałem użyć gSimplifyfunkcji z rgeospakietu, ale niestety nie zachowuje ona topologii wielokątów.

Czy istnieje alternatywa, której mogę użyć?

żółta czapka
źródło
nie jest to naprawdę rozwiązanie, ale czy możesz zamiast tego spiskować na raster (jpg / png)? Przydatne może być pytanie stackoverflow omawiające zmniejszenie wielkości pliku pdf: stackoverflow.com/questions/8521299/…
djq
wykreślanie map jako obrazu rastrowego jest opcją, ale gdy tylko jest to możliwe, chciałbym użyć grafiki wektorowej. Jakość obrazu jest lepsza w przypadku korzystania z grafiki wektorowej, zwłaszcza w przypadku cyfrowej wersji dokumentów.
yellowcap,
gSimplify()ma opcjonalny parametr, topologyPreservektóry domyślnie to FALSE. Czy próbowałeś to ustawić TRUE?
krlmlr

Odpowiedzi:

7

Dyskusja na ten temat na r-sig-geo . Aby uzyskać ostateczną odpowiedź, należy tam zapytać, ponieważ są ludzie, którzy znają wgląd przestrzennego R.

Ale możesz to również zrobić w aplikacjach komputerowych GIS (eksportuj kształt za pomocą komendy writeOGR z rgdal lub writePolyShape () z maptools), takich jak QuantumGIS, GRASS lub SAGA.

Do QuantumGIS użyj Vector / Geometry Tools / Simplify geometrii (przetestowałem i nie zachowałem topologii, ale zastosowałem do pliku kształtu admin1 w Rumunii, wygląda dobrze z 2000 węzłami).

W przypadku GRASS użyj v. Generalizacji (przeczytaj instrukcję, aby uzyskać informacje na temat algorytmów, jest kilka).

W przypadku SAGA musisz najpierw przekonwertować wielokąt na linię (Kształty - Linie / Konwertuj wielokąty na Linie), następnie uprościć linie (Kształty Linie / Uproszczenie linii), a na koniec przekonwertować linie na wielokąty (Kształty - Wielokąty / Konwertuj linie na wielokąty). Przetestowałem to, a wyniki zachowały topologię.

Pozdrawiam i powodzenia,

Niculita Mihai
źródło
W międzyczasie znalazłem również usługę online, która dokonuje uproszczenia przy jednoczesnym zachowaniu topologii: mapshaper.org . Użyłem go jako alternatywy, ponieważ wydaje się, że nie jest to możliwe bezpośrednio w R (QGis tak naprawdę nie zachowuje topologii i nie znam innych pakietów oprogramowania)
yellowcap
1
Przetestowałem twoją obserwację w Saga 2.0.8, a wynik nie ma zachowanej topologii!
Fabian Zeindl,
2

Jest teraz wspaniały rmapshaperpakiet Andy'ego Teuchera, który zawiera funkcję upraszczania, która „wykonuje upraszczające topologicznie uproszczenie wieloboków”.

W repozytorium github przykład użycia:

states_simp <- ms_simplify(states_sp)

gdzie states_spjest spatialPolygons*przedmiot.

Aby uzyskać więcej informacji, zobacz pakiet README: https://github.com/ateucher/rmapshaper

Phil
źródło
0

to powinno pomóc:

  • gSimplify(..., topologyPreserve=T)z GEOSpaczki
petermeissner
źródło
2
niestety opcja zachowania topologii w gSimplifytak naprawdę nie zachowuje topologii dla kilku wielokątów. Myślę, że odnosi się to bardziej do topologii pojedynczego lub wielu wielokątów. W przypadku pliku kształtu z wieloma wielokątami topologia nie jest zachowana.
yellowcap