Rozpuścić / agregować wielokąty za pomocą ogr2ogr czy gpc?

16

Mam dużą liczbę wielokątów reprezentujących granice hrabstw USA, które muszę połączyć w jak najmniejszą liczbę wielokątów.

Czy można to zrobić za pomocą niekomercyjnego oprogramowania lub oprogramowania o rozsądnej cenie?

PostGIS nie jest dostępny, podobnie jak Java, ale C jest.

LeeGee
źródło
OpenSourceSoftware może zrobić wiele rzeczy, czego potrzebujesz ... narzędzie, biblioteka i kompilator C też działa z którym środowiskiem / systemem operacyjnym?
huckfinn
pobierz qgis ze strony www.qgis.org
Antonio Locandro
@huckfinn: Korzystam z CentOS, a narzędzie wiersza poleceń lub Perl-XS lub biblioteka C byłyby idealne, dziękuję za pytanie. Moje dane źródłowe znajdują się w plikach kształtu ESRI, chociaż mam kopie wielokątów w MySQL. Mam ogr2ogr, ale nie dialekt MySQL.
LeeGee
Zakładam, że gpctytuł, o którym mowa, to GPC - biblioteka General Polygon Clipper z University of Manchester
matt wilkie

Odpowiedzi:

31

Z ogr2ogr(GDAL> = 1.10 z obsługą SpatiaLite):

ogr2ogr output.shp input.shp -dialect sqlite -sql "SELECT ST_Union(geometry), dissolve_field FROM input GROUP BY dissolve_field"
Antonio Falciano
źródło
1
Czy którakolwiek z wersji Gdal / Ogr, dla Windows, zawiera obsługę Spatialite, MS4W, OSGeo4w, gisinternals, geoinformatica?
klewis
Z pewnością AFAIK OSGeo4W i pakiety obsługiwane przez Tamas Szekeres ( vbkto.dyndns.org/sdk ).
Antonio Falciano
1
Jakiej wersji GDAL używasz ( gdalinfo --version)? Aby obejść ten problem, możesz najpierw spróbować utworzyć plik kształtu, a następnie przekonwertować go na KML, ponieważ sterownik KML ma pewne ograniczenia.
Antonio Falciano
3
Miałem diabła czasu, określając, co użyć do „geometrii”, otrzymywałem błąd bez takiej kolumny: geometria . Wszystkie podobne przykłady tutaj na stosie oraz w dokumentach referencyjnych używają również zepsutych wariantów, takich jak geo lub the_geom . W końcu odkryłem przełącznik tylko podsumowania ogrinfo -so : ogrinfo -so somedata.gdb my_layer_namei filtruj dla „Geometry Column =”
matt wilkie
3
jeśli chcesz po prostu rozpuścić wszystkie wielokąty w pliku kształtu w jeden duży wielokąt, możesz to zrobić: ogr2ogr output_dissolved.shp input.shp -dialect sqlite -sql "WYBIERZ ST_Union (geometria) AS geometria Z wejścia" pamiętaj, jeśli zbudujesz GDAL sam musisz mieć zainstalowany sqlite i włączyć w konfiguracji co najmniej sqlite i spatialite, tj. flagi --with-sqlite --with-spatialite = yes lub podobne.
cm1
3

Jeśli chcesz mieć dostęp do czysto lekkiego C, możesz użyć kombinacji shapelib od Franka Warmerdama i gpc od Alana Murty. Uważam, że obsługa DBF w shapelib jest trochę trudna, ale czytanie czegoś jest w porządku. Dla Perla można je znaleźć w repozytorium CPAN pod pozycjami Geo :: Shapelib i Math :: Geometry :: GPC . Oprócz Geo :: Proj4 do transformacji współrzędnych możesz mieć minimalistyczny dostęp do operacji GIS. Lubię to.

huckfinn
źródło
Dzięki - próbowałem, ale wydawało się to bardzo, bardzo powolne: ponad godzinę na zebranie 2000 hrabstw na MacBookPro 4gig. Być może to moje kodowanie :)
LeeGee
Czy używasz jakiegoś rodzaju indeksowania, na przykład nakładających się boksów?
huckfinn
Nie - potykam się w ciemności, ciężko mi znaleźć referencje, które nie zakładają, że robię to od lat lub korzystam z PostGIS.
LeeGee
Ale możesz używać Postgresql / PostGIS również ze wszystkimi zaawansowanymi operacjami indeksowania rzeczy, relacji ... Import danych dla kształtu jest bardzo łatwy dzięki narzędziu shp2pg. A składnia SQL nie jest trudna do nauczenia ...
huckfinn
PostGIS wymyślił kilka sekund - pięknie proste, szczególnie w przypadku ogr2ogr. Ale wolałbym używać GPC: gromadziłem wielokąty z plików, za każdym razem tworząc UNION, i zrobienie tego, co PostGIS zajęło dosłownie kilka sekund, zajęło mi wiele godzin, dlatego mówię, że to moja błędna interpretacja dokumentów .
LeeGee