Łączę niektóre pliki kształtów i miałem pewne problemy w QGIS, więc używam bezpośrednio ogr2ogr. Robię to (partią):
ogr2ogr -overwrite %destination% %n1%
ogr2ogr -update -append %destination% %n2% -nln all_new
ogr2ogr -update -append %destination% %n3% -nln all_new
ogr2ogr -update -append %destination% %n4% -nln all_new
Działa dobrze, ale teraz muszę mieć wynikowy plik kształtu, pole z nazwami oryginalnych plików kształtu, które scaliłem. Nie brzmi to zbyt trudne, ale nie udaje mi się to zrobić.
Czy ktoś może pomóc? Dziękuję Ci!
Chciałbym użyć opcji -sql i zaimportować plik shapefile w następujący sposób:
źródło
istnieje kilka sposobów łączenia plików kształtu.
i dodanie atrybutu do directon shapefile @dango jest dobre. możesz użyć layer.CreateField (nazwa_pola) do utworzenia nowej kolumny, z której zostaną wypełnione
Mam nadzieję, że Ci to pomoże...
źródło
vascobnunes, oto jak udało mi się rozwiązać ten problem, używając skryptu Python do łączenia w łańcuch kilku instrukcji ogr2ogr. Możesz łatwo przekonwertować go na skrypt wsadowy, w zasadzie po prostu łączę ze sobą instrukcje ogr2ogr (
cmd
), a następnie wykonuję je, wywołującos.system(cmd)
, przekazując polecenie ogr2ogr, które połączyłem.Tajną bronią jest ( jak wykazał Capooti ) stosowanie OGR_SQL w celu narzucenia nazwy pliku jako stałej wartości źródłowego zestawu danych, który dołączasz do wyniku scalania.
W moim przykładzie
-sql
flaga to obsługuje, w kodzie wygląda to tak:Ale to jest mylące, ponieważ muszę zastosować pojedyncze cudzysłowy i podwójne cudzysłowy w wynikowej konkatenacji. Aby to zrobić, muszę uciec od pojedynczych cudzysłowów (tj. \ ') I użyć ich „na poważnie”. Tak więc dla czytelności pomaga to zobaczyć bez zmiennych i sekwencji ucieczki. Jeśli udajesz, że nazwa pliku to „drogi1” dla określonej iteracji, wynikowa konkatenacja wyglądałaby tak w zdaniu ogr2ogr:
Ten skrypt .py to połączenie trzech trików, które ukradłem z Matt Wilkie (pusty, klon pliku kształtu ), j03lar50n (dodawanie kolumny do pliku kształtu za pomocą ogrinfo i ogr_sql) oraz capooti (użycie ogr_sql do narzucenia stałej wartości kolumny we wszystkich rekordach w pliku kształtu). Oto pełny skrypt:
źródło
Dodaj kolumnę z nazwą pliku źródłowego z folderu plików kształtów. Wymaga GDAL 1.10dev, moja próba usunięcia rozszerzenia .shp nie działa - ale ogólnie działa. - Wydaje mi się, że można go dodać do linii łączących się z OGR.
źródło
Cześć, może ten link pomoże. Pokazuje, jak dodać cechę do pliku kształtu za pomocą powiązań Pythona Gdal.
źródło
Wewnątrz QGIS możesz dodać wtyczkę Merge Shapefile. Istnieje opcja „Dodaj kolumnę o nazwie pliku”
źródło
Nieco zmodyfikowana wersja odpowiedzi JaaKL. Zauważ, że -append foo.shp i -nln foo muszą się zgadzać. Zwróć też uwagę na użycie dialektu SQLite (GDAL najwyraźniej nie akceptuje słowa kluczowego „Update”, więc należy użyć instancji dialektu SQLite) oraz brak słowa kluczowego „TABLE” po słowie „UPDATE” (niepotrzebne) lub zaakceptowane przez SQLite).
źródło
Trochę za późno na dyskusję, ale teraz jest też ogrmerge
źródło