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.
źródło
-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?Odpowiedzi:
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.
źródło
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.
źródło