使用OGR创建dxf格式矢量数据
2012-07-24 23:14
555 查看
使用OGR库创建DXF格式的数据和创建Shp格式的数据基本一样,代码除了注册驱动不一样之外,其他的完全一样。
需要注意的是,OGR创建DXF格式需要data文件夹下的head.dxf,所以首先要设置GDAL_DATA的目录。使用下面代码进行设置,也可以直接设置环境变量,但是比较麻烦,还是用代码设置比较方便:
此外,使用GDAL打开dxf文件有个bug,我提交给GDAL官方了,但是一直没有解决。总的来说,OGR中的dxf驱动还是不太完善。希望能尽快完善,bug地址:http://trac.osgeo.org/gdal/ticket/4319
需要注意的是,OGR创建DXF格式需要data文件夹下的head.dxf,所以首先要设置GDAL_DATA的目录。使用下面代码进行设置,也可以直接设置环境变量,但是比较麻烦,还是用代码设置比较方便:
CPLSetConfigOption("GDAL_DATA","E:\\gdal\\data");使用上面的设置之后,就可以创建DXF格式的矢量数据了,此外还有问题就是,DXF格式不支持属性表,如果创建属性表的话,GDAL会提示创建属性表失败之类的信息。下面是创建一个矩形的dxf文件,代码如下:
#include "ogrsf_frmts.h"执行完上面的代码,会在E盘生成一个rect.dxf的文件,使用QGIS打开效果截图如下(电脑没有安装AutoCAD,不知道使用CAD打开是什么样子):
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 );
}
此外,使用GDAL打开dxf文件有个bug,我提交给GDAL官方了,但是一直没有解决。总的来说,OGR中的dxf驱动还是不太完善。希望能尽快完善,bug地址:http://trac.osgeo.org/gdal/ticket/4319
相关文章推荐
- 使用OGR创建dxf格式矢量数据
- Net使用Microsoft.Office.Interop.Excel;创建Excel文件(插入数据、修改格式、生成图表)的方法,以及Excel查看加密
- 如何使用微图将影像和矢量一起导出成CAD格式的数据
- 使用OpenStreetMap下载kml格式矢量图层数据
- 如何使用dhtmlxtree 和Json 数据格式创建和使用一棵tree
- hive建表没使用LZO存储格式,可是数据是LZO格式时遇到的问题
- 动态创建表格,更新、提交、循环获取表格中各种元素的数据 并转换为JSON,数组的数据格式。
- 【原创】c#讲数据库数据转换为json格式(使用extjs,easyui中的datagrid)
- 如何在Hive中使用Json格式数据
- hbase学习-- 4 使用HBase客户端API 创建和更新数据
- ASP.NET设置数据格式与String.Format使用总结
- 使用PL/SQL Developer工具来实现创建表空间、创建数据库、备份数据库、数据导出等操作
- SocketChannel类(用于阻塞或非阻塞式传输数据) 创建SocketChannel要使用SocketChannel类的静态工厂方法。 SocketChannel open():创建未连接的
- python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
- 使用python开发json、csv数据格式转换工具
- 在Sql Server 2016中使用For Json子句把数据作为json格式导出
- Android上GTalk以及Push机制的XMPP数据选择使用protobuf格式而非XML格式
- Seal Report使用教程(四)——创建数据表
- 直接在JS里创建JSON数据然后遍历使用
- 酒店管理系统_02-Servlet版本-mysql数据库(使用方法封装自动创建数据表)