创建shp文件

// gdal_sample.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "gdal_version.h"
#include "gdal_priv.h"
#include "gdal.h"
#include <iostream>
#include "ogrsf_frmts.h"
#include "ogrsf_frmts/shape/ogrshape.h"

#define DYZ_DEBUG_SWITCH "ON"
#if 1
#define DYZ_TEST_FILE_PATH  "D:\\code\\gdal-2.3.0\\x64\\Debug\\"
#define DYZ_TEST_DWG_FILE   DYZ_TEST_FILE_PATH "jiaju.shp"
#define DYZ_TEST_SAVE_FILE   DYZ_TEST_FILE_PATH "save.shp"
#else
#define DYZ_TEST_DWG_FILE   DYZ_TEST_FILE_PATH "jiaju.shp"
#define DYZ_TEST_DWG_FILE   DYZ_TEST_FILE_PATH "shoudongjiaju.dxf"
#define DYZ_TEST_DWG_FILE   DYZ_TEST_FILE_PATH "renwutu.dxf"
#define DYZ_TEST_DWG_FILE   DYZ_TEST_FILE_PATH "wolunxiang.dwg"
#endif

int main()
{
    GDALAllRegister();

    CPLSetConfigOption("CPL_DEBUG", DYZ_DEBUG_SWITCH);
    CPLSetConfigOption("GDAL_DATA", DYZ_TEST_FILE_PATH);
    CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "NO");
    CPLSetConfigOption("SHAPE_ENCODING", "CP936");

    const char*  FilePath = DYZ_TEST_SAVE_FILE;
    //定义驱动  
    const char *pszDriverName = "ESRI Shapefile";
    GDALDriver * poDriver = GetGDALDriverManager()->GetDriverByName(pszDriverName);
    if (poDriver == NULL)
    {
        printf("%s driver not available.\n", pszDriverName);
        return 0;
    }
    GDALDataset *poDS;
    //创建filepath路径的文件  
    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("", NULL, wkbUnknown, NULL);
    if (poLayer == NULL)
    {
        printf("创建图层失败.\n");
        return -3;
    }

    //创建属性字段  
    //定义属性字段code、type和name  
    OGRFieldDefn codeField("code", OFTInteger);
    OGRFieldDefn typeField("type", OFTString);
    OGRFieldDefn nameField("name", OFTString);
    //设置code和type字段的宽度  
    codeField.SetWidth(32);
    typeField.SetWidth(32);
    nameField.SetWidth(100);

    //创建字段  
    if (poLayer->CreateField(&codeField) != OGRERR_NONE)
    {
        printf("创建字段codeField失败.\n");
        return -4;
    }
    if (poLayer->CreateField(&typeField) != OGRERR_NONE)
    {
        printf("创建字段codeField失败.\n");
        return -5;
    }
    if (poLayer->CreateField(&nameField) != OGRERR_NONE)
    {
        printf("创建字段name失败.\n");
        return -6;
    }


    int idx = 0;
    for (; idx < 10 ;++idx)
    {
        //创建第i个点  
        OGRFeature *poFeature = OGRFeature::CreateFeature(poLayer->GetLayerDefn());

        //设置第i条线的属性  
        poFeature->SetField("code", idx);
        poFeature->SetField("type", "type");
        poFeature->SetField("name", "name");

        //定义Point,并设置其XY坐标  
        OGRPoint *poPoint = new OGRPoint();
        poPoint->setX(idx);
        poPoint->setY(idx);

        poFeature->SetGeometry(poPoint);

        if (poLayer->CreateFeature(poFeature) != OGRERR_NONE)
        {
            printf("创建point失败.\n");
            return -7;
        }

        OGRFeature::DestroyFeature(poFeature);
    }

    GDALClose(poDS);

    return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值