#include <ogrsf_frmts.h>
#include <iostream>
using namespace std;
int main()
{
CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "NO");
CPLGetConfigOption("SHAPE_ENCODING", "UTF-8");
const char * shpFile = "Supermarket.shp";
GDALAllRegister();
GDALDataset * ds;
ds = (GDALDataset *)GDALOpenEx(shpFile, GDAL_OF_VECTOR and GDAL_OF_READONLY,NULL,NULL,NULL);
if (ds == NULL)
{
cout << "打开数据失败!" << endl;
return 0;
}
OGRLayer * lyr = ds->GetLayer(0);
lyr->ResetReading();
OGRFeatureDefn * lyrDefn = lyr->GetLayerDefn();
int fieldCount = lyrDefn->GetFieldCount();
while (true)
{
OGRFeature * feature;
feature = lyr->GetNextFeature();
if (feature == NULL)
{
cout << "数据读取结束" << endl;
break;
}
for (int i = 0;i < fieldCount;i++)
{
OGRFieldDefn * fieldDefn=feature->GetFieldDefnRef(i);
const char * fieldName= fieldDefn->GetNameRef();
OGRFieldType fieldType = fieldDefn->GetType();
switch (fieldType)
{
case OFTString:
printf("%s:%s\n", fieldName,feature->GetFieldAsString(i));
break;
case OFTReal:
printf("%s:%0.5f\n", fieldName, feature->GetFieldAsDouble(i));
break;
default:
break;
}
}
OGRPoint * point = (feature->GetGeometryRef())->toPoint();
cout << point->getX() << endl;
cout << point->getY() << endl;
}
return 0;
}
#include <ogrsf_frmts.h>
#include <iostream>
using namespace std;
int main()
{
CPLSetConfigOption("SHAPE_ENCODING", "utf-8");
GDALAllRegister();
GDALDataset * ds;
ds = (GDALDataset * )GDALOpenEx("./shp/ChinaProvince.shp", GDAL_OF_VECTOR, NULL, NULL, NULL);
if (ds == NULL)
{
cout << "文件代开失败" << endl;
}
OGRLayer * lay;
lay = ds->GetLayer(0);
if (lay == NULL)
{
cout << "获取图层失败" << endl;
}
OGRFeatureDefn * poFDefn = lay->GetLayerDefn();
int fieldCount = poFDefn->GetFieldCount();
cout << "字段遍历" << endl;
for (int i = 0;i < fieldCount;i++)
{
OGRFieldDefn * poFieldDefn = poFDefn->GetFieldDefn(i);
cout << poFieldDefn->GetNameRef() <<"\t"<<OGRFieldDefn::GetFieldTypeName(poFieldDefn->GetType())<<endl;
}
lay->ResetReading();
while (true)
{
OGRFeature * fea = lay->GetNextFeature();
if (fea == NULL)
{
break;
}
cout << fea->GetFieldAsString("NAME")<<endl;
}
system("pause");
return 0;
}