其他分享
首页 > 其他分享> > FileGDBAPI 二次查询空间数据失败解决办法

FileGDBAPI 二次查询空间数据失败解决办法

作者:互联网

问题:   坑爹得filegdb数据,只能查询一次, 第二次查询只返回2条数据

分析:  在QGIS, ArcMap中重新查看, 数据正常,

         使用FileGDB_API_1_5_1-VS2015\samples\Querying  这个库里面用例直接查也是正常.

        但是我使用得时候先统计了个数, 再执行查询,  于是出问题得代码出现了,:

int Searchtest(Table &table)
{
	fgdbError   hr;
	wstring     errorText;
	EnumRows attrQueryRows, attrQueryRows2;

	FileGDBAPI::Row pRow2, pRow;
	int nCount = 0;
	int oid = 0;

	FileGDBAPI::Envelope env;
	table.GetExtent(env);
	if ((hr = table.Search(L"OBJECTID", L"", env, true, attrQueryRows)) != S_OK)
	{
		wcout << "An error occurred while performing the attribute query." << endl;
		ErrorInfo::GetErrorDescription(hr, errorText);
		wcout << errorText << "(" << hr << ")." << endl;
		return -1;
	}
	//FileGDBAPI::Row pRow;

	while ((hr = attrQueryRows.Next(pRow)) == S_OK)
	{
		++nCount;
		hr = pRow2.GetOID(oid);
	}
	attrQueryRows.Close();
	table.GetExtent(env);
	if ((hr = table.Search(L"*", L"", env, true, attrQueryRows2)) != S_OK)
	{
		wcout << "An error occurred while performing the attribute query." << endl;
		ErrorInfo::GetErrorDescription(hr, errorText);
		wcout << errorText << "(" << hr << ")." << endl;
		return -1;
	}
	while ((hr = attrQueryRows2.Next(pRow2)) == S_OK)
	{
		++nCount;
		hr = pRow2.GetOID(oid);
	}

}

attrQueryRows2和attrQueryRows遍历结果应该一样, 但是结果就是完全attrQueryRows2 只有2条,attrQueryRows有537条[正确结果],  

结合测试说得, 他的机器上这个数据在ArcGIS中缩放会消失(我机器不消失), 猜测空间索引有问题, 那么只需要找到重建空间索引得API即可,  但是FileGDBAPI 里面没得, 然后有两个这样得方法

没错这个方法设置为false会重新整理空间索引,  如果不放心就先设置为true,在设置为false,  这可能需要一些时间,  但是对于我这里得数据做完这个后就一切正常了,  再次吐槽一下坑爹得filegdb

 

标签:解决办法,FileGDBAPI,attrQueryRows2,空间数据,attrQueryRows,int,env,table
来源: https://blog.csdn.net/chijingjing/article/details/121221056