GDAL 栅格数据转矢量数据
2013-07-25 16:25
417 查看
网上有不少关于栅格转矢量的代码,今天参考了别人的代码,写出了一个完整的程序:
可以处理分类后的栅格图像,建议在做矢量化之前,对分类后的图像进行滤波,去除小碎斑块,不然这些小碎斑块会影响处理进度。
#include "gdal_priv.h" #include "ogrsf_frmts.h" //for ogr #include "gdal_alg.h" //for GDALPolygonize #include "cpl_conv.h" //for CPLMalloc() int ImagePolygonize(const char * pszSrcFile,const char* pszDstFile,const char* pszFormat); int main() { const char* pszSrcFile = "H:\\GDAL文件\\gdal栅格矢量化\\classify_bitmap.bmp"; const char* pszDstFile = "H:\\GDAL文件\\gdal栅格矢量化\\shape.shp"; ImagePolygonize(pszSrcFile,pszDstFile,"ESRI Shapefile"); // system("pause"); return 0; } int ImagePolygonize(const char * pszSrcFile,const char* pszDstFile,const char* pszFormat) { GDALAllRegister(); OGRRegisterAll();//记得添加驱动注册 CPLSetConfigOption("GDAL_FILENAME_IS_UTF8","NO"); GDALDataset* poSrcDS=(GDALDataset*)GDALOpen(pszSrcFile,GA_ReadOnly); if(poSrcDS==NULL) { return 0; } // 创建输出矢量文件 OGRSFDriver *poDriver; poDriver = OGRSFDriverRegistrar::GetRegistrar()->GetDriverByName( pszFormat ); if (poDriver == NULL) { GDALClose((GDALDatasetH)poSrcDS); return 0; } //根据文件名创建输出矢量文件 OGRDataSource* poDstDS=poDriver->CreateDataSource(pszDstFile); if (poDstDS==NULL) { GDALClose((GDALDatasetH)poSrcDS); return 0; } // 定义空间参考,与输入图像相同; OGRSpatialReference *poSpatialRef = new OGRSpatialReference(poSrcDS->GetProjectionRef()); OGRLayer* poLayer = poDstDS->CreateLayer("Result", poSpatialRef, wkbPolygon, NULL); if (poDstDS == NULL) { GDALClose((GDALDatasetH)poSrcDS); OGRDataSource::DestroyDataSource(poDstDS); delete poSpatialRef; poSpatialRef = NULL; return 0; } OGRFieldDefn ofieldDef("Segment", OFTInteger); //创建属性表,只有一个字段即“Segment”,里面保存对应的栅格的像元值 poLayer->CreateField(&ofieldDef); GDALRasterBandH hSrcBand = (GDALRasterBandH) poSrcDS->GetRasterBand(1); //获取图像的第一个波段 GDALPolygonize(hSrcBand, NULL, (OGRLayerH)poLayer, 0, NULL, NULL, NULL); //调用栅格矢量化 GDALClose(poSrcDS); //关闭文件 OGRDataSource::DestroyDataSource(poDstDS); return 1; }
可以处理分类后的栅格图像,建议在做矢量化之前,对分类后的图像进行滤波,去除小碎斑块,不然这些小碎斑块会影响处理进度。
相关文章推荐
- [GDAL]2.读取栅格和矢量数据
- Erdas:将shp文件保存为Erdas中适用的AOI文件 矢量数据裁剪栅格
- GDAL修改shp矢量数据的属性值
- 栅格数据与矢量数据
- GDAL读写矢量数据-Python
- GIS数据组织结构(矢量和栅格)
- GDAL python教程(1)——用OGR读写矢量数据
- 用不规则矢量多边形裁切栅格数据的方法比较
- 栅格数据与矢量数据
- Python gdal 读取栅格数据
- GDAL支持的栅格数据格式
- Python+GDAL/OGR矢量数据读写
- 栅格数据与矢量数据
- C#+ArcEngine:加载打开Shp矢量数据和栅格数据(VS2010窗体+代码)
- 在ArcGIS利用矢量数据剪裁栅格数据的方法
- ArcEngine和GDAL读写栅格数据机制对比(一)
- 用不规则矢量多边形裁切栅格数据的方法比较
- 栅格数据与矢量数据
- 空间数据库引擎探究及GIS栅格和矢量数据类型的存储
- 矢量数据转换成栅格数据