使用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地址:

人之所以能,是相信能。

使用OGR创建dxf格式矢量数据

相关文章:

你感兴趣的文章:

标签云: