使用OGR建立dxf格式向量資料

來源:互聯網
上載者:User

        使用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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.