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

bool Polygonize(const QString& strImg, const QString& strShp)
{
GDALDataset *poFlagDS = (GDALDataset *)GDALOpen(strImg.toUtf8().constData(),GA_ReadOnly);
if (poFlagDS == NULL)
{
cout<<"can't open "+ strImg.toStdString();
return false;
} GDALDriver * poOgrDriver = OGRSFDriverRegistrar::GetRegistrar()->GetDriverByName("ESRI Shapefile");
if (poOgrDriver == NULL)
{
cout<<"can't get driver";
GDALClose(poFlagDS);
return false;
} QFileInfo info(strShp);
if (info.exists())
poOgrDriver->Delete(strShp.toUtf8().constData()); GDALDataset* poDstDataset = poOgrDriver->Create(strShp.toUtf8().constData(),,,,GDT_Unknown,NULL);
if (poDstDataset == NULL)
{
GDALClose(poFlagDS);
return false;
} OGRSpatialReference* pSpecialReference = new OGRSpatialReference(poFlagDS->GetProjectionRef());
const char* layerName = "polygon";
OGRLayer* poLayer = poDstDataset->CreateLayer(layerName,pSpecialReference,wkbPolygon,);
if (poLayer == NULL)
{
cout<<"can't create layer";
GDALClose(poFlagDS);
GDALClose( poDstDataset );
return false;
} OGRFieldDefn ofDef_DN( LABELFIELD, OFTInteger );
if ( (poLayer->CreateField(&ofDef_DN) != OGRERR_NONE) )
{
cout<<"can't create field";
GDALClose(poFlagDS);
GDALClose( poDstDataset );
return false;
} char** papszOptions = NULL;
papszOptions = CSLSetNameValue(papszOptions,"8CONNECTED","");
GDALRasterBand *poFlagBand = poFlagDS->GetRasterBand();
GDALRasterBand *poMaskBand = poFlagBand->GetMaskBand();
CPLErr err = GDALPolygonize((GDALRasterBandH)poFlagBand,(GDALRasterBandH)poMaskBand,(OGRLayerH)poLayer,,papszOptions,,);
if (err != CE_None)
{
cout<<"polygonize failed";
GDALClose(poFlagDS);
GDALClose( poDstDataset ); return false;
}
GDALClose(poFlagDS);
GDALClose(poDstDataset);
return true;
}

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#写一个WindowsService的两篇文章

    1.http://blog.csdn.net/yysyangyangyangshan/article/details/10515035 上面的这篇文章一共两段,第二段讲的是使用代码来安装发布这个Win ...

  2. 【Spark机器学习速成宝典】模型篇02逻辑斯谛回归【Logistic回归】(Python版)

    目录 Logistic回归原理 Logistic回归代码(Spark Python) Logistic回归原理 详见博文:http://www.cnblogs.com/itmorn/p/7890468 ...

  3. jquery实现对象数组 筛选出每条记录中的特定属性字段 及根据某个属性值筛选出指定的元素

    jquery实现对象数组 筛选出每条记录中的特定属性字段 直接上图: 源码: /** * 对后端返回的数据,筛选出符合报表的列项,多余的列项去除 */ function filterParams(da ...

  4. 8.进行图片的裁剪,同时使用resize将图片的维度进行变化

    1.img.crop((x1, y1, x2, y2)) 进行图片的裁剪 参数说明: x1, y1, x2, y2 表示图片的大小 2. img.resize((w, h)) # 进行图片的维度变化 ...

  5. leetcode241 为运算表达式设计优先级

    class Solution(object): def diffWaysToCompute(self, input): """ :type input: str :rty ...

  6. Python 的列表生成器

    列表生成器为创建列表提供了一种简洁的方式. 比如说,我们可以这样实现一个平方数列表 squares=[x**2 for x in range(10)] 或者这样迭代一个字符串来生成列表 >> ...

  7. python字符串判断

    s为字符串 s.isalnum() 所有字符都是数字或者字母 s.isalpha() 所有字符都是字母 s.isdigit() 所有字符都是数字 s.islower() 所有字符都是小写 s.isup ...

  8. ssm遇到的问题

    1. Caused by: java.lang.IllegalArgumentException at org.springframework.asm.ClassReader.<init> ...

  9. centos7 安装mongodb4.0笔记

    1,添加yum源 vim /etc/yum.repos.d/mongodb-4.0.repo 2,把下面内容加入,并:wq [mongodb-org-4.0] name=MongoDB Reposit ...

  10. 使用 Python* 的英特尔® 分发版实现 Unity* 机器学习入门(第 1 部分)

    本文将向游戏开发人员介绍如何使用强化学习创建更好的人工智能 (AI) 行为.使用Python* 的英特尔® 分发版 — 常用面向对象的高级编程语言的进阶版 — 读者可收集关于如何训练预先存在的机器语言 ...