Qt(mingw)+GDAL位图转矢量图写入shp或json文件

参考:
Qt + GDAL 写入矢量图层 shp
windows下的QT(mingw版)+GDAL库下载、安装、测试

已经编译好的GDAL库下载:
https://download.csdn.net/download/carry_qt/10648004

浏览shp格式的小软件:Shape Viewer
https://download.csdn.net/download/lclhurricane/2925573
https://shape-viewer.software.informer.com/
https://shapeviewer.software.informer.com/

Qt中添加GDAL库:

INCLUDEPATH += D:\GDAL\include
LIBS += -LD:\GDAL\bin -lgdal-1

位图转矢量图写入shp或json文件:

//保存json文件,pszFormat="geojson"
//保存shp文件,pszFormat="ESRI Shapefile"
int ImagePolygonize(const char * pszSrcFile,const char* pszDstFile,const char* pszFormat="geojson");  //矢量化,得到json文件


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 );  //GTiff
    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;
}
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值