Esempio n. 1
0
        private static IEnumerable <IGeometry> GetReferenceGeometries(
            [NotNull] IObject obj,
            [NotNull] IList <IRelationshipClass> relationshipChainToFeatureClass)
        {
            if (relationshipChainToFeatureClass.Count == 0)
            {
                yield break;
            }

            if (relationshipChainToFeatureClass.Count == 1)
            {
                foreach (IObject relatedObject in
                         GdbQueryUtils.GetRelatedObjects(obj, relationshipChainToFeatureClass))
                {
                    var relatedFeature = relatedObject as IFeature;

                    if (relatedFeature != null)
                    {
                        yield return(relatedFeature.Shape);
                    }
                    else
                    {
                        _msg.DebugFormat("Related object in spatial relation is not a feature: {0}",
                                         GdbObjectUtils.ToString(relatedObject));
                    }
                }
            }
            else
            {
                int?shapeFieldIndex = null;

                foreach (IRow joinedRow in GetJoinedRows(obj, relationshipChainToFeatureClass))
                {
                    // determine shape field index based on the first row
                    if (shapeFieldIndex == null)
                    {
                        int index;
                        if (TryGetShapeFieldIndex(joinedRow.Fields, out index))
                        {
                            shapeFieldIndex = index;
                        }
                        else
                        {
                            _msg.WarnFormat(
                                "Shape field not found in joined table for getting reference geometry for {0}",
                                DatasetUtils.GetName(obj.Class));
                            yield break;
                        }
                    }

                    yield return(joinedRow.Value[shapeFieldIndex.Value] as IGeometry);
                }
            }
        }