Usuń zduplikowane wielokąty za pomocą narzędzi Open Source

13

Mam plik kształtu zawierający obiekty o zduplikowanych geometriach, ale różne atrybuty (np. Wielokąt z atrybutem XX i identyczny wielokąt z atrybutem XY). Chcę zidentyfikować duplikaty, a następnie wybrać ten z właściwymi atrybutami, usuwając drugi.

Próbowałem narzędzi topologicznych w OpenJump / Kosmo, ale bez powodzenia. Mają narzędzie do usuwania duplikatów, które robi to, co chcę, z wyjątkiem tego, że wydaje się, że arbitralnie usuwa jedną z funkcji, a nie pozwala mi wybrać, którą mam zachować.

Mam dostęp do QGIS, OpenJUMP, Kosmo itp. W razie potrzeby mogę zainstalować inne narzędzia open source / darmowe.

Myśli?

Darren Cope
źródło

Odpowiedzi:

7

Oprócz PostGIS można również użyć topologicznego GIS (GRASS):

  1. Ściągnij i zainstaluj
  2. Uruchom i wybierz Menedżera lokalizacji, użyj narzędzia do wygenerowania nowej bazy danych projektu z pliku SHAPE (o nazwie „GRASS Location”), zobacz tutaj krok po kroku przewodnik
  3. Zaimportuj plik SHAPE
  4. Użyj narzędzia „v.clean”, które oferuje szereg opcji
  5. Eksportuj mapę z powrotem do formatu pliku SHAPE za pomocą „v.out.ogr”

Sidenote: my planujemy zaoferować WPS do tego, aby można było szlifować swoje dane za pośrednictwem naszego portalu internetowego.

markusN
źródło
Nie wierzę, że v.clean pozwala użytkownikom „interaktywnie” identyfikować i naprawiać błędy topologii jeden po drugim. Proszę, popraw mnie jeśli się mylę.
Darren Cope,
Tęskniłem za tym, że chcesz to zrobić interaktywnie. Więc digitizer v.digit jest narzędziem do użycia.
markusN
Markus, Szybki obrót przez v.digit nie brzmi tak, jakby zrobił to, co chcę. Czy możesz podać przykład realizacji mojego zadania przy użyciu v.digit?
Darren Cope,
1
Właściwie samo importowanie pliku kształtu do GRASS tworzy warstwę nakładających się wielokątów jako warstwę 2_polygon. Myślę, że to powinno mi wystarczyć!
Darren Cope
3

To właśnie robię w takich przypadkach. Jak rozumiem, będziesz musiał dokonać ręcznej kontroli, aby zdecydować, który z nich ma właściwy atrybut. Potem robię to w dwóch krokach. Najpierw tworzę tabelę lub widok w PostGIS ze zduplikowanymi wielokątami, a następnie otwieram tę tabelę w GIS na pulpicie wraz z oryginalną warstwą, w której chcę usunąć duplikaty. Doprowadzi mnie to do duplikatów poprzez moją zduplikowaną tabelę i mogę usunąć z oryginalnej tabeli lub pliku shapefile lub cokolwiek to jest.

Zapytanie o znalezienie duplikatów będzie podobne, jeśli masz unikalny identyfikator o nazwie gid i kolumnę geometrii o nazwie the_geom:

create table duplicates as
select a.the_geom, a.gid, b.gid from mytable a, mytable b 
where ST_Equals(a.the_geom, b.the_geom) and a.gid!=b.gid;

Istnieje kilka wariantów ST_Equals, ale myślę, że ST_Equals jest tym, czego chcesz. To da ci tabelę ze zduplikowanymi geometriami i gid (id) pierwszej i drugiej okazji wielokąta. Dostaniesz tę samą parę duplikatów dwa razy, ale to nie powinno mieć znaczenia, ponieważ chcesz, aby pokazały ci, gdzie się znajdują.

HTH Nicklas

Nicklas Avén
źródło
3

Jeśli korzystasz z PostGIS 1.5.x, sprawdź funkcję ST_HausdorffDistance ().
Duplikaty geometrii dadzą wartość 0. Użyj jej jak wspomniane samosprzężenie. Całkiem fajne do porównywania kształtów wielokątów.

eprand
źródło
0

Prostszy sposób na zrobienie tego. Oblicz obszar w GIS na pulpicie i uporządkuj według obszaru rosnąco lub malejąco. Musisz teraz sprawdzić każdą linię, aby zobaczyć zduplikowane obiekty w tabeli atrybutów. Opiera się na przypuszczeniu, że nigdy nie masz dokładnie tego samego obszaru dla obiektów, które nie są powielone, chociaż czasem może być źle.

ThomasG77
źródło