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

工具: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打开,显示如下

时间: 2024-10-12 14:00:02

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

-05 08:57 ARCGIS地统计学计算文件后缀名为.shp文件制作

2011-07-05 08:57 ARCGIS地统计学计算文件后缀名为.shp文件制作 ARCAMP软件要进行地统计计算的文件后格式后缀名必须为.shp的文件,网上介绍的方法复杂难懂,那么制作.shp的文件怎么制作呢? 1.打开ArcMAP软件,点菜单栏“工具”下拉菜单中的“添加XY数据”,出现“添加XY数据”对话框,添加电子表格数据 “.dbf3”格式文件(参考“用ArcGIS9.3中标出地图中GPS点方法”第3点),点确定,GPS采集点出来了. 2.右单击图层栏刚才“添加XY数据”进来的文件

Arcgis Engine建立一个shp文件

这几天同事要求我在原来的项目的基础上添加一个生成shp文件的小功能,大体内容就是他给我提供文件夹路径名和图斑各个点的坐标(只是一个环),根据这些参数来生成一个shp文件.这个功能在刚来公司的时候实现过一次,但是后面一直没用就给忘记了(所以写的代码一定不要删呀,以后肯定用的着). 下面我贴一下建立shp文件的代码,欢迎大家指点. 1: private void CreateShpFile() 2: { 3: IWorkspaceFactory pWF = new ShapefileWorkspac

结合C++和GDAL实现shapefile(shp)文件的读取

工具:vs2012+GDAL 2.0 数据:中国省界SHP文件bou2_4p.shp 包含头文件: #include "ogrsf_frmts.h" 代码: int main(){ GDALAllRegister(); GDALDataset *poDS; CPLSetConfigOption("SHAPE_ENCODING",""); //解决中文乱码问题 //读取shp文件 poDS = (GDALDataset*) GDALOpenEx(&

GDAL1.11版本对SHP文件索引加速测试

GDAL库中对于矢量数据的读取中可以设置一些过滤器来对矢量图形进行筛选,对于Shapefile格式来说,如果数据量太大,设置这个过滤器时间慢的简直无法忍受.好在GDAL1.10版本开始支持读取Shapefile文件的空间索引文件(.sbn / .sbx)来进行加速.下面就同样的数据同样的代码来对GDAL1.9.0和GDAL1.11.0两个版本进行测试时间,比较下速度(看到结果你肯定会张大嘴巴的--). 首先是测试代码,功能很简单,两个shp文件,一个点文件,一个面文件.面文件很大,需要根据点文件

mfc 通过 MapWinGIS 控件读取 shp 文件

记录一下这两天努力的收获,刚来这个公司一周不到,这几天一直在看GIS相关的东西. 首先调通了第一个android 通过 jni 调用 C/C++代码 然后花了两天做了一个mfc 用 MapWinGIS.ocx 控件读取shp格式文件 哎...回头看看,这么简单的东西竟然用了两天时间,简直太浪费时间了 没办法,新手上路不容易呀! 参考原文:http://blog.csdn.net/clever101/article/details/5286575 下面记录一下读取 shp文件的操作过程: MapW

arcgis10.2转shp文件中文乱码问题解决方案

从ArcGIS的数据源入手,自己升级ArcGIS for Desktop到10.2.0,然后用该版本ArcGIS软件重新导出数据,竟然还是乱码.经咨询ArcGIS技术支持,技术支持说必须保证shp文件中有一个.cpg文件.必须要用ArcGIS for Desktop 10.2.1及 以上版本,问题又滚回方案(1)了. 后在ArcGIS知乎平台上看到一篇关于shapefile与字符集编码设置的博客,按照其提供的方案,设置注册表默认字符,即可解决中文乱码问题.其关键步奏如下: 'dbfDefault

PostGIS导入导出SHP文件常用命令

SHP导入POSTGIS数据库 引用 直接导入数据库 shp2pgsql  -I -s 2437 -W GBK shop_point.shp public.ntable | psql -U postgres -w -d jwsz 导出sql再导入数据库 shp2pgsql -s "2437" -W "GBK" -I D:\shop_point.shp newTable > D:\shop_point.sql psql -U postgres -f D:/sho

空间矢量数据(.shp文件)之JAVA操作

Shape文件由ESRI开发,一个ESRI(Environmental Systems Research Institute)的shape文件包括一个主文件,一个索引文件,和一个dBASE表.其中主文件的后缀就是.shp. Shape文件已经是一种开源的文件格式,官方早在2006年就出版了相应的白皮书,对整个文件的读写进行了详细的说明,这样也使得Shape文件应用的更加广泛.本人在移动GIS开发的过程中,借机对.shp文件进行了研究,并简单实现了通过JAVA语言对.shp文件的读写操作功能. =

将autocad的.dwg文件转换为.shp文件

最近用到ArcGIS控件来做地图显示,最初是用过加载mxd文件来显示地图的,但是每次放大缩小或拖动等操作,地图都与重新加载一次,出现闪屏或延迟比较严重的现象,无法完成实时显示元素的效果.为此我换成显示shp格式的文件后,效果明显提升好多.但是由dwg文件得到shp文件,网上介绍了N多方法,但实际操作的过程中由于缺少安装软件或其他原因出现了各种状况,下面我将自己的转换过程跟大家分享一下: 工具:AutoCAD 2007   ArcGIS 10.1   待转换的dwg文件 过程:DWG→DXF→SH