一、准备
1、GDAL3.8.1
2、VS 2022
二、gdb属性域获取
//这里直接使用OpenFileGDB驱动,该版本已基本上支持FIleGDB的功能。
//如果gdal库集成FIleGDB的SDK,则可以使用FileGDB。
GDALDriverH hDriver = GDALGetDriverByName("OpenFileGDB");
auto path = "C:/Users/Desktop/test.gdb";
OGRDataSourceH ds = OGR_Dr_Open(hDriver, path.c_str(), true);
//根据名字获取图层
auto layer = OGR_DS_GetLayerByName(ds, "t");
auto fdef = OGR_L_GetLayerDefn(layer);
auto num = OGR_FD_GetFieldCount(fdef);
//属性域需要gdal3.3.0以上版本才支持
for (int i = 0; i < num; ++i)
{
auto fldDef = OGR_FD_GetFieldDefn(fdef, i);
const char* domainName = OGR_Fld_GetDomainName(fldDef);
if (domainName == NULL) {
continue;
}
OGRFieldDomainH domain = GDALDatasetGetFieldDomain(ds, domainName);
if (domain == NULL) {
continue;
}
switch (OGR_FldDomain_GetDomainType(domain))
{
//编码值属性域
case OFDT_CODED:
{
const OGRCodedValue* coded_value = OGR_CodedFldDomain_GetEnumeration(domain);
while (coded_value && coded_value->pszCode)
{
//编码值
auto code1 = coded_value->pszCode;
//所对应描述值
auto value1 = coded_value->pszValue;
coded_value++;
}
break;
}
//范围属性域
case OFDT_RANGE:
break;
case OFDT_GLOB:
break;
}
}