Jak rozpuszczać wielokąty z pliku kształtu za pomocą narzędzi open source?

10

W moim obecnym projekcie wizualizuję dane na mapie przedstawiające pewne wartości dla każdego obszaru administracyjnego kraju. Dostaję plik kształtu tego kraju, który przekształcam w GeoJSON do użytku z PolyMaps. Teraz mam obowiązek grupowania wielu obszarów w większe, ponieważ nie ma danych dla niektórych mniejszych części, ale można zebrać dane zagregowane dla dużych. Te klastry są predefiniowane (np. A + B + C = D), więc pomyślałem, że łatwiej byłoby utworzyć klastrowany plik kształtu i przekonwertować go później na GeoJSON.

Ale jak utworzyć taki klaster, najlepiej zautomatyzowany i przy użyciu narzędzi typu open source? Każdy inny rozsądny sposób jest oczywiście mile widziany.

Nikołaj Prokoschenko
źródło

Odpowiedzi:

5

Zawsze możesz użyć narzędzia typu open source, takiego jak QGIS, aby otworzyć plik kształtu i scalić funkcje za pomocą wbudowanego narzędzia „scal wybrane elementy” (wystarczy wybrać funkcje, kliknąć scalić, wybrać atrybuty, aby odziedziczyć nową scaloną funkcję, gotowe).

To oczywiście nie ma większego sensu, jeśli mówimy o setkach lub tysiącach połączeń. Kiedyś zastanawiałem się, czy można połączyć funkcje „według atrybutu” w QGIS?

EDYCJA: Ok, jestem głupia, jeśli masz wspólny atrybut wszystkich funkcji, które zamierzasz „skupić” (np. Nazwę prowincji lub hrabstwa), byłoby to przypadkiem narzędzia do rozpuszczania. Otwórz plik kształtu, wybierz opcję rozpuszczania (w QGIS znajduje się on w Vector> Narzędzia geoprzetwarzania> Rozpuszczanie), wybierz kolumnę o wyżej wspomnianej wspólnej nazwie i rozpocznij proces. Powinno to mieć nadzieję (jeśli nie zrozumiałem cię źle), czego szukasz.

SAnderka
źródło
Ogólnie rzecz biorąc, dobra rada, a jeśli wszystko sprowadza się do pracy ręcznej, znajdę kogoś, kto stworzy dla mnie te pliki kształtów za pomocą QGIS, jak opisano. Chciałbym jednak móc zdefiniować te klastry (np. Za pomocą kodów NUTS: połączyć FR413 i FR411 w coś o nazwie _FRX1), a następnie uruchomić skrypt, który wygenerowałby te klastry plików kształtów. Chcę mieć możliwość korygowania błędów lub dostosowywania się do szybkich zmian bez nakładania się na narzędzie GUI. Jest całkiem możliwe, że pewnego dnia klastry te zostaną zdefiniowane przez użytkowników końcowych, więc potrzebuję trochę elastyczności.
Nikołaj Prokoschenko,
Nigdy go nie używam, ale myślę, że możesz używać konsoli do robienia wszystkiego w QGIS, więc GUI nie jest potrzebne. Zawsze będziesz musiał zdefiniować te klastry w jakiejś tabeli, nawet jeśli całkowicie polegasz na rozwiązaniu skryptowym. Aby uniknąć bałaganu przy użyciu pliku kształtu, dołączając do tego stołu i rozwiązując go. Wydaje mi się, że to też byłoby skryptowalne?
SAnderka
całkowicie możliwe, jestem całkowicie nowicjuszem we wszystkich sprawach GIS. Przejrzę skrypt QGIS, dzięki.
Nikolai Prokoschenko
2

Aby uzyskać mniej pracy ręcznej, możesz spojrzeć na SpatiaLite. Możesz łatwo importować pliki kształtu za pomocą np

spatialite> .loadshp ~/maps/areas areas iso-8859-15
spatialite> UPDATE areas SET Geometry = SetSrid(Geometry,4326);
spatialite> SELECT RecoverGeometryColumn('areas','Geometry',4326,'POLYGON',2);

Następnie dla części rozpuszczającej:

Chciałbym móc zdefiniować te klastry (np. Za pomocą kodów NUTS: scal FR413 i FR411 w coś o nazwie _FRX1)

Potrzebną tutaj funkcją jest GUnion (). Możesz zdefiniować swoje „klastry” w drugiej tabeli. Następnie możesz dołączyć klaster i tabelę obszarów i użyć GUnion () z GROUP BY, aby utworzyć końcową tabelę union_table.

Następnie możesz wyeksportować do pliku kształtu za pomocą .dumpshp

spatialite> .dumpshp union_table Geometry new_shapefile iso-8859-15 POLYGON

Jeśli potrzebujesz GeoJSON, możesz teraz przekonwertować plik.

Możesz napisać krótki skrypt np. W Pythonie, który obsługuje wszystkie te obciążenia, sprzężenia i zrzuty.

podmrok
źródło
Wygląda bardzo obiecująco, eksperymentuję z tym! Dzięki! Czy mógłby Pan wyjaśnić, co UPDATEi SELECTlinie zrobić?
Nikolai Prokoschenko