一、准备
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;
		}
	}
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐