Daugiau

OGR DXF uždaro polilino konversija


Aš bandau konvertuoti uždarytas daugiasluoksnes į daugiakampius naudodami ogr2ogr iš dxf į mssql. Čia sakoma, kad polilinijos paverčiamos POLYGON, jei jos uždarytos, bet geometrijos tipo stulpelyje visada gaunu tipą LINESTRING, o ne POLYGON. Taip pat bandžiau konvertuoti DXF į „Shapefile“ ir į „MySQL“ duomenų bazę. „Shapefiles“ su daugiakampiais konvertavimas į duomenų bazes veikia gerai, todėl manau, kad problema yra „gdal dxf“ tvarkyklėje.

Ar kas nors gali man paaiškinti, ką darau ne taip?

Čia yra komanda, kurią vykdau

ogr2ogr -update -append -f MSSQL "MSSQL: serveris =.  SQLEXPRESS; duomenų bazė = testdb; trusted_connection = taip" test.dxf

Turėtumėte atsiųsti nedidelį tokio DXF failo pavyzdį. Panašu, kad DXF tvarkyklė tikrai nesielgia taip, kaip dokumentuota. Aš padariau paprastą testą, skaitmenindamas uždarymo trikampį su keturiomis koordinatėmis kaip daugiakampį ir linijinę eilutę

POLYGON ((616 442, 804 551, 764 387, 616 442)) LINESTRING (616 442, 804 551, 764 387, 616 442)

Aš padariau kelionę į abi puses, išsaugodamas geometriją į formos failą -> paversti formos failą į DXF naudodami ogr2ogr -> patikrindamas DXF failą naudodami „ogrinfo“. Jei DXF tvarkyklė elgiasi taip, kaip dokumentuota, abiejuose DXF failuose turi būti daugiakampis. Tačiau taip nėra su uždaru linijiniu žiedu

ogrinfo -al line_test.dxf INFO: Sėkmingai atidaryta „line_test.dxf“ naudojant tvarkyklę „DXF“. Sluoksnio pavadinimas: objektai Geometrija: Nežinoma (bet kokia) Funkcijų skaičius: 1 Apimtis: (616.000000, 387.000000) - (804.000000, 551.000000) Sluoksnis SRS WKT: (nežinoma) Sluoksnis: Styga (0.0) Poskyriai: Eilutė (0.0) Išplėstinė 0.0) Linijos tipas: Eilutė (0.0) Entity String) = (null) EntityHandle (String) = 20000 Text (String) = (null) Style = PEN (c:#000000) LINESTRING (616 442,804 551,764 387,616 442)

Deja, tai neišsprendžia jūsų problemos, o tik ją patvirtina. Be to, atrodo, kad ir kitose vietose DXF tvarkyklės dokumentacija yra neteisinga. Ji teigia, kad GDAL rašo daugiakampius kaip LWPOLYLINE. Tačiau iš DXF, kurį konvertavau iš daugiakampio formos, galiu rasti, kad naudojamas elementas HATCH:

Štai kaip GDAL sukuria daugiakampį:

PAGALVIAI 0 LIUKAS 5 20000 8 0 100 AcDbEntity 100 AcDbHatch

Taip buvo apibrėžta uždara linija:

Subjektai 0 LWPOLYLINE 5 20000 8 0 100 AcDbEntity 100 AcDb

Man atrodo, kad nieko blogo nepadarai ir turėtum iš gdal-dev adresų sąrašo paklausti, ar radai klaidą DXF tvarkyklėje ar dokumentuose. Pritvirtinkite nedidelį DXF pavyzdį, uždaras trikampis, kurį naudojau savo bandyme, turėtų būti tobulas.


Naudodami naujausią „GisInternals“ GDAL kūrimo versiją, dabar galite vienu veiksmu paversti dxf į formą, o uždarytas linijas į daugiakampius:

ogr2ogr -nlt daugiakampis testpoly.shp test.dxf ogrinfo testpoly.shp INFO: Sėkmingai atidaryta „testpoly.shp“ naudojant tvarkyklę „ESRI Shapefile“. 1: bandomasis poligonas (daugiakampis)

Tai pateks į GDAL 2.0, o ne į netrukus pasirodysiančią 1.11.2 versiją.


Žiūrėti video įrašą: CAD2Lathe Converts From DXF file to Gcode (Rugsėjis 2021).