编译命令:g++ main.cpp -lgdal

调用命令:./a.out  输出shp名称 操作选项

注释:操作选项(1:多边形A - 多边形B,2:B - A,3:A和B的交集部分)

#include "ogrsf_frmts.h"
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{const char *pszDriverName = "ESRI Shapefile";char *pShpName = argv[1];GDALDriver *poDriver;GDALAllRegister();poDriver = GetGDALDriverManager()->GetDriverByName(pszDriverName );if( poDriver == NULL ){printf( "%s driver not available.\n", pszDriverName );exit( 1 );}GDALDataset *poDS;char cShpName[20];sprintf(cShpName, "%s.shp", pShpName);poDS = poDriver->Create( cShpName, 0, 0, 0, GDT_Unknown, NULL );if( poDS == NULL ){printf( "Creation of output file failed.\n" );exit( 1 );}OGRLayer *poLayer;poLayer = poDS->CreateLayer( pShpName, NULL, wkbPolygon, NULL );if( poLayer == NULL ){printf( "Layer creation failed.\n" );exit( 1 );}OGRFieldDefn oField( "Name", OFTString );oField.SetWidth(32);if( poLayer->CreateField( &oField ) != OGRERR_NONE )  {printf( "Creating Name field failed.\n" );exit( 1 );}char szName[33] = "hello geos";OGRFeature *poFeatureG1, *poFeatureG2, *poFeatureG3;poFeatureG3 = OGRFeature::CreateFeature(poLayer->GetLayerDefn());poFeatureG3->SetField("Name", szName);// Geometry1poFeatureG1 = OGRFeature::CreateFeature( poLayer->GetLayerDefn() );OGRPolygon* pPolygon1 = new OGRPolygon();OGRLinearRing* pLinearRing = new OGRLinearRing();pLinearRing->addPoint(0, 0);pLinearRing->addPoint(2, 0);pLinearRing->addPoint(2, 2);pLinearRing->addPoint(0, 2);pLinearRing->addPoint(0, 0);pPolygon1->addRing(pLinearRing);poFeatureG1->SetGeometry( pPolygon1 ); OGRGeometry* baseGeo = poFeatureG1->GetGeometryRef();// Geometry2poFeatureG2 = OGRFeature::CreateFeature(poLayer->GetLayerDefn());OGRPolygon* pPolygon2 = new OGRPolygon();OGRLinearRing* pLinearRing2 = new OGRLinearRing();pLinearRing2->addPoint(1, 0);pLinearRing2->addPoint(3, 0);pLinearRing2->addPoint(3, 3);pLinearRing2->addPoint(1, 3);pLinearRing2->addPoint(1, 0);pPolygon2->addRing(pLinearRing2);poFeatureG2->SetGeometry(pPolygon2);OGRGeometry* otheGeo = poFeatureG2->GetGeometryRef();int choose = atoi(argv[2]);OGRGeometry* pRet = NULL;switch(choose){case 1:pRet = baseGeo->Difference(otheGeo);   // baseGeo - otheGeobreak;case 2:pRet = otheGeo->Difference(baseGeo);   // otheGeo - baseGeobreak; case 3:pRet = baseGeo->Intersection(otheGeo); // baseGeo 和 otheGeo 相交break;default:break;}poFeatureG3->SetGeometry(pRet);if( poLayer->CreateFeature( poFeatureG3 ) != OGRERR_NONE ){printf( "Failed to create feature in shapefile.\n" );exit( 1 );}OGRFeature::DestroyFeature( poFeatureG1 );OGRFeature::DestroyFeature( poFeatureG2 );OGRFeature::DestroyFeature( poFeatureG3 );GDALClose( poDS );
}

OGR示例:写shp,求面与面的交和差操作相关推荐

  1. 像“今日头条”这样的模块滑动特效,大概咋写,求指点 ?---酷课堂iOS交流群问答整理(201805期)

    酷课堂iOS交流群 我们是一个什么样的组织: 酷课堂iOS交流群,聚集了一群热爱技术.有趣.有料,平均Q龄在10年以上的"老司机",他们遍布在全国/球各地,有知名企业iOS工程师. ...

  2. 面试题1:一个人岁数的3次方是四位数,四次方是六位数,并知道此人岁数的3次方和4次方用遍了0--9十个数字,请编程写程序求此人的岁数

    代码如下: package com.javase.test; /**  * @author jt  *2015-10-21 下午5:14:46  *  */ //一个人岁数的3次方是四位数,四次方是六 ...

  3. 【小米校招笔试】假如已知有n个人和m对好友关系(存于数字r)。如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共有多少个朋友圈。

    2016年小米校招笔试第三题(西安站) 3 假如已知有n个人和m对好友关系(存于数字r).如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共 ...

  4. 大量的QT控件及示例发放,求泛滥

    大量的QT控件及示例发放,求泛滥 2017年01月13日 14:36:22 阅读数:781  在论坛中,看到一位朋友介绍http://qt-apps.org/站上有很多好的资料和示例,现在发出来,与大 ...

  5. 创建方法求两个数的最大值max2,随后再写一个求3个数的最大值的函数max3。​ 要求:在max3这个函数中,调用max2函数,来实现3个数的最大值计算

    //创建方法求两个数的最大值max2,随后再写一个求3个数的最大值的函数max3.//要求:在max3这个函数中,调用max2函数,来实现3个数的最大值计算public static int max3 ...

  6. 写一个判断方程根的C语言程序,写出求方程ax2+bx+c=0的根的算法,画出相应的程序框图,并要求输出它的实根....

    写出求方程ax2+bx+c=0的根的算法,画出相应的程序框图,并要求输出它的实根. 答案 思路分析:主要考查含参问题的讨论方法及条件嵌套结构的应用.输入三个实数a,b,c,先判断a是否为零,当a≠0时 ...

  7. python调用自己写的函数_python调用自定义函数的实例操作

    在python中,想要调用自定义函数必须先声明,然后才能调用.使用函数时,只要按照函数定义的形式,向函数传递必需的参数,就可以调用函数完成相应的功能或者获得函数返回的处理结果. (1)声明函数 pyt ...

  8. java 编辑二进制文件_java写二进制文件,不能直接编辑,该怎么操作?

    java写二进制文件,不能直接编辑,该怎么操作? 关注:138  答案:3  mip版 解决时间 2021-01-14 21:48 提问者醒不来的梦 2021-01-14 07:45 我现在想做写一个 ...

  9. 动态规划系列---求数组中两个元素差的最大值

    题目 求数组中两个元素差的最大值(后面的元素减去前面的元素):对应实际生活中的股票买卖,找出一只股票走势里面可能的最大收益: 思路 类似于求数组连续和的最大值:  保存最大差值和最小值,遍历数组,如果 ...

最新文章

  1. 你真的了解javascript吗?(一)
  2. nginx的4个学习资料
  3. java中HashMap详解
  4. python 自动控制仿真_Python自动控制鼠标操作pymouse,python
  5. 电脑故障维修:新手必看的修电脑技巧!
  6. ssl2863-石子合并【dp练习】
  7. 在JBoss AS 7上部署BroadleafCommerce 2.0
  8. 华为鸿蒙话题作文800字,关于鸿蒙OS 华为最高层发布最新通知:统一口径-华为,智能手机,鸿蒙...
  9. LeetCode 1228. 等差数列中缺失的数字
  10. postman发送报文时请求时间超时因为什么_面试官说不要再问我三次握手和四次挥手是什么了...
  11. 程序员的进阶课-架构师之路(14)-B+树、B*树
  12. 关于蓝桥杯的经验(本人java B 国二)
  13. 蝙蝠聊天软件显示无法连接服务器失败,蝙蝠聊天软件为什么没有来信息提示音?...
  14. linux pam认证 用户名,Linux-PAM 认证 模块
  15. 带你认识 M1、UID、CUID、FUID、UFUID
  16. svn搭建报错集合(http访问)
  17. 一本书的推荐序——写在《思考的乐趣》即将上市之际
  18. 如何快速而准确地进行 IP 和端口信息扫描:渗透测试必备技能
  19. 02 AC-DC整流器(AC Rectifer)简介
  20. php搞笑证件,怎么制作搞笑证件 网络搞笑证件制作的软件怎么用的

热门文章

  1. linux内核3.14.4,Linux内核4.14.14,4.9.77,4.4.112和3.18.92更新发布
  2. 计算机应用能力文字录入,2017全国专业技术人员计算机应用能力考试题库-Excel,Word,XP.pdf...
  3. 多路串口服务器的应用及应用范围介绍
  4. 【渝粤教育】广东开放大学 动画原画设计 形成性考核 (22)
  5. 【渝粤题库】陕西师范大学292071社会统计学作业(高起专)
  6. 计算机新入学教案,计算机应用 新教案(1-6周).doc
  7. 减小程序规模!稀疏数组Sparsearray,数据结构二维数组与稀疏数组转换,Java实现
  8. 中文转化成拼音_五笔已经淘汰,拼音到达瓶颈,百度重拳出击,全新输入方式来袭!...
  9. airpods耳机敲击没反应_iOS11.2.6造成AirPods耳机出现奇怪问题 网友:解决方法很简单...
  10. C++输出一句话里面第一个单词并大写