Usuwasz małe odstępy (taśmy) między wielokątami? [Zamknięte]

51

Mam zestaw wielokątów reprezentujących okręgi administracyjne. Dzielnice zostały zdigitalizowane ręcznie, a między wielokątami znajdują się małe odstępy (taśmy), w których powinny się stykać.

Jak mogę połączyć wielokąty razem, usuwając spacje?

Preferowany jest QGIS, ale ArcGIS i ogólne programowanie są również opcjami.

ogród zoologiczny
źródło

Odpowiedzi:

27

Użyj eliminacji (wymagana licencja ArcInfo)

Eliminuje wielokąty, łącząc je z sąsiadującymi wielokątami, które mają największy obszar lub najdłuższą wspólną granicę. Eliminacja jest często używana do usuwania małych wielokątów taśmy, które są wynikiem operacji nakładania, takich jak Przecięcie lub Połączenie.

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//00170000005p000000.htm

wprowadź opis zdjęcia tutaj

Użytkownicy ArcGIS 10 Uwaga: w Opcjach tego narzędzia dostępna jest NOWA funkcja.

Można teraz zachować oryginalny POLYGON lub POLILINIĘ za pomocą opcji> ex_features (Opcjonalnie) Wejściowa polilinia lub klasa obiektów wielokątów lub warstwa, która określa granice wielokątów lub ich części, których nie należy eliminować.

Mapperz
źródło
3
Czy to działa w przypadku zoo? Wydaje się, że w zestawie danych nie ma kawałków, tylko luki między wielokątami.
podmroku
3
Z powodzeniem użyłem tego narzędzia, aby usunąć przerwy między wielokątami. Wystąpił problem z użyciem tego narzędzia. Gdy pęka wielokąty podczas geoprzetwarzania, uogólnia nowo utworzone wielokąty. Zatem krzywe nie będą tak gładkie, a zamiast tego będą miały ostre „postrzępione” linie. Ymmv.
amasephy
3
@underdark Dobra uwaga. Jednak zawsze można wprowadzić taśmy poprzez połączenie danych z monolitycznym otaczającym wielokątem (takim jak obwiednia zestawu danych). Ciekawym pytaniem jest, w jaki sposób „Eliminuj” wybiera, w które wielokąty zostaną scalone taśmy. Może to wpływać na wyniki (chociaż wątpię, by to było ważne w większości zastosowań). W tej konkretnej sytuacji idealne rozwiązanie rozdzieliłoby taśmy lub uśredniło błędy.
whuber
Jedną z opcji tego narzędzia jest połączenie taśmy z sąsiednim wielokątem z najdłuższą ramką (opcja domyślna) lub największym obszarem.
kenbuja
4
Jeśli nie masz licencji ArcInfo, na stronie arcscripts.esri.com/details.asp?dbid=14672 znajduje się skrypt, który automatyzuje to za pomocą Pythona. Użyłem go z powodzeniem kilka lat temu.
Stephen Lead
20

Aby to zrobić ręcznie w QGIS, przejdź do Settings|Project Properties...Na Generalzakładce u dołu znajduje się Snapping options...Sprawdź warstwę, którą chcesz przyciągnąć, ustaw tryb to vertexi ustaw tolerancję na pewną wartość mniejszą niż najkrótsza odległość między dwoma posiadanymi punktami. Jeśli nie masz pewności, ustaw jednostki pixelsi tolerancję na coś takiego jak 5, aby jeśli były jakieś dziwaczne szczegóły, możesz powiększyć w prawo i upewnić się, że nie przyciągniesz do niewłaściwego wierzchołka.

Następnie edytuj warstwę wektorową, wybierz narzędzie węzła i przenieś błędne punkty do ich odpowiedników.

Robienie tego automatycznie jest nieco trudniejsze. AFAIK QGIS nie ma wtyczki do automatyzacji, i chociaż PostGIS jest zbudowany na GEOS, który ma funkcje przyciągania, nie jest narażony na PostGIS. Możliwe jest napisanie zapytania, aby sprawdzić każdy punkt wielokąta pod kątem sąsiadów w odległości przyciągania, ale obecnie jest to poza moim dowcipem, aby rozwinąć.

GRASS ma v.clean.snap, do którego można uzyskać dostęp za pośrednictwem QGIS, ale istnieje dodatkowy etap tworzenia zestawu danych GRASS.

MerseyViking
źródło
Zawsze możesz skorzystać z przybornika przetwarzania QGIS i zastosować v.clean.snap bezpośrednio do swojego pliku kształtu.
SAnderka
Wersja v.clean.snap nie jest dostępna. użyłem v.clean, a następnie wybrałem narzędzie przyciągania, które dało pustą warstwę. Dokumentacja mówi, że przyciąganie polega na łączeniu linii z wierzchołkiem. Chcę połączyć wierzchołek z innym wierzchołkiem w obrębie progu.
neogeomat
17

Jeśli znasz QGIS: w bagażniku QGIS 1.9 (może być zainstalowany jako qgis.dev za pomocą instalatora OSGEO, patrz strona główna qgis) jest nowa funkcja w menu wektorowym o nazwie „Eliminuj wielokąty taśmy”, która dokładnie robi to, co chcieć. Możesz wybrać problematyczne wielokąty i połączyć je z sąsiednimi wielokątami na podstawie wspólnej propozycji granicy lub obszaru. Wypróbuj to!

Kulik
źródło
3
Aby zaktualizować tę odpowiedź, w QGIS 2.18.1 „Eliminuj wielokąty Sliver” jest dostępny w stabilnym pakiecie i znajduje się w Vector -> Narzędzia geoprzetwarzania.
Valerie Anderson,
Dotyczy to istniejących wielokątów zbłąkanych między głównymi, a nie odstępów między wielobokami.
stragu 21.04.17
15

Jeśli jesteś użytkownikiem QGIS, zyskujesz pełną moc GRASS, ponieważ jest to w pełni topologiczny GIS. Wewnątrz QGIS aktywuj wtyczkę GRASS, utwórz lokalizację / zestaw map, w którym chcesz zaimportować dane.

Otwórz zestaw map i zaimportuj brudną warstwę za pomocą v.in.ogr: graj z dwoma zaawansowanymi parametrami: „próg przyciągania do granic” i „minimalny rozmiar importowanego obszaru”.

Możesz także użyć opcji, które zapewnia moduł v.clean.

Giovanni Manghi
źródło
10

ArcGIS ma reguły topologiczne , które pomogą ci zidentyfikować i poprawić luki w danych, takie jak to, do którego się odnosisz. Aby utworzyć reguły topologii, potrzebujesz licencji ArcEditor lub ArcInfo i przechowujesz swoją klasę elementów w zbiorze danych elementów w osobistej lub plikowej geobazie.

Najprawdopodobniej zechcesz wdrożyć zasadę „ nie wolno mieć luk ”. Po utworzeniu bazy reguł ze wszystkimi regułami, które Twoim zdaniem są konieczne, warto zweryfikować topologię, która zidentyfikuje wszystkie błędy w danych.

Następnie, korzystając z Inspektora błędów i narzędzia Napraw błędy topologii , możesz samodzielnie lub zbiorczo wybrać błędy, które chcesz naprawić, i sposób, w jaki chcesz je naprawić (tj. - utworzyć nowe wielokąty w celu wypełnienia pustych przestrzeni lub połączyć je z większymi wielokątami w pobliżu) .

RyanDalton
źródło
7

W przyborniku QGIS 2.12 (Lyon) dostępna jest funkcja „Eliminuj wielokąty taśmy”. Jestem pewien, że jest to również we wcześniejszej wersji.

dnltsk
źródło
2

Cóż, korzystałem z funkcji PostGIS (używam bezpośrednio w moim QGIS), która wykonuje rekurencyjne przyciąganie w celu rozwiązania tego problemu. Wyniki są dość dobre, po prostu wymagają dobrego połączenia wartości tolerancji, aby uzyskać najlepsze wyniki. Jeśli chcesz spróbować, sprawdź to (w moim przypadku wszystkie geometrie są wielokrotne, stąd st_multi w moim wykonaniu):

CREATE OR REPLACE FUNCTION dsgsnap(tabela text, snap float) RETURNS void AS 
        $BODY$
            DECLARE
            id int;
            BEGIN
                FOR id in execute('select id from '||tabela)
                LOOP
                    EXECUTE     
                'update '||tabela||' as classe set geom = st_multi(res.geom) 
                from 
                    (
                        select st_snap(a.geom, st_collect(b.geom), '||snap||') as geom, a.id as id 
                        from '||tabela||' a, '||tabela||' b 
                        where a.id != b.id and a.id = '||id||' 
                        group by a.id, a.geom
                    ) as res 
                where res.id = classe.id';
                END LOOP;
                RETURN;                        
            END
        $BODY$
        LANGUAGE plpgsql;
Lcoandrade
źródło
1

Nie jest to idealne rozwiązanie, ale w większości przypadków jedna z tych dwóch rzeczy działa dla mnie:

  1. W QGIS zapisz warstwę w formacie GEOJSON. Ale przed zapisaniem w oknie dialogowym „zapisz warstwę jako” ustaw dokładność współrzędnych na 3 (domyślnie 15). Spowoduje to zjednoczenie wierzchołków, które są bardzo blisko siebie.

  2. Przejdź do Mapshaper , prześlij plik i kliknij „upraszczaj”. W lewym górnym rogu poda liczbę znalezionych przecięć linii i daje możliwość ich naprawy. Uważam, że ta poprawka działa mniej więcej w połowie czasu.

mgalka
źródło
0

Nie korzystałem z niego, ale ET Geowizards , który wprowadza wiele narzędzi do przetwarzania ArcEditor i ArcInfo do licencji poziomu ArcView (znanej również jako ArcGIS Standard), ma Kreatora eliminacji, który „Eliminuje niechciane wielokąty (slivers) poprzez scalenie ich w sąsiednie wielokąty lub usuwanie ich ” . Zestaw narzędzi kreatora przywróci ci 250 USD ( cennik ).

matowe wilkie
źródło
0

Napotkałem ten sam problem, który poprzez eksplorację narzędzi dość łatwo rozwiązałem, chociaż nie znam logiki. ! [W narzędziach przejdź do skrzynki narzędziowej Zarządzanie danymi, przejdź do Klasy cech i uruchom skrypt Integruj, klikając dwukrotnie] [1]

w oknie Skryptu wybierz klasę, w której występuje problem, aw tolerancji XY dodaj dolinę, mierząc odległość za pomocą narzędzia pomiaru w wielu punktach i uzyskaj średnią wartość doliny, wstaw tę wartość do środowiska tolerancji i zastosuj problem. rozwiązuję. nie teraz jak, ale rozwiązany z około 90% dokładnością. ! [wprowadź opis zdjęcia tutaj] [2]

Wypróbowałem wszystkie inne metody opisane w powyższych odpowiedziach, ale uzyskanie automatycznych poprawek dla przerw między sąsiadującymi wielokątami było trudne i kłopotliwe.

SM Farooqi
źródło
1
Jeśli wkleisz link do zdjęć, do których się
odnosisz,