在这里主要提供直接能用的栅格矢量化代码,这个函数中路径输入为QStrng,如果是其他类型的,请直接转成const char *;

  1. bool Polygonize(const QString& strImg, const QString& strShp)
  2. {
  3. GDALDataset *poFlagDS = (GDALDataset *)GDALOpen(strImg.toUtf8().constData(),GA_ReadOnly);
  4. if (poFlagDS == NULL)
  5. {
  6. cout<<"can't open "+ strImg.toStdString();
  7. return false;
  8. }
  9.  
  10. GDALDriver * poOgrDriver = OGRSFDriverRegistrar::GetRegistrar()->GetDriverByName("ESRI Shapefile");
  11. if (poOgrDriver == NULL)
  12. {
  13. cout<<"can't get driver";
  14. GDALClose(poFlagDS);
  15. return false;
  16. }
  17.  
  18. QFileInfo info(strShp);
  19. if (info.exists())
  20. poOgrDriver->Delete(strShp.toUtf8().constData());
  21.  
  22. GDALDataset* poDstDataset = poOgrDriver->Create(strShp.toUtf8().constData(),,,,GDT_Unknown,NULL);
  23. if (poDstDataset == NULL)
  24. {
  25. GDALClose(poFlagDS);
  26. return false;
  27. }
  28.  
  29. OGRSpatialReference* pSpecialReference = new OGRSpatialReference(poFlagDS->GetProjectionRef());
  30. const char* layerName = "polygon";
  31. OGRLayer* poLayer = poDstDataset->CreateLayer(layerName,pSpecialReference,wkbPolygon,);
  32. if (poLayer == NULL)
  33. {
  34. cout<<"can't create layer";
  35. GDALClose(poFlagDS);
  36. GDALClose( poDstDataset );
  37. return false;
  38. }
  39.  
  40. OGRFieldDefn ofDef_DN( LABELFIELD, OFTInteger );
  41. if ( (poLayer->CreateField(&ofDef_DN) != OGRERR_NONE) )
  42. {
  43. cout<<"can't create field";
  44. GDALClose(poFlagDS);
  45. GDALClose( poDstDataset );
  46. return false;
  47. }
  48.  
  49. char** papszOptions = NULL;
  50. papszOptions = CSLSetNameValue(papszOptions,"8CONNECTED","");
  51. GDALRasterBand *poFlagBand = poFlagDS->GetRasterBand();
  52. GDALRasterBand *poMaskBand = poFlagBand->GetMaskBand();
  53. CPLErr err = GDALPolygonize((GDALRasterBandH)poFlagBand,(GDALRasterBandH)poMaskBand,(OGRLayerH)poLayer,,papszOptions,,);
  54. if (err != CE_None)
  55. {
  56. cout<<"polygonize failed";
  57. GDALClose(poFlagDS);
  58. GDALClose( poDstDataset );
  59.  
  60. return false;
  61. }
  62. GDALClose(poFlagDS);
  63. GDALClose(poDstDataset);
  64. return true;
  65. }

GDAL栅格矢量化的更多相关文章

  1. 转:如何在ArcMap下将栅格图象矢量化的基本步骤 (对影像的校准和配准、栅格图象矢量化)

    矢量对象是以矢量的形式,即用方向和大小来综合表示目标的形式描述的对象.例如画面上的一段直线,一个矩形,一个点,一个圆,一个填充的封闭区域--等等. 矢量图形文件就是由这些矢量对象组合而成的描述性文件. ...

  2. 矢量化的HTML5拓扑图形组件设计

    HT一直被客户称道的就是其全矢量化的设计特色,矢量相比传统图片好处太多了: www.hightopo.com/guide/guide/core/vector/ht-vector-guide.html ...

  3. 基于颜色的R2V软件快速矢量化

    跟同学一起做SRTP,矢量化,作图的工作点名让我去做,人家说,谁让你是学地理信息的呢?哎,什么时候地理信息不再被别人当成制图画图的,我们专业就有希望了. 话虽然这么说,但工作还是要去做. (进入正题) ...

  4. 编译器优化:何为SLP矢量化

    摘要:SLP矢量化的目标是将相似的独立指令组合成向量指令,内存访问.算术运算.比较运算.PHI节点都可以使用这种技术进行矢量化. 本文分享自华为云社区<编译器优化那些事儿(1):SLP矢量化介绍 ...

  5. Atitit  图像处理Depixelizing Pixel Art像素风格画的矢量化

    Atitit  图像处理Depixelizing Pixel Art像素风格画的矢量化 在去年的时候,偶然看到hqx算法. 一个高质量的插值放大算法. 与双线性插值等插值算法相比,这个算法放大后对人眼 ...

  6. 【GDAL】GDAL栅格数据结构学习笔记(一): 关于Metadata

    在维护一段代码时看到前任程序员写的获取栅格数据的CellSize的功能,竟然在知道GDAL的情况下去调用AE的接口来解算,觉得费解. 原来的思路是使用AE的Raster对象读取出Raster的文件大小 ...

  7. HTML5中地图矢量化

    我们可以获取canvas对象为var c=document.getElementById("myCanvas");其应有js属性方法如下列举:1:绘制渲染对象, c.getCont ...

  8. PIE SDK栅格矢量化算法

    1.算法功能简介 栅格数据矢量化较为复杂,如果由一幅扫描的数字化地图来建立矢量数据库,则需要经过数字图象处理,如边缘增强.细化.二值化.特征提取及模式识别才能获得矢量数据.人们通常将多色地图分色后逐个 ...

  9. gdal的矢量栅格化接口GDALRasterizeLayers使用(一)

    作者:朱金灿 来源:http://blog.csdn.net/clever101 gdal库提供了一个矢量栅格化接口函数GDALRasterizeLayers.今天让我们学习一下这个接口函数的使用.该 ...

随机推荐

  1. 怎么理解一个规模大且结构复杂的c工程源码

    很久以前,当要着手一个规模很大,结构复杂的c工程源码时,总是感觉无从下手.这个时候,一般google一下”XX源码分析“.当这个源码是很广泛使用的时,这样到也能得到不少启发:很不幸,经常要接触一些很少 ...

  2. dell 9代cpu新机器安装centos7.7 bios 配置

    1.步骤如下,按f2或f12选择进入bios,每一步配置的内容如图所示,U盘写镜像,引导U盘启动,安装.(电源管理自启动那几个步骤可以不做)

  3. 回归_最小二乘法(python脚本实现)

     python机器学习-乳腺癌细胞挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

  4. 继成极光推送SDk的实现

    进入极光推送官网:https://www.jiguang.cn/push 注册,创建应用,申请APPKey等操作 代码实现: 确认android studio的 Project 根目录的主 gradl ...

  5. ControlTemplate in WPF —— TextBox

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" x ...

  6. 使用IDEA工具创建本地项目并且上传到码云

    需要条件: 1.码云/Github建好的git项目 2.IDEA编辑器 3.本地项目 步骤1:创建远程项目 步骤2:复制远程项目地址  注意:此处码云官方已经给出上传项目方法,不过用的是命令行的形式, ...

  7. Tensorflow 安装 和 初识

    Windows中 Anaconda,Tensorflow 和 Pycharm的安装和配置   https://blog.csdn.net/zhuiqiuzhuoyue583/article/detai ...

  8. LeetCode.1029-两城调度(Two City Scheduling)

    这是小川的第383次更新,第412篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第245题(顺位题号是1029).公司计划采访的人数为2N.将第i个人飞往城市A的费用是[ ...

  9. js脚本实现在该界面直接跳转到一个登录界面并且自动登录

    1:首先说明的是自动登录也是需要密码的,这是前一个网页传输过去的 2:这里我使用的是post提交表单的形式 <------------------------------------------ ...

  10. P1319 【压缩技术】

    题面嘤嘤嘤 刚做完P1320,突然发现这里有一个没有括号的压缩技术,就抱着试一试的心态来做一做... 洛谷真有趣,让我正着做一遍,反着做一遍... 好,进入正题 这题比较便捷的是边读边做 具体细节看代 ...