#include <ogr_geometry.h> //Geometry对象
#include <ogr_spatialref.h> //Spatial Reference
#include <ogr_feature.h> //Feature Class Definition
#include <ogrsf_frmts.h> //Layer\DataSource\Drivers
#include <ogr_api.h>
int main() {
CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "NO");
CPLSetConfigOption("SHAPE_ENCODING", "UTF-8");
//OGRRegisterAll();
GDALAllRegister();
//OGRSFDriverRegistrar* pRegistrar = OGRSFDriverRegistrar::GetRegistrar();
//GDALDriver* ogrDriver = pRegistrar->GetDriverByName("ESRI Shapefile");
GDALDriver* shpDriver = GetGDALDriverManager()->GetDriverByName("ESRI Shapefile");
if (shpDriver == NULL) {
printf("%s\n", "ESRI Shapefile驱动创建失败!");
return 0;
}
GDALDataset* gdalDataSet = shpDriver->Create("..\\shp\\TestPoint.shp", 0, 0, 0, GDT_Unknown, NULL);
cout << gdalDataSet << endl;
OGRSpatialReference oSR;
//osr.SetWellKnownGeogCS("WGS84");
if (oSR.importFromEPSGA(4326) != OGRERR_NONE) {
printf("%s\n", "坐标系创建失败!");
return -1;
}
char** papszOptions = NULL;
papszOptions = CSLSetNameValue(papszOptions, "ENCODING", "UTF-8");
OGRLayer* shipLayer = gdalDataSet->CreateLayer("ship", &oSR, wkbPoint, papszOptions);
//创建字段
OGRFieldDefn idField("ID", OFTInteger);
idField.SetWidth(8);
shipLayer->CreateField(&idField);
OGRFieldDefn nameField("NAME", OFTString);
nameField.SetWidth(16);
shipLayer->CreateField(&nameField);
OGRFieldDefn mmsiField("MMSI", OFTString);
mmsiField.SetWidth(16);
shipLayer->CreateField(&mmsiField);
OGRFeature* ogrFeature = OGRFeature::CreateFeature(shipLayer->GetLayerDefn());
ogrFeature->SetField("ID", 1001);
ogrFeature->SetField("NAME", "航空母舰");
ogrFeature->SetField("MMSI", "401956542");
OGRPoint ogrPointI;
ogrPointI.setX(1.3);
ogrPointI.setY(1.6);
ogrFeature->SetGeometry(&ogrPointI);
shipLayer->CreateFeature(ogrFeature);
OGRFeature::DestroyFeature(ogrFeature);
return 0;
}
打开QGIS查看一下shp文件有什么信息
如果出现乱码,则设置一下QGIS的编码


确实插入了一个点

该代码示例演示了如何使用C++和GDAL库创建ESRI Shapefile,并向其中添加点几何信息。首先,设置编码选项,然后注册GDAL驱动并创建Shapefile数据集。接着,定义坐标系为WGS84,并创建一个名为ship的点图层。之后,创建字段ID、NAME和MMSI,并插入一条包含地理坐标(1.3,1.6)的记录。最后,保存并关闭数据集。
7442

被折叠的 条评论
为什么被折叠?



