创建shp文件
#include "ogrsf_ftmts.h"
#include<vector>
#include<random>
#include "ogr_srs_api.h"
void Writing2Shp(const char *output_shp){
GDALAllRegister();
const char *pszName = "ESRI Shapefile";
GDALDriver *poDriver;
poDriver = GetGDALDriverManager()->GetDriverByName(pszDriverName);
if (poDriver == NULL)
{
printf("%s driver not available.\n", pszDriverName);
exit(1);
}
GDALDataset *poDS = poDriver->Create("自定义shp文件名称,别忘了加shp后缀",0,0,0,GDT_Unknow,NULL);
if (poDS == NULL)
{
printf("Creation of output file failed.\n");
exit(1);
}
}
定义shp文件属性
OGRLayer* poLayer;
OGRSpatialReference oSRS;
oSRS.importFromEPSG(4326);
poLayer = poDS->CreateLayer("自定义图层名称", &oSRS, wkbPoint, NULL);
if (poLayer == NULL)
{
printf("Layer creation failed.\n");
exit(1);
}
OGRFieldDefn oField1("Id", OFTInteger);
oField1.SetWidth(2);
if (poLayer->CreateField(&oField1) != OGRERR_NONE)
{
printf("Creating Id field failed.\n");
exit(1);
}
OGRFieldDefn oField2("X", OFTReal);
oField2.SetPrecision(2);
if (poLayer->CreateField(&oField2) != OGRERR_NONE)
{
printf("Creating X field failed.\n");
exit(1);
}
OGRFieldDefn oField3("Y", OFTReal);
oField3.SetPrecision(2);
if (poLayer->CreateField(&oField3) != OGRERR_NONE)
{
printf("Creating Y field failed.\n");
exit(1);
}
随机生成五十个点
std::vector<double> x;
std::vector<double> y;
std::default_random_engine generator;
std::uniform_real_distribution<double> distribution(0.0, 100.0);
for (int i = 0; i < 50; i++) {
x.push_back(distribution(generator));
y.push_back(distribution(generator));
OGRFeature* poFeature;
poFeature = OGRFeature::CreateFeature(poLayer->GetLayerDefn());
poFeature->SetField("Id", i+1);
poFeature->SetField("X", x[i]);
poFeature->SetField("Y", y[i]);
OGRPoint pt;
pt.setX(x[i]);
pt.setY(y[i]);
poFeature->SetGeometry(&pt);
if (poLayer->CreateFeature(poFeature) != OGRERR_NONE)
{
printf("Failed to create feature in shapefile.\n");
exit(1);
}
OGRFeature::DestroyFeature(poFeature);
}