Більше

Закрите полілінійне перетворення OGR DXF


Я намагаюся перетворити замкнені полілінії в полігони, використовуючи ogr2ogr з dxf в mssql. Тут сказано, що полілінії перетворюються на POLYGON, якщо вони закриті, але я завжди отримую тип LINESTRING замість POLYGON у стовпці типу геометрії. Я також намагався перетворити DXF у Shapefile та у базу даних MySQL з такими ж результатами. Перетворення файлів форми з полігонами в бази даних працює добре, тому я думаю, що проблема у драйвері gdal dxf.

Може хтось пояснити мені, що я роблю неправильно?

Ось команда, яку я виконую

ogr2ogr -update -append -f MSSQL "MSSQL: сервер =.  SQLEXPRESS; база даних = testdb; trusted_connection = так" test.dxf

Вам слід надіслати невеликий приклад такого файлу DXF. Схоже, драйвер DXF дійсно не поводиться так, як задокументовано. Я зробив простий тест, оцифрувавши замикаючий трикутник з чотирма координатами як багатокутник і як рядок рядків

ПОЛІГОН ((616442, 804 551, 764 387, 616 442)) ЛАЙНСТРИНГ (616442, 804 551, 764 387, 616 442)

Я зробив туди й назад, зберігаючи геометрію у шейп -файлі -> перетворити шейп -файл у DXF за допомогою ogr2ogr -> перевіривши файл DXF за допомогою ogrinfo. Якщо драйвер DXF поводиться так, як задокументовано, обидва файли DXF повинні містити багатокутник. Однак це не стосується замкнутого рядка рядків

ogrinfo -al line_test.dxf ІНФОРМАЦІЯ: Відкриття "line_test.dxf" за допомогою драйвера "DXF" успішно. Назва шару: сутності Геометрія: Невідома (будь -яка) Кількість функцій: 1 Обсяг: (616.000000, 387.000000) - (804.000000, 551.000000) Шар SRS WKT: (невідомо) 0.0) Тип рядка: Рядок (0.0) EntityHandle: Рядок (0.0) Текст: Рядок (0.0) OGRFeature (сутності): 0 Layer (String) = 0 SubClasses (String) = AcDbEntity: AcDbPolyline ExtendedEntity (String) = (null) Lineline ( String) = (null) EntityHandle (String) = 20000 Text (String) = (null) Style = PEN (c:#000000) LINESTRING (616 442 804 551764 387 616 442)

На жаль, це не вирішує вашу проблему, а лише підтверджує її. Крім того, документація драйвера DXF, здається, є неправильною і в інших місцях. Він стверджує, що GDAL пише полігони як LWPOLYLINE. Однак з DXF, який я перетворив з форми багатокутника, я можу виявити, що сутність HATCH використовується:

Ось як GDAL створює багатокутник:

ОБ'ЄКТИ 0 HATCH 5 20000 8 0 100 AcDbEntity 100 AcDbHatch

Ось як було визначено замкнутий рядок рядків:

ОБ'ЄКТИ 0 LWPOLYLINE 5 20000 8 0100 AcDbEntity 100 AcDbPolyline 70 1 90 4

Мені здається, що ви не робите нічого поганого, і вам слід запитати у списку розсилки gdal-dev, чи ви виявили помилку у драйвері DXF або в документації. Додайте невеликий зразок DXF, замкнутий трикутник, який я використовував у своєму тесті, повинен бути ідеальним.


За допомогою останньої версії GDAL dev build від GisInternals тепер ви можете перетворити dxf у форму, а замкнені лінії - у багатокутники за один крок:

ogr2ogr -nlt полігон testpoly.shp test.dxf ogrinfo testpoly.shp ІНФОРМАЦІЯ: Відкриття "testpoly.shp" за допомогою драйвера "ESRI Shapefile" успішно. 1: тестполі (багатокутник)

Це знайде свій шлях до GDAL 2.0, а не 1.11.2, який незабаром з’явиться.


Подивіться відео: DynamoKhM#37 Import Autocad DXF (Жовтень 2021).