GetName
virtual const char *GetName() 此方法与 C 函数 OGR_L_GetName() 相同
返回图层名称
返回: 图层名称(不得释放)
// 获取第一个图层
OGRLayer* poLayer = poDS->GetLayer(0);
// 获取图层的名字
const char* layerName = poLayer->GetName();
// 打印图层的名字
printf("Layer name: %s\n", layerName);
GetGeomType
virtual OGRwkbGeometryType GetGeomType () 此方法与 C 函数 OGR_L_GetGeomType() 相同
返回图层几何类型
返回: 几何类型
OGRFeature *poFeature;
poLayer->ResetReading();
poFeature = poLayer->GetNextFeature();
if (poFeature != NULL) {
OGRwkbGeometryType eType = poFeature->GetGeomType();
printf("Geometry Type: %s\n", OGRGeometryFactory::getGeometryName(eType));
OGRFeature::DestroyFeature(poFeature);
}
OGRGeometryFactory::getGeometryName
用于获取图层支持的几何类型名称的方法。对于每种几何类型(如点、线、面等),GDAL/OGR中都有一个预定义的名称,可以通过此方法获取它们的名称
OGRwkbGeometryType 对应的 字符串
- wkbUnknown: "Unknown"
- wkbPoint: "Point"
- wkbLineString: "LineString"
- wkbPolygon: "Polygon"
- wkbMultiPoint: "MultiPoint"
- wkbMultiLineString: "MultiLineString"
- wkbMultiPolygon: "MultiPolygon"
- wkbGeometryCollection: "GeometryCollection"
- wkbNone: "None"
GetLayerDefn
virtual OGRFeatureDefn *GetLayerDefn() = 0 此方法与 C 函数 OGR_L_GetLayerDefn() 相同
此方法与 C 函数 OGR_L_GetLayerDefn() 相同
返回: 功能定义
GDALDataset *poDS = (GDALDataset *)GDALOpenEx("data.shp", GDAL_OF_VECTOR, NULL, NULL, NULL);
//获取第一个图层
OGRLayer *poLayer = poDS->GetLayer(0);
//获取图层的定义
OGRFeatureDefn *poDefn = poLayer->GetLayerDefn();
FindFieldIndex
virtual int FindFieldIndex(const char *pszFieldName, int bExactMatch) 此方法与 C 函数 OGR_L_FindFieldIndex() 相同
查找图层中字段的索引
返回: 字段索引,如果字段不存在,则为 -1
GDALDataset *poDS = (GDALDataset *) GDALOpenEx("path/to/shapefile.shp", GDAL_OF_VECTOR, NULL, NULL, NULL);
// 获得第一个图层
OGRLayer *poLayer = poDS->GetLayer(0);
// 获得字段"NAME"的下标索引
int nameFieldIndex = poLayer->FindFieldIndex("NAME", TRUE);
if (nameFieldIndex < 0) {
// 找不到字段
cout << "Field " << fieldName << " not found!" << endl;
} else {
// 找到字段
cout << "Field " << fieldName << " found! Index = " << nameFieldIndex << endl;
}
GetSpatialRef
virtual OGRSpatialReference *GetSpatialRef() 此方法与 C 函数 OGR_L_GetSpatialRef() 相同
获取此图层的空间参考系统
返回: 空间参考,如果没有空间参考,则为 NULL
// 获取第一个图层
OGRLayer *poLayer = poDS->GetLayer(0);
// 获取空间参考
OGRSpatialReference *poSR = poLayer->GetSpatialRef();
// 打印坐标系信息
char *pszWkt = nullptr;
posR.exportToWkt(&pszWkt);
printf("WKT: %s\n", pszWkt);
CPLFree(pszWkt);
GetSupportedSRSListRetType & GetSupportedSRSList
virtual const GetSupportedSRSListRetType &GetSupportedSRSList(int iGeomField)
获取支持的 SRS 列表
参数:
iGeomField – 几何字段索引。
返回: 支持的 SRS 列表
在大多数情况下,这个索引值应该为0,因为大多数数据集只有一个几何图形字段。但是,如果您的数据集包含多个几何图形字段,则可以使用不同的索引值来获取每个字段所支持的坐标参考系列表
OGRLayer *poLayer = poDS->GetLayer(0);
// 获取支持的空间参考系统列表
auto supportedSRSList = poLayer->GetSupportedSRSList(0);
// 输出列表中所有的空间参考系统
for (auto &srs : supportedSRSList)
{
cout << srs << endl;
}
输出
PROJCS["WGS 84 / UTM zone 48N", GEOGCS["WGS 84", DATUM["WGS_1984", SPHEROID["WGS 84",6378137,298.257223563, AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0, AUTHORITY["EPSG","8901"]],
UNIT["degree",0.0174532925199433, AUTHORITY["EPSG","9122"]],
AXIS["Latitude",NORTH],
AXIS["Longitude",EAST],
AUTHORITY["EPSG","4326"]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",105],
PARAMETER["scale_factor",0.9996],
PARAMETER["false_easting",500000],
PARAMETER["false_northing",0],
UNIT["metre",1, AUTHORITY["EPSG","9001"]],
AXIS["Easting",EAST],
AXIS["Northing",NORTH],
AUTHORITY["EPSG","32648"]]
SetActiveSRS
virtual OGRErr SetActiveSRS(int iGeomField, const OGRSpatialReference *poSRS)
更改活动的 SRS
参数:
-
iGeomField – 几何字段索引。
-
poSRS – 要使用的 SRS
返回: OGRERR_NONE成功,如果传递的SRS不在GetSupportedSRSList()中,则OGRERR_FAILURE
更改活动 SRS 会影响:
-
表示返回要素几何的 SRS,
-
表示传递特征(CreateFeature()、SetFeature()))几何形状的 SRS,
-
由 GetSpatialRef() 和 GetGeomFieldDefn()->GetSpatialRef() 返回的 SRS,
-
用于解释 SetSpatialFilter() 值的 SRS。
GDALDataset* poDS = (GDALDataset*)GDALOpenEx("test.shp", GDAL_OF_VECTOR, NULL, NULL, NULL);
// 获取第一个图层
OGRLayer* poLayer = poDS->GetLayer(0);
// 创建一个EPSG:4326的空间参考对象
OGRSpatialReference oSRS;
oSRS.importFromEPSG(4326);
// 将第一个几何字段的活动SRS设置为EPSG:4326
poLayer->SetActiveSRS(0, &oSRS);
GetFeatureCount
virtual GIntBig GetFeatureCount(int bForce = TRUE) 此方法与 C 函数 OGR_L_GetFeatureCount() 相同
获取此图层中的要素计数
参数:
bForce – 指示是否应计算计数的标志,即使计数很昂贵。
返回: 特征计数,如果计数未知,则为 -1。
OGRLayer* poLayer = poDS->GetLayer(0);
const int count = poLayer->GetFeatureCount()
printf("Feature count: %d\n", count);
GetFeatureCount()
返回的计数会考虑当前设置的空间过滤器。也就是说,如果设置了一个空间过滤器,返回的计数将仅包括满足空间过滤器条件的要素数量。如果没有设置空间过滤器,则返回的计数将是整个图层中的要素数量