Jak określić pola do eksportu z QGIS?

9

Korzystam z QGIS 2.0.1 i jestem podłączony do bazy danych MS SQL Server z włączoną przestrzennie bazą danych (nie ESRI). Jestem w stanie połączyć się z warstwą i załadować ją do mojego spisu treści. Ukryłem kilka pól, które nie są ważne ze względu na widoczność.

Teraz chcę wyeksportować te dane do innego typu danych (w tym przykładzie użyjemy pliku shapefile). Po kliknięciu warstwy prawym przyciskiem myszy, wybierz „Zapisz jako” i zdefiniuj plik wyjściowy, pojawia się następujący błąd:

Eksport do pliku wektorowego nie powiódł się. Błąd: nieobsługiwany typ dla pola GlobalID

Uwaga 1 : Jeśli zaznaczę „Pomiń tworzenie atrybutów” w oknie dialogowym, plik kształtu jest tworzony bez błędów.

Uwaga 2 : ArcGIS nie ma tego problemu, po prostu konwertuje pole GUID na typ „TEKST”.

Patrząc na tabelę, jednym z pól, które ukryłem, jest identyfikator GUID typu SQL < unikalny identyfikator >, który najprawdopodobniej jest winowajcą. Próbując rozwiązać ten problem, uczyniłem pole „ukrytym”. Zakładałbym, że ponieważ pole było ukryte, QGIS nie będzie próbował eksportować tego pola, ale okazało się, że tak nie jest.

Czy potrafisz zdefiniować pola, które chcesz wyeksportować z QGIS?

Czy QGIS może eksportować tylko pola „Widoczne”? A może istnieje inny alternatywny sposób na wykonanie tego z QGIS (może zdefiniować pola za pomocą zapytania ogr2ogr)? Wydaje się to być wadą QGIS, jeśli nie mogę zdefiniować, które pola wyeksportować.

AKTUALIZACJA: Zrobiłem test, używając przykładowego pliku shapefile, aby sprawdzić, czy mogę ograniczyć pola wyjściowe. Następujący wiersz polecenia ogr2ogr zadziałał i wyeliminował wszystkie pola oprócz „name”:

ogr2ogr -f "ESRI Shapefile" test.shp city.shp -sql "select name from city"

ale używając QGIS i dodając:

-sql "select name from city"

do sekcji „warstwa” okna dialogowego „Zapisz jako” nie spowodowało utworzenia pliku kształtu tylko z jednym polem. Więc tak naprawdę nie widzę, jak mogę manipulować danymi wyjściowymi pliku, aby wyświetlić tylko kilka wybranych pól. Każda pomoc jest mile widziana.

RyanKDalton
źródło
Jeśli ogr2ogr może to zrobić, QGIS może, ponieważ jest to dokładnie narzędzie działające w tle. Niestety nie mam bazy danych SQL Server do przetestowania ...
podmrok
Dobrze. Próbowałem więc dodać -sql "select <fields> from <table>"(wyłączając pole GlobalID z <pól>) do części „Warstwa” okna dialogowego „Zapisz jako”, ale ten sam błąd wciąż się pojawiał. Czy źle wykorzystałem ten blok kodu, czy to błąd?
RyanKDalton
ta odpowiedź sugeruje -select zamiast -sql gis.stackexchange.com/questions/30691/ ... ... Myślę, że to idzie w sekcji źródła danych, a nie w warstwie.
podmrok
Nie mam szczęścia z żadną z twoich sugestii Próbowałem również wielu kombinacji opcji -select i -sql w polach „Warstwa” i „Źródło danych” w „Opcjach tworzenia OGR” :( Z pewnością nie mogę pierwszy z potrzebą wyeksportowania podzbioru pól ...
RyanKDalton
warto sprawdzić u programistów. może być błędem.
podmrok

Odpowiedzi:

1

Jeśli to działa dla ciebie w linii poleceń z ogr2ogr, myślę, że najlepszym rozwiązaniem jest użycie tego. Możesz napisać prosty plik nietoperza, aby utworzyć plik shapefile z bazy danych MSSQL. Oczywiście nie można edytować danych i w ten sposób zapisywać z powrotem na serwerze.

QGIS ma pola danych Źródło danych i Warstwa, ale są one tylko dla parametrów -dsco i -lco dla ogr2ogr. Sterownik pliku kształtu OGR nie ma użytecznego dsco ani lco dla twoich potrzeb:

http://www.gdal.org/ogr2ogr.html

http://www.gdal.org/ogr/drv_shapefile.html

Alternatywnie, powinno być możliwe napisanie wtyczki python, która żąda danych z serwera za pomocą polecenia SQL SELECT zgodnie z twoimi potrzebami. Umożliwiłoby to nawet edycję danych.

AndreJ
źródło
Jak dotąd wydaje się to najbardziej wykonalnym pomysłem. Czy istnieje sposób bezpośredniego wywołania wiersza polecenia ogr2ogr z interfejsu użytkownika QGIS, aby utworzyć własną składnię ogr2ogr?
RyanKDalton
Nie bezpośrednio. Ale możesz porwać terminal gdalwarp, aby wprowadzić tam swoje polecenie ogr2ogr. Wystąpił błąd polegający na tym, że warstwa nie została utworzona, ale tak czy inaczej jest w systemie plików. Nie jestem pewien, co się stanie, jeśli plik już istnieje, więc lepiej dodaj też opcję - overwrite. I lepiej użyć pełnych nazw ścieżek dla plików.
AndreJ
Alternatywnie, czy kiedykolwiek próbowałeś używać wirtualnego pliku GDAL VRT jako mediatora między MSSQL a QGIS?
AndreJ
Nie mam, ale czy GDAL nie jest do pracy z rastrami? Pracuję z warstwą wektorów punktowych. Podoba mi się pomysł „wirtualnego stołu” jako pośrednika. Czy QGIS 2 nie ma warstwy w pamięci, do której moglibyśmy pisać?
RyanKDalton
1
Istnieje również sterownik GDAL ogrvrt: gdal.org/ogr/drv_vrt.html . Ale myślę, że to powinno lepiej postawić inne pytanie.
AndreJ
0

Sugerowałbym, abyś sprawdził tabelę atrybutów dla warstwy w spisie treści i czy istnieje pole GlobalID. Przełącz do trybu edycji, usuń kolumnę, która powoduje problem podczas eksportu i zamknij okno. Następnie zapisz jako plik kształtu lub dowolny format wyjściowy. Mam nadzieję, że to pomoże.

Farhat Abbas
źródło
1
Nie jestem pewien, czy usunięcie pola w tabeli programu SQL Server jest dobrym wyborem. Może być nadal potrzebny serwer.
AndreJ
Myślę, że usunięcie kolumny atrybutów z warstwy QGIS TOC powoduje zapisanie zaktualizowanej struktury w buforze QGIS i pozwala na eksport pliku w innym formacie. po zakończeniu eksportu nie zapisuj zmian w warstwie (co usunąłeś)
Farhat Abbas