Scalanie sąsiadujących wielokątów w pliku kształtu, który został podzielony na granicach płytek?

24

Obecnie używam danych budowlanych z Ordnance Survey Vectormap District i zauważyłem, że wiele wielokątów budowlanych jest podzielonych na 2 ze względu na sposób, w jaki system operacyjny podzielił plik kształtu.

Oto, co widzę w QGIS - podkreśliłem niektóre budynki podzielone na granicy płytek:

wprowadź opis zdjęcia tutaj

Nie mogę ręcznie scalić budynków, ponieważ jest ich o wiele za dużo, które zostały podzielone na granicach (to tylko przykład powiększenia). Szukam zautomatyzowanego sposobu rozwiązania tego problemu.

Niestety, każda strona podzielonych budynków ma inny identyfikator, więc nie mogę ich łatwo rozpuścić.

Jak sugerowałbyś, że mogę automatycznie scalać płytki budowlane?

Edytować

Teraz używam PostGIS do scalania podzielonych wielokątów na granicach kafelków. Oto instrukcja SQL, która robi to za mnie - jest wiele, wiele razy szybsza niż w QGIS:

DROP TABLE merged;
CREATE TABLE merged AS
SELECT
  -- Merge polygons that are within 0.01 metres of each other
  (ST_Dump(ST_Union(ST_Buffer(the_geom, 0.01)))).geom AS the_geom
FROM unmerged;

-- Update the geometry_columns table
SELECT Populate_Geometry_Columns();
Robin Hawkes
źródło
6
Prawdopodobnie powinieneś opublikować swoje rozwiązanie jako odpowiedź i zaakceptować je zamiast mojego. Trzymanie się schematu pytań i odpowiedzi znacznie ułatwia innym osobom z tym samym problemem znalezienie rozwiązania.
Jake

Odpowiedzi:

18

Jeśli chcesz po prostu rozwiązać krawędzie i jesteś zadowolony z posiadania jednej dużej funkcji wielokąta wszystkich budynków, możesz po prostu użyć narzędzia fTools „Dissolve” („Vector / Geoprocessing / Dissolve”).

Jeśli chcesz zachować atrybuty (w przypadku wektora systemu operacyjnego, który byłby tylko identyfikatorem, który wydaje się raczej arbitralny), możesz podzielić warstwę rozpuszczonego wektora, a następnie przypisać atrybuty oryginalnej nierozpuszczonej warstwy za pomocą opcji „Połącz atrybuty” Według lokalizacji":

Jest to podzbiór dwóch plików kształtów budynków systemu operacyjnego, które zostały połączone w jeden plik kształtów za pomocą „Plików wektorowych / zarządzania danymi / Scal pliki kształtu w jeden”. Kolory są przypisywane losowo, aby pokazać poszczególne funkcje:

Wynika to z narzędzia „Rozpuszczanie”: wszystkie elementy zostały rozpuszczone w jedną cechę o identyfikatorze pierwszego obiektu, przerwa w trzech centralnych budynkach zniknęła:

Po podzieleniu obiektu za pomocą „Wektor / Geometria / Wieloczęściowy na pojedyncze części” budynki znów są pojedynczymi elementami, ale wszystkie mają ten sam identyfikator:

Uruchamiając „Narzędzia do zarządzania wektorem / danymi / Połącz atrybuty według lokalizacji” z dzieloną warstwą jako celem i oryginalną scaloną warstwą jako warstwą Połącz wektor, budynki są ponownie przypisywane swoim indywidualnym identyfikatorom:

Jake
źródło
Myślę, że problemem może być to, że jest to OS VMD OpenData (popraw mnie, jeśli się mylę). W takim przypadku funkcje nie mają atrybutów, których można użyć do rozpuszczenia. Więc równie dobrze możesz spróbować użyć zwykłego fTools rozpuszczania. Powodzenia z tym, w niektórych wektorach OpenData mam wielokąty podzielone przez linie, które pokrywają się z liniami siatki, które po prostu się nie rozpuszczą.
nhopton
@nhopton: Ale zwykłe rozwiązanie fTools spowoduje scalenie wszystkich funkcji w jedną funkcję (jeśli nie ma identyfikatorów, których można by użyć do zidentyfikowania, które funkcje należą do siebie, jak w tym przypadku), co najprawdopodobniej nie jest tym, czego chce Rob. Jeśli użyjesz v.dissolvepo przypisaniu wszystkim funkcjom jednakowego atrybutu zastępczego, tylko te, które mają wspólną granicę, zostaną połączone.
Jake,
Jedna cecha prawdopodobnie nie stanowiłaby problemu dla Roba, gdyby wszystko, czego szukał, to kształty. Ale tak, wypróbuj obie metody rozpuszczania. Nacięcie.
nhopton
Czy jesteś pewien, że wszystkie wielokąty, które powinny zostać rozpuszczone, zostały w rzeczywistości rozpuszczone? Tutaj większość z nich rozpuszcza się, ale nie wszystkie.
nhopton,
Dzięki za pomoc! Okazuje się, że @nhopton miał rację i że podziały VectorMap District są właściwie trochę wyłączone, więc nie rozpuszczają się poprawnie. Teraz eksperymentuję z użyciem PostGIS, aby przyspieszyć ten proces.
Robin Hawkes