Я успешно загрузил кучу шейп-файлов в базу данных PostGIS. Я хотел бы иметь возможность получать определенную геометрию и слои в виде файлов DXF на основе запросов SQL.
Я использую PostGIS, GDAL, PostgreSQL и Python из пакета OSGeo4W для Windows.
Я представляю, что я должен использовать ogr2ogr немного так:
$ ogr2ogr -sql "SELECT * FROM some_table" -f "dxf" outputfile.dxf -overwrite "PG:dbname=mydb user=dbusername password=dbpassword"
но когда я делаю это с соответствующими значениями, я получаю ряд ошибок, подобных этой:
ERROR 1: DXF layer does not support arbitrary field creation, field 'objectid' not created.
В результате возникает ошибка для каждого столбца атрибута в слое, some_table
но я получаю файл DXF.
Если я уже создал файл .dxf и повторно ввел команду выше (включая -overwrite
опцию), вместо этого я получаю эту ошибку:
Layer sql_statement not found, and CreateLayer not supported by driver. ERROR 1: Terminating translation prematurely after failed translation from sql statement.
Я уже проверил, чтобы убедиться, что GDAL_DATA
переменная окружения установлена правильно. (к C:\OSGeo4W\share\gdal
)
Вполне возможно, что я неправильно подхожу к этой задаче, потому что я новичок во всех этих инструментах, поэтому я открыт для любых предложений и советов о том, как создавать файлы .dxf из данных ГИС, хранящихся в PostgreSQL, на основе запросов SQL.
Ответы:
Benjamin,
DXF (как предполагается OGR) не поддерживает произвольные атрибуты ГИС. Он имеет фиксированную схему, которая выглядит следующим образом:
и только некоторые из них фактически проверяются при записи. Самый простой способ - просто использовать метод -skipfailures, хотя кажется, что перевод продолжается, несмотря на ошибки, даже без этого.
Что касается -overwrite - это применимо для форматов, которые поддерживают удаление слоя, которые не поддерживает DXF. Просто предварительно удалите существующий файл DXF перед запуском ogr2ogr.
источник
с ответом от Фрэнка и подсказкой от «ГИС-Компетенцентрум» города Устер (только на немецком языке)
http://gis.uster.ch/dokumentation/datenkonvertierung/ogr
Я понял, что PostGIS для dxf можно сделать так:
В конце sql-оператор создается для каждой строки в $ COLUMN $ a Layer. Поэтому лучше выбрать идентификатор типа $ COLUMN $ или соответствующее имя.
Я попробовал это с 2D-таблицей полигонов. Файл dxf не имеет закрытых полилиний. Возможно, можно добавить что-то вроде «$ polygon $ as Linetype» в строку sql.
Если вы хотите, чтобы все геометрические фигуры из вашей таблицы находились на одном слое, вы можете использовать код из "ГИС-Компетенцентрум" от Uster
В оба утверждения вы можете добавить следующую опцию:
если вы хотите пространственное ограничение.
источник
То, что сказал Фрэнк, будет моим предложением.
Создайте dxf с уже имеющимися именами слоев и используйте его в качестве шаблона.
источник