Всем читающим привет!
Прошу высказать предложения по оптимизации поиска идентичной геометрии любого типа в слое. Например, есть слой, на вход метода подается геометрия, в слое требуется найти идентичную входной (если она там есть, конечно).
Через ISpatialFilter и пространственный запрос, соответственно, у меня не получается - нет нужного esriSpatialRelEnum. Сейчас задача решается так:
long <имя класса>::mmFindGeometry(IFeatureClass *ipFC,IGeometry *ipGeom,IFeature **ipF)
{
bool EmptyGeom,Cmp;
long FeatCount,i;
ESRI::ArcGIS::Geodatabase::IFeature *ipFeat;
ESRI::ArcGIS::Geodatabase::IFeatureCursor *ipFCur;
ESRI::ArcGIS::Geometry::IGeometry *ipG;
ESRI::ArcGIS::Geometry::IRelationalOperator *ipRelOp;
ISpatialReference *ipSR; // объект для проверки наличия пространственной привязки
// проверка на наличие пространственной привязки и непустого значения геометрии
EmptyGeom = ipGeom->get_IsEmpty();
if(EmptyGeom == true) return 100007;
ipSR = ipGeom->get_SpatialReference();
if(ipSR == 0) return 100009;
FeatCount = ipFC->FeatureCount(0); // получение кол-ва строк в классе
if(FeatCount < 0) FeatCount = 0;
ipFCur = ipFC->Search(0,false);
for(i=0;i<FeatCount;i++) // перебор все геометрий с поиском идентичной
{
ipFeat = ipFCur->NextFeature();
ipG = ipFeat->get_Shape();
ipRelOp = dynamic_cast<ESRI::ArcGIS::Geometry::IRelationalOperator*>(ipG);
Cmp = ipRelOp->Equals(ipGeom);
if(Cmp == true) // найдена первая идентичная входной геометрия
{*ipF = ipFeat;return 0;}
}
return 100010;
}
Знаю, что задача решается с помощью метода put_SpatialRelDescription(...), но так и не разобрался как!
. Решение в несколько запросов с разными esriSpatialRelEnum не принимаются - мне это не нравиться . У кого какие мнения? Кто-нибудь работал с SpatialRelDescription(...)?