отримання файлів dxf з PostgreSQL


10

Я успішно завантажив купу файлів форм у базу даних 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.


знайдено відповідне посилання: fwarmerdam.blogspot.com/2010/07/ogr-dxf-upgrade.html
BenjaminGolder

Відповіді:


9

Бенджамін,

DXF (як передбачається OGR) не підтримує довільних атрибутів GIS. Він має фіксовану схему, яка виглядає так:

Шар: Рядок (0,0)
Підкласи: Рядок (0.0)
ExtendedEntity: Рядок (0,0)
Тип лінійки: Рядок (0,0)
EntityHandle: Рядок (0.0)

і лише деякі з них насправді вивчаються на письмі. Найпростішим доцільним є лише використання методу -skipfailures, хоча здається, що переклад триває, незважаючи на помилки навіть без цього.

Що стосується -overwrite - це застосовно для форматів, які підтримують видалення шару, яких DXF не має. Просто заздалегідь видаліть існуючий файл DXF перед запуском ogr2ogr.


Це, мабуть, найкраща відповідь поки що, але мені схоже сказати, що функція експорту Ox в OGR не експортує dxfs. Я сподіваюсь на відповідь, яка насправді отримує мені корисні dxfs з даними атрибутів та не великим списком помилок. Я побачу, чи можу я допомогти покращити експорт OGR.
BenjaminGolder

2

з відповіддю від Френка та підказкою з "GIS-Kompetenzzentrum" міста Устер (лише німецькою мовою)

http://gis.uster.ch/dokumentation/datenkonvertierung/ogr

Я зрозумів, що PostGIS для dxf можна зробити так:

ogr2ogr -f DXF $TITLE$.dxf PG:"dbname='$DBNAME$' host='$HOST$' port='$PORT$' user='$USER$' password='$PASSWORD$'" -sql "select $COLUMN$ as Layer, the_geom from $TABLE$"

Зрештою, sql-оператор створюється для кожного рядка в $ COLUMN $ a Layer. Тож найкраще буде обрати ідентифікатор $ COLUMN $ типу або відповідне ім’я.

Я спробував це з 2D багатокутником. Файл dxf не має закритих поліліній. Можливо, можна додати що-небудь на зразок "$ polygon $ як Linetype" в sql-рядок.

Якщо ви хочете, щоб усі геометрії з вашої таблиці були на одному шарі, ви можете використовувати код з "GIS-Kompetenzzentrum" Uster

ogr2ogr -select '' -f DXF DXF $TITLE$.dxf PG:"dbname='$DBNAME$' host='$HOST$' port='$PORT$' user='$USER$' password='$PASSWORD$' schemas=$SCHEMA$ tables=$TABLE$(the_geom)"

Для обох тверджень можна додати наступний варіант:

-spat xmin ymin xmax ymax

якщо ви хочете просторове обмеження.


1

Те, що сказав Френк, стане моєю пропозицією.
Створіть dxf із назвами шарів, які вже є в ньому, і використовуйте це як шаблон.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.