使用OGR创建dxf格式矢量数据
生活随笔
收集整理的這篇文章主要介紹了
使用OGR创建dxf格式矢量数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? ? ? 使用OGR庫創建DXF格式的數據和創建Shp格式的數據基本一樣,代碼除了注冊驅動不一樣之外,其他的完全一樣。
? ? ? ? 需要注意的是,OGR創建DXF格式需要data文件夾下的head.dxf,所以首先要設置GDAL_DATA的目錄。使用下面代碼進行設置,也可以直接設置環境變量,但是比較麻煩,還是用代碼設置比較方便:
CPLSetConfigOption("GDAL_DATA","E:\\gdal\\data"); ? ? ? ? 使用上面的設置之后,就可以創建DXF格式的矢量數據了,此外還有問題就是,DXF格式不支持屬性表,如果創建屬性表的話,GDAL會提示創建屬性表失敗之類的信息。下面是創建一個矩形的dxf文件,代碼如下: #include "ogrsf_frmts.h"int main() {//設置GDAL_DATA目錄CPLSetConfigOption("GDAL_DATA","E:\\gdal\\data");//定義DXF的驅動const char *pszDriverName = "DXF";//注冊OGR驅動OGRRegisterAll();OGRSFDriver *poDriver;poDriver = OGRSFDriverRegistrar::GetRegistrar()->GetDriverByName(pszDriverName );if( poDriver == NULL ){printf( "%s driver not available.\n", pszDriverName );exit( 1 );}OGRDataSource *poDS; //創建文件poDS = poDriver->CreateDataSource( "E:\\rect.dxf", NULL );if( poDS == NULL ){printf( "Creation of output file failed.\n" );exit( 1 );}OGRLayer *poLayer; //創建一個圖層,估計DXF可以創建很多個圖層poLayer = poDS->CreateLayer( "rect", NULL, wkbPolygon, NULL );if( poLayer == NULL ){printf( "Layer creation failed.\n" );exit( 1 );}//創建一個要素,由于DXF不支持屬性表,就不創建屬性表了OGRFeature *poFeature;poFeature = OGRFeature::CreateFeature( poLayer->GetLayerDefn() );//創建一個矩形的多邊形OGRLinearRing Ring;Ring.addPoint(0,0);Ring.addPoint(0,100);Ring.addPoint(100,100);Ring.addPoint(100,0);Ring.closeRings();OGRPolygon polygon;polygon.addRing(&Ring);//將多邊形添加到要素中poFeature->SetGeometry( &polygon ); //將要素寫入圖層中if( poLayer->CreateFeature( poFeature ) != OGRERR_NONE ){printf( "Failed to create feature in dxf.\n" );exit( 1 );}//釋放要素OGRFeature::DestroyFeature( poFeature );//關閉數據集OGRDataSource::DestroyDataSource( poDS ); }? ? ? ? 執行完上面的代碼,會在E盤生成一個rect.dxf的文件,使用QGIS打開效果截圖如下(電腦沒有安裝AutoCAD,不知道使用CAD打開是什么樣子):
此外,使用GDAL打開dxf文件有個bug,我提交給GDAL官方了,但是一直沒有解決。總的來說,OGR中的dxf驅動還是不太完善。希望能盡快完善,bug地址:http://trac.osgeo.org/gdal/ticket/4319
轉載于:https://www.cnblogs.com/xiaowangba/archive/2012/07/24/6314007.html
總結
以上是生活随笔為你收集整理的使用OGR创建dxf格式矢量数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tslib
- 下一篇: C strcpy和strcat