Как указать поля для экспорта из QGIS?

9

Я использую QGIS 2.0.1 и подключен к пространственно включенной базе данных MS SQL Server (не ESRI). Я могу подключиться к слою и загрузить его в свой TOC просто отлично. Я спрятал ряд полей, которые не важны для видимости.

Теперь я хочу экспортировать эти данные в другой тип данных (для этого примера мы будем использовать шейп-файл). Когда я щелкаю правой кнопкой мыши по слою, выбираю «Сохранить как» и определяю выходной файл, я получаю следующую ошибку:

Экспорт в векторный файл не удался. Ошибка: неподдерживаемый тип для поля GlobalID

Примечание 1 : Если я отмечу «Пропустить создание атрибута» в диалоговом окне, шейп-файл будет создан без ошибок.

Примечание 2 : ArcGIS не имеет этой проблемы, он просто преобразует поле GUID в тип «TEXT».

Глядя на таблицу, одним из полей, которые я скрыл, является GUID типа SQL < uniqueidentifier >, который, по всей вероятности, является виновником. В попытке решить эту проблему я сделал поле «скрытым». Я предположил бы, что, поскольку поле было скрыто, QGIS не будет пытаться экспортировать это поле, но это оказалось не так.

Можете ли вы определить поля, которые вы хотите экспортировать из QGIS?

Может ли QGIS экспортировать только поля «Видимые»? Или есть другой альтернативный способ сделать это из QGIS (возможно, определить поля с помощью запроса ogr2ogr)? Это кажется недостатком QGIS, если я не могу определить, какие поля экспортировать.

ОБНОВЛЕНИЕ: я сделал тест, используя образец шейп-файла, чтобы увидеть, могу ли я ограничить поля вывода. Следующая командная строка ogr2ogr сработала и удалила все поля, кроме «name»:

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

но используя QGIS и добавив:

-sql "select name from city"

чтобы раздел «слой» диалогового окна «Сохранить как» не приводил к шейп-файлу только с одним полем. Так что я не вижу, как я могу манипулировать выводом файла, чтобы показать только несколько выбранных полей. Любая помощь приветствуется.

RyanKDalton
источник
Если ogr2ogr может это сделать, то QGIS может, потому что это именно тот инструмент, который работает в фоновом режиме. К сожалению, у меня нет базы данных SQL Server для тестирования ...
underdark
Правильно. Поэтому я попытался добавить -sql "select <fields> from <table>"(исключая поле GlobalID из <fields>) в раздел «Слой» диалогового окна «Сохранить как», но та же ошибка все еще появлялась. Я неправильно использовал этот блок кода или это ошибка?
RyanKDalton
этот ответ предлагает -select вместо -sql gis.stackexchange.com/questions/30691/… ... Я думаю, что он идет в разделе источника данных, а не в слой.
Подземье
Мне не повезло ни с одним из ваших предложений. Я также попробовал несколько комбинаций опций -select и -sql в полях «Слой» и «Источник данных» в «Опциях создания OGR» :( Конечно, я не могу первый с необходимостью экспортировать подмножество полей ...
RyanKDalton
возможно, стоит проверить с разработчиками. может быть ошибка.
Подземье

Ответы:

1

Если это работает для вас в командной строке с ogr2ogr, я думаю, что это лучшее решение, чтобы использовать это. Вы можете написать простой bat-файл для создания шейп-файла из базы данных MSSQL. Очевидно, что вы не можете редактировать данные и сохранять обратно на сервер таким образом.

В QGIS есть поля ввода Источник данных и Уровень, но они предназначены только для параметров -dsco и -lco в ogr2ogr. Драйвер шейп-файла OGR не имеет никакой полезной версии dsco или lco для ваших нужд:

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

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

Кроме того, можно написать плагин Python, который запрашивает данные с сервера с помощью команды SQL SELECT для ваших нужд. Это даже позволило бы редактировать данные.

Andrej
источник
Пока что это кажется наиболее осуществимой идеей. Есть ли способ напрямую вызвать командную строку ogr2ogr из пользовательского интерфейса QGIS, чтобы свернуть свой собственный синтаксис ogr2ogr?
RyanKDalton
Не напрямую. Но вы можете захватить терминал gdalwarp и ввести там свою команду ogr2ogr. Вы получаете ошибку, что слой не создан, но это в любом случае в файловой системе. Не уверен, что произойдет, если файл уже существует, поэтому лучше добавьте -overwrite. И лучше использовать полные пути к файлам.
AndreJ
Или вы когда-нибудь пытались использовать виртуальный файл GDAL VRT в качестве посредника между MSSQL и QGIS?
AndreJ
У меня нет, но не GDAL для работы с растрами? Я работаю с точечным векторным слоем. Мне нравится идея «виртуального стола» как посредника. Разве в QGIS 2 нет слоя в памяти, в который мы могли бы писать?
RyanKDalton
1
Существует также драйвер GDAL ogrvrt: gdal.org/ogr/drv_vrt.html . Но я думаю, что лучше поставить другой вопрос.
AndreJ
0

Я бы посоветовал вам проверить таблицу атрибутов для слоя в оглавлении и если поле GlobalID существует. Переключитесь в режим редактирования, удалите столбец, который создает проблему при экспорте, и закройте окно. Затем сохраните как шейп-файл или любой другой формат вывода, который вы хотите. Надеюсь, это поможет.

Фархат Аббас
источник
1
Я не уверен, что удаление поля в таблице SQL Server является хорошим выбором. Это все еще может понадобиться серверу.
AndreJ
Я думаю, что удаление столбца атрибута из слоя QGIS TOC сохранит обновленную структуру в буфере QGIS и позволит вам экспортировать файл в другом формате. После завершения экспорта не сохраняйте изменения в слое (что вы удалили)
Фархат Аббас