码迷,mamicode.com
首页 > 编程语言 > 详细

结合C++和GDAL实现shapefile(shp)文件的创建和写入

时间:2015-11-12 21:51:08      阅读:2304      评论:0      收藏:0      [点我收藏+]

标签:

工具:vs2012+GDAL 2.0

包含头文件:

#include "ogrsf_frmts.h"

int main()
{
const
char *pszDriverName = "ESRI Shapefile"; GDALDriver *poDriver; GDALAllRegister(); poDriver = GetGDALDriverManager()->GetDriverByName(pszDriverName ); if( poDriver == NULL ) { printf( "%s driver not available.\n", pszDriverName ); return 0; } GDALDataset *poDS; poDS = poDriver->Create("d:/newShp.shp", 0, 0, 0, GDT_Unknown, NULL ); //创建shp文件 if( poDS == NULL ) { printf( "Creation of output file failed.\n" ); return 0; } OGRLayer *poLayer; poLayer = poDS->CreateLayer( "point_out", NULL, wkbPoint, NULL ); if( poLayer == NULL ) { printf( "Layer creation failed.\n" ); return 0; } OGRFieldDefn idField("ID",OFTReal); OGRFieldDefn firstField("NAME",OFTInteger); OGRFieldDefn secondField("X",OFTReal); OGRFieldDefn thirdField("Y",OFTReal); idField.SetWidth(32); firstField.SetWidth(32); secondField.SetWidth(32); thirdField.SetWidth(32); poLayer->CreateField(&idField); poLayer->CreateField(&firstField); poLayer->CreateField(&secondField); poLayer->CreateField(&thirdField); int x, y; int a=10,b=100; for(int i=1;i<=10;i++) { OGRFeature *poFeature; poFeature = OGRFeature::CreateFeature( poLayer->GetLayerDefn() ); poFeature->SetField("ID",i); poFeature->SetField("NAME",i); x=(rand() % (b-a))+ a; y=(rand() % (b-a))+ a; poFeature->SetField("X",x); poFeature->SetField("Y",y); OGRPoint pt; pt.setX( x ); pt.setY( y ); poFeature->SetGeometry( &pt ); if( poLayer->CreateFeature( poFeature ) != OGRERR_NONE ) { printf( "Failed to create feature in shapefile.\n" ); return 0; } OGRFeature::DestroyFeature( poFeature ); } GDALClose( poDS ); return 1;
}

这样,就会在d盘根目录生成一个newShp.shp的文件,用arcgis打开,显示如下

技术分享技术分享

结合C++和GDAL实现shapefile(shp)文件的创建和写入

标签:

原文地址:http://www.cnblogs.com/denny402/p/4960260.html

(1)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!