存在这样一个示例的矢量文件,包含了两个重叠的面特征:

一个很常见的需求是求取这个矢量中所有面元素的并集,通过GDAL/GEOS很容易实现这个功能,具体代码如下:

#include <iostream>#include <gdal/ogrsf_frmts.h>using namespace std;bool WritePolygon(string filePath, OGRPolygon *pOgrMerged)
{//创建GDALDriver* driver = GetGDALDriverManager()->GetDriverByName("ESRI Shapefile");if (!driver){printf("Get Driver ESRI Shapefile Error!\n");return false;}GDALDataset* dataset = driver->Create(filePath.c_str(), 0, 0, 0, GDT_Unknown, NULL);OGRLayer* poLayer = dataset->CreateLayer("houseType", NULL, wkbPolygon, NULL);//创建特征{OGRFeature *poFeature = new OGRFeature(poLayer->GetLayerDefn());poFeature->SetGeometry(pOgrMerged);if (poLayer->CreateFeature(poFeature) != OGRERR_NONE){printf("Failed to create feature in shapefile.\n");return false;}}//释放GDALClose(dataset);dataset = nullptr;//GDALDestroyDriverManager();return true;
}int main()
{GDALAllRegister();CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "NO");  //支持中文路径CPLSetConfigOption("SHAPE_ENCODING", "");  //解决中文乱码问题string filePath = "D:/Work/OSGWork/shpTest/test/src.shp";GDALDataset *poDS = (GDALDataset*)GDALOpenEx(filePath.c_str(), GDAL_OF_VECTOR, NULL, NULL, NULL);if (!poDS){printf("无法读取该文件,试检查格式是否正确!");return 1;}if (poDS->GetLayerCount()<1){printf("该文件的层数小于1,试检查格式是否正确!");return 1;}OGRLayer  *poLayer = poDS->GetLayer(0); //读取层poLayer->ResetReading();std::unique_ptr<OGRPolygon> pOgrMerged(new OGRPolygon());OGRFeature *poFeature;while ((poFeature = poLayer->GetNextFeature()) != NULL){//OGRGeometry *pGeo = poFeature->GetGeometryRef();OGRwkbGeometryType pGeoType = pGeo->getGeometryType();if (pGeoType == wkbPolygon){OGRPolygon  *pPolygon = (OGRPolygon*)pGeo;if (!pPolygon){continue;}OGRPolygon* pTemp = static_cast<OGRPolygon*>(pOgrMerged->Union(pPolygon));if (pTemp){pOgrMerged.reset(pTemp);}        }OGRFeature::DestroyFeature(poFeature);}GDALClose(poDS);poDS = nullptr;if (pOgrMerged && pOgrMerged->IsValid() && pOgrMerged->getExteriorRing()){string path = "D:/Work/OSGWork/shpTest/test/dst.shp";WritePolygon(path, pOgrMerged.get());}return 0;
}

在这段代码中,遍历了示例矢量文件中的每个面元素,求取了所有面元素的并集,得到最终一个面元素,并将这个面元素保存成新的矢量文件。这个矢量文件用ArcMap打开显示如下:

使用GDAL/GEOS求面特征的并集相关推荐

  1. [NA]Lab5:反幂法求矩阵特征根

    任务概述 给定一个n*n矩阵A以及A的某一个特征根的近似值p,从一个给定向量 x⃗ (0) {\vec{x}}^{(0)}出发,求该特征根的高精度近似值,并且求出其对应的无穷范数下的单位特征向量. 函 ...

  2. JAVA Hashset求集合的交集并集差集

    JAVA Hashset求集合的交集并集差集 Hashset是Set接口较为常见的一个子类,该子类的最大特点是不允许保存重复的元素,并且所有的内容都采用散列(无序)的方式进行存储. package c ...

  3. 开源GIS库GDAL/GEOS在Windows下的编译与 Codeblocks配置

    最近在研究开源GIS库GDAL,我是采用自己下载源码编译的方式,主要进行以下几个步骤: 编译GEOS,参考自GEOS的wiki 下载GEOS源代码,目前的版本为3.5.0,解压到C盘根目录.打开VS2 ...

  4. Java中求集合交集、并集、差集

    前言 如果是自定义类,需要重写equals方法,如果使用Set集合,还需要重写hashCode方法:如下以User为例子: public class User{private Integer id;p ...

  5. 系统稳定性(基于matlab求传递函数特征根)

    本文包含以下内容: 一.系统稳定性概念 二.系统稳定性判断 一.系统稳定性概念 系统加入扰动后偏离了原来的状态,当把干扰去掉后,系统如果能恢复到原来的状态,则说明系统稳定. 二.系统稳定性判断 脉冲信 ...

  6. matlab 用古典雅可比方法求矩阵特征根 (仅使用基础函数)

    我们先看看<数值计算方法>这本书上关于古典雅可比方法的例题: %author FoddcusL FAFU %The Jacobi For root%输入:目标矩阵(input):目标接近的 ...

  7. 编译好的GDAL库,支持ECW格式,支持proj,支持geos

    这几天因为工作需要,把GDAL重新编译了一下,现支持ECW格式,即可以用GDALOPEN读取JPEG2000格式的影像数据;编译时也添加了对geos和proj的支持. 内含3个文件夹,分别是gdal, ...

  8. Java实验——定义一个类,该类中包含以下几个方法(静态):实现两个字符串数组的逆序排序,输出结果为字符串数组;求两个整形数组的交集;求两个浮点型数组的并集;

    目录 一.实现两个字符串数组的逆序排序,输出结果为字符串数组 解题思路: 具体代码: 运行截图: 二.求两个整形数组的交集 具体代码: 运行截图: 三.求两个浮点型数组的并集 解题思路: 具体代码: ...

  9. C/C++语言实现一百个数组之间求任意数组的交集和并集

    1:背景要求 1.C++ 2.给定一百个数组,求任意两个集合之间的交集和并集(最好能按照学生的方式做,不被发现的那种)撰写设计书,主要内容包括(500-1000字): ①背景介绍或实验目的: ②功能设 ...

最新文章

  1. 2021-04-24 人工智能必读书单 Python
  2. centos 6.5配置samba
  3. 在eclipse中创建maven项目错误的解决方法:Could not resolve archetype org.apache.maven.archetypes:maven-archetype-qu
  4. asterisk1.8启动信息分析(未完)
  5. 数学的威力有多大?足以震慑全球......
  6. Mac OS下Tomcat native-APR的安装
  7. 关于MFC下多线程,在线程中创建非模态对话框以及消息传递
  8. VC里一些容易混淆的地方(转)
  9. 反编译工具ILSpy的下载与使用
  10. python3 yield from用法
  11. ������ʾ����
  12. 高客单价项目,适合新手操作的网络项目
  13. 嵌入式BootLoader技术内幕(一)
  14. 第一次作业:阅读与准备工作
  15. IDL的高效编程(六)
  16. 逃离996的最强出路!
  17. 被困在深海沉船近3天,他奇迹般地活了下来!
  18. 计算机中cmos设置程序,计算机CMOS设置详解.doc
  19. k均值聚类(k-means)
  20. 鼠标右键编辑html文档,鼠标右键菜单设置方法【详细步骤】

热门文章

  1. Centos7 出现xxx不在sudoers文件中的解决方案
  2. 分摊的意思_十年分摊是什么意思
  3. 世界在变化刷脸支付一直奋进
  4. 前端单元测试到底要怎么写?看这一篇就够了
  5. 第五届蓝桥杯——java c组 1/a 的分数称为单位分数
  6. USACO2008游荡的奶牛
  7. BAPI_PO_CREATE1--单价增大10倍问题
  8. 关于H5请求数据报跨域问题记录
  9. python面向对象基础-01
  10. 对输入的两个分数选择‘+’、‘-’、‘*’、‘/’四则运算,并以分数形式输出结果。输入:第一行先输入整数T,表示总共有T组数据。接下来共T行,每行输入分数形式的算术表达式。 输出:最简分数形