美文网首页
C++和GDAL实现shapefile(shp)文件的创建

C++和GDAL实现shapefile(shp)文件的创建

作者: 有事没事扯扯淡 | 来源:发表于2021-01-13 15:58 被阅读0次
#include "ogrsf_frmts.h"
#include <iostream>
#include <qgstininterpolator.h>
#include <QtCore/QList>


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("VALUE", 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 = 1000;
    for (int i = 1; i <= 30; i++)
    {
        OGRFeature* poFeature;
        poFeature = OGRFeature::CreateFeature(poLayer->GetLayerDefn());
        poFeature->SetField("ID", i);

        std::cout << "input x:";
        std::cin >> x;
        std::cout << "input y:";
        std::cin >> y;
        poFeature->SetField("X", x);
        poFeature->SetField("Y", y);

        int value;
        std::cout << "input value:";
        std::cin >> value;
        poFeature->SetField("VALUE", value);
        
        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;
}

相关文章

网友评论

      本文标题:C++和GDAL实现shapefile(shp)文件的创建

      本文链接:https://www.haomeiwen.com/subject/ketsnktx.html