使用GDAL库读取GDB矢量数据属性域

一、准备
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;
		}
	}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值