zoukankan      html  css  js  c++  java
  • gdal栅格矢量化

    第7.15节 栅格矢量化 —— 《GDAL源码剖析与开发指南》https://baike.baidu.com/item/GDAL源码剖析与开发指南/16419427

    #include "gdal_alg.h"

    栅格矢量化功能用于将栅格数据生成矢量数据,通常用于分类图像。GDAL库中使用函数GDALPolygonize()或者函数GDALFPolygonize()来完成该功能。

    CPLErr GDALPolygonize(GDALRasterBandH hSrcBand, GDALRasterBandH hMaskBand, OGRLayerH hOutLayer, int iPixValField, char **papszOptions, GDALProgressFunc pfnProgress, void *pProgressArg)

    参数:

    hSrcBand:输入数据波段指针

    hMaskBand:掩码数据波段指针

    hOutLayer:输出矢量文件图层指针

    iPixValField:设置矢量图层中保存像元值的字段序号

    papszOptions:设置算法选项,目前仅支持“8 Connected”

    pfnProgress:进度回调函数

    pProgressArg:进度回调函数参数

    返回值:返回CE_None表示执行成功,返回CE_Failure表示执行失败

    下面对该函数进行简单封装:

    #include "gdal_alg.h"
    int
    ImagePolygonize(const char* pszSrcFile, const char* pszDstFile, const char* pszFormat, GDALProgressFunc *pProgress) { if (pProgress != NULL) { printf("开始计算栅格矢量化..."); } GDALAllRegister(); OGRRegisterAll(); GDALDataset* poSrcDS = (GDALDataset*)GDALOpen(pszSrcFile, GA_ReadOnly); //打开栅格图像 if (poSrcDS == NULL) { if (pProgress != NULL) printf("不能打开指定文件,请检查文件是否存在!"); return 0; } /* *此处,参考李民录老师的代码为: *OGRSFDriver* poDriver = OGRSFDriverRegistrar::GetRegistrar()->GetDriverByName(pszFormat); *这里会报这样的错误:error: C2440: “初始化”: 无法从“GDALDriver *”转换为“OGRSFDriver *” *所以,我们用GDALDriver替代,但是GDALDriver类中没有定义GetRegistrar()方法,查阅了原始文档,发现可以用同作用的GetGDALDriverManager()方法进行获取驱动。 */ GDALDriver* poDriver = GetGDALDriverManager()->GetDriverByName(pszFormat);//为什么是GDALDriver也可以替作OGRSFDriver if (poDriver == NULL) { if (pProgress != NULL) printf("不能创建指定类型文件!"); GDALClose((GDALDatasetH)poSrcDS); return 0; } /* *此处,参考李民录老师的代码为: *OGRDataSource* poDstDS = poDriver->CreateDataSource(pszDstFile, NULL); *上面的代码,我们将OGRDriver替代为GDALDriver,在这个类中没有CreateDataSource()的定义, *可以用这个类中的 *Create (const char *pszName, int nXSize, int nYSize, int nBands, GDALDataType eType, char **papszOptions) *替代,这个方法主要用于创建栅格文件的新数据集,其中nXSize,nYSize,nBands,都是对栅格文件的描述,**都置零后台会默认创建矢量数据集** */ GDALDataset* poDstDS = poDriver->Create(pszDstFile, 0, 0, 0, GDT_Unknown, NULL); //创建输出矢量文件 if (poDstDS == NULL) { if (pProgress != NULL) printf("不能创建指定类型文件!"); GDALClose((GDALDatasetH)poSrcDS); return 0; } OGRSpatialReference *poSpatialRef = new OGRSpatialReference(poSrcDS->GetProjectionRef()); OGRLayer* poLayer = poDstDS->CreateLayer("Result", poSpatialRef, wkbPolygon, NULL); if (poLayer == NULL) { if (pProgress != NULL) printf("创建矢量图层失败!"); GDALClose((GDALDatasetH)poSrcDS); GDALClose(poDstDS); OSRDestroySpatialReference(poSpatialRef); poSpatialRef = NULL; return 0; } OGRFieldDefn ofieldDef("DN", OFTInteger); //创建属性表,只有一个字段即“DN”,里面保存对应的栅格的像元值 if (poLayer->CreateField(&ofieldDef) != OGRERR_NONE) { if (pProgress != NULL) printf("创建矢量图层属性表失败!"); GDALClose((GDALDatasetH)poSrcDS); GDALClose(poDstDS); OSRDestroySpatialReference(poSpatialRef); poSpatialRef = NULL; return 0; } GDALRasterBandH hSrcBand = (GDALRasterBandH)poSrcDS->GetRasterBand(1); //获取图像的第一个波段 if (GDALPolygonize(hSrcBand, NULL, (OGRLayerH)poLayer, 0, NULL, NULL, pProgress) != CE_None)//调用栅格矢量化 { if (pProgress != NULL) printf("计算失败!"); GDALClose((GDALDatasetH)poSrcDS); GDALClose(poDstDS); /*这里在李民录老师的代码中是:delete poSpatialRef; 在我的程序运行过程中,会从此处跳出,然 *后我去找了替代的方法,OGRSpatialReference(OGR空间 *参考系统)的析构函数,这个类没有被替代掉,但是依然会跳出,所以直接被我注释掉了,这里由 *于不会进入if条件语句所以没有进行注释 */ OSRDestroySpatialReference(poSpatialRef); poSpatialRef = NULL; return 0; } GDALClose((GDALDatasetH)poSrcDS); //关闭文件 GDALClose(poDstDS); // OSRDestroySpatialReference(poSpatialRef); poSpatialRef = NULL; if (pProgress != NULL) printf("计算成功!"); return 1; } void main() { ImagePolygonize("2.jpg","0.shp","ESRI Shapefile",NULL); }

    第1章 GDAL简介
      1.1 什么是GDAL
      1.2 GDAL特点
      1.3 GDAL支持的数据格式
      1.4 GDAL源码下载
      1.5 GDAL源码目录
      1.5.1 文件夹说明
      1.5.2 文件说明
      1.6 GDAL编译
      1.6.1 常规编译
      1.6.2 自定义编译
      1.6.3 编译其他方面
      1.7 SWIG编译
      1.7.1 SWIG简介
      1.7.2 编译C#版本GDAL
      1.7.3 编译Python版本GDAL
      1.7.4 编译Java版本GDAL
      1.8 GDAL帮助文档生成
      1.8.1 Doxygen简介
      1.8.2 生成GDAL开发帮助文档
      1.9 简单的调用
      1.9.1 C++使用GDAL
      1.9.2 C#使用GDAL
      1.9.3 Python使用GDAL
      1.9.4 Java使用GDAL
      1.9.5 调试GDAL源代码
      第2章 OGR空间参考
      2.1 空间参考简介
      2.1.1 大地水准面
      2.1.2 地球椭球体
      2.1.3 基准面
      2.1.4 地图投影
      2.2 OGR空间参考
      2.2.1 OGR空间参考简介
      2.2.2 OGR空间参考说明
      2.3 OGR空间参考坐标转换
      2.4 OGR空间参考类说明
      2.4.1 OGRSpatialReference类
      2.4.2 OGRCoordinateTransformation类
      2.5 OGR空间参考使用示例
      2.5.1 C++使用
      2.5.2 C#使用
      2.5.3 Python使用
      2.5.4 Java使用
      第3章 OGR库说明
      3.1 OGR体系结构
      3.1.1 Geometry(几何对象)
      3.1.2 Spatial Reference(空间参考)
      3.1.3 Feature/Feature Definition(要素/要素定义)
      3.1.4 Layer(图层)
      3.1.5 Data Source(数据源)
      3.1.6 Drivers(格式驱动)
      3.2 OGR常用类说明
      3.2.1 OGRSFDriver类说明
      3.2.2 OGRSFDriverRegistrar类说明
      3.2.3 OGRDataSource类说明
      3.2.4 OGRLayer类说明
      3.2.5 OGRGeometry相关类说明
      3.2.6 OGRFieldDefn类说明
      3.2.7 OGRFeatureDefn类说明
      3.2.8 OGRFeature类说明
      3.2.9 其他说明
      3.3 SQL说明
      3.3.1 SELECT子句
      3.3.2 WHERE子句
      3.3.3 ORDER BY子句
      3.3.4 JOIN子句
      3.3.5 UNION ALL子句
      3.3.6 特殊字段
      3.3.7 索引与表
      3.3.8 ExecuteSQL()
      3.3.9 Non—OGR SQL
      3.4 OGR使用示例
      3.4.1 C++使用
      3.4.2 C#使用
      3.4.3 Python使用
      3.4.4 Java使用
      第4章 GDAL库说明
      4.1 GDAL数据集总体概况
      4.1.1 数据集(Dataset)
      4.1.2 坐标系统(Coordinate System)
      4.1.3 元数据(Metadata)
      4.1.4 子数据集域(Subdatasets Domain)
      4.1.5 图像结构域(Image_Structure Domain)
      4.1.6 RPC域(RPC Domain)
      4.1.7 XML域(XML:Domains)
      4.1.8 栅格波段(Raster Band)
      4.1.9 颜色表(Color Table)
      4.1.10 快视图(Overviews)
      4.2 GDAL常用类说明
      4.2.1 GDALDriverManager类说明
      4.2.2 GDALDriver类说明
      4.2.3 GDALDataset类说明
      4.2.4 GDALRasterBand类说明
      4.3 GDAL元数据说明
      4.4 RasterIO使用说明
      4.5 图像金字塔
      4.6 颜色表说明
      4.7 图像统计信息说明
      4.7.1 直方图统计
      4.7.2 极值计算
      4.7.3 均值标准差计算
      4.8 GDAL库使用示例
      4.8.1 C++使用
      4.8.2 C#使用
      4.8.3 Python使用
      4.8.4 Java使用
      第5章 GDAL数据格式及配置项说明
      5.1 常用图像格式使用说明
      5.1.1 GeoTIFF格式
      5.1.2 Erdas Imagine格式
      5.1.3 PCI的PIX格式
      5.1.4 ENVI的HDR格式
      5.1.5 JPEG,PNG图像使用说明
      5.1.6 MEM文件使用说明
      5.2 GDAL对于HDF、NetCDF数据集读取
      5.2.1 HDF格式使用说明
      5.2.2 NetCDF格式使用说明
      5.3 VRT文件格式说明
      5.3.1 VRT格式说明
      5.3.2 VRTRasterBand
      5.3.3 VRT使用说明
      5.3.4 编程创建VRT文件
      5.4 网络WMS数据使用说明
      5.5 GDAL配置选项说明
      5.5.1 设置配置选项
      5.5.2 通用选项
      5.5.3 GDAL库选项
      5.5.4 GeoTiff格式选项
      5.5.5 GDAL/OGR网络选项
      5.5.6 OGR库选项
      第6章 GDAL格式扩展说明
      6.1 栅格格式扩展
      6.1.1 从Dataset继承
      6.1.2 从RasterBand继承
      6.1.3 栅格驱动(Driver)
      6.1.4 添加驱动到GDAL库
      6.1.5 添加地理参考信息
      6.1.6 金字塔(快视图)
      6.1.7 创建文件 359
      6.1.8 RawDataset和RawRasterBand类
      6.1.9 元数据和其他外部扩展
      6.2 矢量格式扩展
      6.2.1 实现OGRSFDriver类
      6.2.2 从数据源中读取数据
      6.2.3 读取图层
      6.3 裸数据格式扩展
      第7章 GDAL算法使用说明
      7.1 GDAL算法处理基础
      7.1.1 GDAL大图像处理策略
      7.1.2 GDAL中进度信息说明
      7.2 GDALWarp说明
      7.2.1 GDALWarpOptions
      7.2.2 GDALWarpOperation
      7.2.3 GDALWarpAPI使用说明
      7.3 图像重采样
      7.3.1 使用RasterIO重采样
      7.3.2 使用GDALWarp重采样
      7.4 图像裁切
      7.4.1 使用RasterIO裁切
      7.4.2 使用GDALWarp裁切
      7.5 图像镶嵌
      7.6 GDALWarp坐标转换
      7.6.1 GDALWarp坐标转换相关函数说明
      7.6.2 GDALWarp坐标转换流程
      7.7 图像重投影
      7.8 图像校正
      7.8.1 几何多项式校正(1~3次)
      7.8.2 TPS校正
      7.8.3 RPC校正
      7.8.4 GeoLoc校正
      7.9 图像坐标转换通用接口
      7.103*3空间卷积运算
      7.11 DEM地形分析
      7.11.1 坡度坡向分析
      7.11.2 地形指数
      7.11.3 山体阴影
      7.11.4 彩色渲染
      7.11.5 立体彩色渲染
      7.12 格网插值
      7.12.1 计算数据指标
      7.12.2 离散点数据插值
      7.12.3 离散点数据插值示例
      7.13 小碎斑去除
      7.14 矢量栅格化
      7.15 栅格矢量化
      7.16 生成等高线
      第8章 CPL库介绍
      8.1 cpl_port.h
      8.1.1 数据类型定义
      8.1.2 常量和函数定义
      8.1.3 LSB和MSB相互转换
      8.2 cpl_error.h
      8.2.1 常用的错误代码
      8.2.2 错误处理函数
      8.3 cpl_conv.h
      8.3.1 GDAL库配置项读写
      8.3.2 内存管理相关
      8.3.3 文本文件读取相关
      8.3.4 字符串与其他数据类型相关转换
      8.3.5 应用程序与动态库相关
      8.3.6 文件系统以及路径相关
      8.3.7 度、分、秒与十进制度转换
      8.3.8 ZIP压缩文件读写
      8.4 cpl_http.h
      8.5 cpl_minixml.h
      第9章 GDAL工具使用说明
      9.1 GDAL工具通用参数说明
      9.1.1 通用命令行选项
      9.1.2 创建文件通用选项
      9.2 Exe工具使用说明
      9.2.1 gdalinfo
      9.2.2 gdal_translate
      9.2.3 gdaladdo
      9.2.4 gdalwarp
      9.2.5 gdaltindex
      9.2.6 gdalbuildvrt
      9.2.7 gdal_contour
      9.2.8 gdaldem
      9.2.9 gdal_rasterize
      9.2.10 gdaltransform
      9.2.11 nearblack
      9.2.12 gdal_grid
      9.2.13 gdallocationinfo
      9.2.14 gdalsrsinfo
      9.2.15 gdal—config
      9.2.16 gdalmanage
      9.2.17 ogrinfo
      9.2.18 ogr2ogr
      9.2.19 ogrtindex
      9.3 Python脚本工具使用说明
      9.3.1 rgb2pct.py
      9.3.2 pct2rgb.py
      9.3.3 gdal_merge.py
      9.3.4 gdal2tiles.py
      9.3.5 gdal_retile.py
      9.3.6 gdal_proximity.py
      9.3.7 gdal_polygonize.py
      9.3.8 gdal_sieve.py
      9.3.9 gdal_fillnodata.py
      9.3.10 gdalmove.py
      9.3.11 gdal_edit.py
      附录

  • 相关阅读:
    print 带颜色打印
    bootstrap-duallistbox使用
    Linux 查看和更改系统字符集
    nginx 不重装实现动态添加模块
    ubuntu 安装openssh-server出现依赖关系解决
    linux安装和使用zookeeper
    网页背景蜘蛛丝特效
    RabbitMQ与SpringBoot整合
    Redis常用命令
    设计模式(Design Patterns)
  • 原文地址:https://www.cnblogs.com/2008nmj/p/11782753.html
Copyright © 2011-2022 走看看