使用GDAL/GEOS求面特征的并集
存在这样一个示例的矢量文件,包含了两个重叠的面特征:
一个很常见的需求是求取这个矢量中所有面元素的并集,通过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求面特征的并集相关推荐
- [NA]Lab5:反幂法求矩阵特征根
任务概述 给定一个n*n矩阵A以及A的某一个特征根的近似值p,从一个给定向量 x⃗ (0) {\vec{x}}^{(0)}出发,求该特征根的高精度近似值,并且求出其对应的无穷范数下的单位特征向量. 函 ...
- JAVA Hashset求集合的交集并集差集
JAVA Hashset求集合的交集并集差集 Hashset是Set接口较为常见的一个子类,该子类的最大特点是不允许保存重复的元素,并且所有的内容都采用散列(无序)的方式进行存储. package c ...
- 开源GIS库GDAL/GEOS在Windows下的编译与 Codeblocks配置
最近在研究开源GIS库GDAL,我是采用自己下载源码编译的方式,主要进行以下几个步骤: 编译GEOS,参考自GEOS的wiki 下载GEOS源代码,目前的版本为3.5.0,解压到C盘根目录.打开VS2 ...
- Java中求集合交集、并集、差集
前言 如果是自定义类,需要重写equals方法,如果使用Set集合,还需要重写hashCode方法:如下以User为例子: public class User{private Integer id;p ...
- 系统稳定性(基于matlab求传递函数特征根)
本文包含以下内容: 一.系统稳定性概念 二.系统稳定性判断 一.系统稳定性概念 系统加入扰动后偏离了原来的状态,当把干扰去掉后,系统如果能恢复到原来的状态,则说明系统稳定. 二.系统稳定性判断 脉冲信 ...
- matlab 用古典雅可比方法求矩阵特征根 (仅使用基础函数)
我们先看看<数值计算方法>这本书上关于古典雅可比方法的例题: %author FoddcusL FAFU %The Jacobi For root%输入:目标矩阵(input):目标接近的 ...
- 编译好的GDAL库,支持ECW格式,支持proj,支持geos
这几天因为工作需要,把GDAL重新编译了一下,现支持ECW格式,即可以用GDALOPEN读取JPEG2000格式的影像数据;编译时也添加了对geos和proj的支持. 内含3个文件夹,分别是gdal, ...
- Java实验——定义一个类,该类中包含以下几个方法(静态):实现两个字符串数组的逆序排序,输出结果为字符串数组;求两个整形数组的交集;求两个浮点型数组的并集;
目录 一.实现两个字符串数组的逆序排序,输出结果为字符串数组 解题思路: 具体代码: 运行截图: 二.求两个整形数组的交集 具体代码: 运行截图: 三.求两个浮点型数组的并集 解题思路: 具体代码: ...
- C/C++语言实现一百个数组之间求任意数组的交集和并集
1:背景要求 1.C++ 2.给定一百个数组,求任意两个集合之间的交集和并集(最好能按照学生的方式做,不被发现的那种)撰写设计书,主要内容包括(500-1000字): ①背景介绍或实验目的: ②功能设 ...
最新文章
- 2021-04-24 人工智能必读书单 Python
- centos 6.5配置samba
- 在eclipse中创建maven项目错误的解决方法:Could not resolve archetype org.apache.maven.archetypes:maven-archetype-qu
- asterisk1.8启动信息分析(未完)
- 数学的威力有多大?足以震慑全球......
- Mac OS下Tomcat native-APR的安装
- 关于MFC下多线程,在线程中创建非模态对话框以及消息传递
- VC里一些容易混淆的地方(转)
- 反编译工具ILSpy的下载与使用
- python3 yield from用法
- ������ʾ����
- 高客单价项目,适合新手操作的网络项目
- 嵌入式BootLoader技术内幕(一)
- 第一次作业:阅读与准备工作
- IDL的高效编程(六)
- 逃离996的最强出路!
- 被困在深海沉船近3天,他奇迹般地活了下来!
- 计算机中cmos设置程序,计算机CMOS设置详解.doc
- k均值聚类(k-means)
- 鼠标右键编辑html文档,鼠标右键菜单设置方法【详细步骤】
热门文章
- Centos7 出现xxx不在sudoers文件中的解决方案
- 分摊的意思_十年分摊是什么意思
- 世界在变化刷脸支付一直奋进
- 前端单元测试到底要怎么写?看这一篇就够了
- 第五届蓝桥杯——java c组 1/a 的分数称为单位分数
- USACO2008游荡的奶牛
- BAPI_PO_CREATE1--单价增大10倍问题
- 关于H5请求数据报跨域问题记录
- python面向对象基础-01
- 对输入的两个分数选择‘+’、‘-’、‘*’、‘/’四则运算,并以分数形式输出结果。输入:第一行先输入整数T,表示总共有T组数据。接下来共T行,每行输入分数形式的算术表达式。	输出:最简分数形