OGR示例:写shp,求面与面的交和差操作
来源:互联网 发布:淘宝页头怎么设置 编辑:程序博客网 时间:2024/04/28 15:06
编译命令: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); // Geometry1 poFeatureG1 = 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(); // Geometry2 poFeatureG2 = 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 - otheGeo break; case 2: pRet = otheGeo->Difference(baseGeo); // otheGeo - baseGeo break; 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 );}
1 0
- OGR示例:写shp,求面与面的交和差操作
- OGR对shp文件的操作
- GDAL-OGR对shp文件的操作
- 单链表的和、交、差操作总结
- 面试题之求两个日期之间的天数差
- 去除shp面要素的内环
- 已序集合求交运算和求差运算
- 求分数的和与差
- 求集合(用有序单链表表示)的并、交和差运算
- PHP的文件操作与算法实现的面试题示例
- 集合的并、交和差运算
- [面试题] 求数组两两之差绝对值最小的值
- 【转】[面试题] 求数组两两之差绝对值最小的值
- Cocoa Core Competencies 的Object creation 和IOS面试题示例:写一个NSString类的实现
- Cocoa Core Competencies 的Object creation 和IOS面试题示例:写一个NSString类的实现
- Cocoa Core Competencies 的Object creation 和IOS面试题示例:写一个NSString类的实现
- Cocoa Core Competencies 的Object creation 和IOS面试题示例:写一个NSString类的实现
- Any和Some和ALL 的使用,以及交操作差操作的嵌套查询(Oracle)
- [bzoj4443][Scoi2015]小凸玩矩阵(二分答案+二分图最大匹配)
- Android 仿qq侧拉菜单
- 【CF 578D】LCS again
- presentViewController 、pushViewController和presentModalViewController
- pythonchallenge(1)
- OGR示例:写shp,求面与面的交和差操作
- jQuery Mobile 列表内容
- socket是什么意思
- codeforces 670D2
- 安卓知识体系
- Android 仿联系人字母索引
- 【幻化万千戏红尘】qianfengDay08-java基础学习:修饰符、重写、继承、抽象、递归、final
- 求平均成绩 hd 2023
- IOS警告:Property access result unused - getters should not be used for side effects