GDAL写矢量图
来源:互联网 发布:中国证券网软件下载 编辑:程序博客网 时间:2024/05/21 11:36
本文主要介绍:利用GDAL库写矢量文件,把栅格图转化为矢量图。
说明:以下程序GDAL版本为Gdal2.0.0,如果使用低版本gdal库,会出现一些问题。
1 相关资源
GDAL官网,ORG相关函数和读写矢量图介绍:http://www.gdal.org/ogr_apitut.html
ORG相关函数及说明的中文资料:OGR入门
2 写矢量函数
所需头文件:
#include "gdal_alg.h"#include "gdal_priv.h" //添加GDAL库函数的头文件#include "ogrsf_frmts.h"
2.1 shp文件中写多边形
int WritePolygonShp(){ const char *pszDriverName = "ESRI Shapefile"; GDALDriver *poDriver; GDALAllRegister(); poDriver = GetGDALDriverManager()->GetDriverByName(pszDriverName ); if( poDriver == NULL ) { printf( "%s driver not available.\n", pszDriverName ); exit( 1 ); } GDALDataset *poDS; poDS = poDriver->Create( "F:\\point_out.shp", 0, 0, 0, GDT_Unknown, NULL ); //创建数据源 if( poDS == NULL ) { printf( "Creation of output file failed.\n" ); exit( 1 ); } OGRLayer *poLayer; poLayer = poDS->CreateLayer( "point_out", NULL, wkbPolygon, NULL ); //创建图层 if( poLayer == NULL ) { printf( "Layer creation failed.\n" ); exit( 1 ); } OGRFieldDefn oField( "Name", OFTString ); //创建属性 oField.SetWidth(32); if( poLayer->CreateField( &oField ) != OGRERR_NONE ) { printf( "Creating Name field failed.\n" ); exit( 1 ); } OGRFieldDefn oField1("PointX", OFTReal); oField1.SetPrecision(3); if(poLayer->CreateField(&oField1) != OGRERR_NONE) { cout << "Creating Name1 field failed." << endl; return 0; } OGRFeature *poFeature; poFeature = OGRFeature::CreateFeature( poLayer->GetLayerDefn() ); poFeature->SetField( 0, "good" ); poFeature->SetField( 1, 1); OGRLinearRing ring; int i = 10; ring.addPoint(50, 50); ring.addPoint(100, 100); ring.addPoint(60, 90); ring.closeRings();//首尾点重合形成闭合环 OGRPolygon poly; poly.addRing(&ring); poFeature->SetGeometry( &poly); if( poLayer->CreateFeature( poFeature ) != OGRERR_NONE ) { printf( "Failed to create feature in shapefile.\n" ); exit( 1 ); } OGRFeature::DestroyFeature( poFeature ); GDALClose( poDS ); return 0;}
2.2 shp文件中写曲线
int WriteLineStringShp(){ const char *pszDriverName = "ESRI Shapefile"; GDALDriver *poDriver; GDALAllRegister(); poDriver = GetGDALDriverManager()->GetDriverByName(pszDriverName ); if( poDriver == NULL ) { printf( "%s driver not available.\n", pszDriverName ); exit( 1 ); } GDALDataset *poDS; poDS = poDriver->Create( "F:\\point_out.shp", 0, 0, 0, GDT_Unknown, NULL ); if( poDS == NULL ) { printf( "Creation of output file failed.\n" ); exit( 1 ); } OGRLayer *poLayer; poLayer = poDS->CreateLayer( "point_out", NULL, wkbLineString, NULL ); if( poLayer == NULL ) { printf( "Layer creation failed.\n" ); exit( 1 ); } OGRFieldDefn oField( "Name", OFTString ); oField.SetWidth(32); if( poLayer->CreateField( &oField ) != OGRERR_NONE ) { printf( "Creating Name field failed.\n" ); exit( 1 ); } OGRFieldDefn oField1("PointX", OFTReal); oField1.SetPrecision(3); if(poLayer->CreateField(&oField1) != OGRERR_NONE) { cout << "Creating Name1 field failed." << endl; return 0; } OGRFeature *poFeature; poFeature = OGRFeature::CreateFeature( poLayer->GetLayerDefn() ); poFeature->SetField( 0, "good" ); poFeature->SetField( 1, 1); OGRLineString *lines = new OGRLineString(); lines->addPoint(100, 100); lines->addPoint(100, 200); lines->addPoint(200, 150); poFeature->SetGeometry( lines); if( poLayer->CreateFeature( poFeature ) != OGRERR_NONE ) { printf( "Failed to create feature in shapefile.\n" ); exit( 1 ); } OGRFeature::DestroyFeature( poFeature ); GDALClose( poDS ); return 0;}
3 其他
(1) wkb与wkt区别:http://blog.sina.com.cn/s/blog_00ccd2400101c2x8.html
(2) 图层属性可以根据实际需求来设置,可以创建多个属性。
1 0
- GDAL写矢量图
- 矢量图
- 矢量图
- 矢量图
- GDAL写dxf文件中文乱码问题解决方法
- C#用GDAL/OGR库创建与写Shape文件
- Android Arcgis(13)、Gdal简单写个shp文件
- SVG矢量图
- 矢量图文件格式
- 常用矢量图
- iOS 矢量图
- 制作矢量图
- 矢量图动画
- VectorDrawable(矢量图)
- 矢量图VectorDrawable
- VectorDrawable矢量图
- SVG矢量图
- Android矢量图
- react 入门 阮一峰
- 使用sysbench测试磁盘IO
- android 布局
- X265_1.8代码结构
- jQuery最佳实践
- GDAL写矢量图
- Android ActionBar的基本用法
- 人工智能 历史 应用 现状
- Vickate_iOS_键盘监听
- STL中关于map和set的四个问题?
- js验证两次输入的密码是否一致
- 解决ubuntu16.04在英文版下搜狗输入法问题
- C++第六次上机实验
- 硬件相关基础知识3(DDR3基本知识)