#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的编码
确实插入了一个点