Beispiel #1
0
        private IFeature GetFeature(DataRow rowError, string strLayerName)
        {
            IMap theMap = this.m_HookHelper.FocusMap;
            MapLayersController mapController = new MapLayersController(theMap);
            enumErrorType errType = (enumErrorType)Convert.ToInt32(rowError["ErrorType"]);
            switch (errType)
            {
                case enumErrorType.Topology:
                    {
                        ITopologyLayer topoLayerTarget = mapController.GetLayer(strLayerName) as ITopologyLayer;
                        if (topoLayerTarget == null)
                            return null;

                        ITopology topology = topoLayerTarget.Topology;
                        IErrorFeatureContainer errFeatureContainer = topology as IErrorFeatureContainer;
                        esriTopologyRuleType ruleType = (esriTopologyRuleType)Convert.ToInt32( rowError[Field_Name_TopologyRuleType]);
                        //string strGeoType = rowError[Field_Name_TopologyGeometryType] as string;
                        //esriGeometryType geoType = (strGeoType == "��" ? esriGeometryType.esriGeometryPoint : (strGeoType == "��" ? esriGeometryType.esriGeometryLine : esriGeometryType.esriGeometryPolygon));
                        esriGeometryType geoType = (esriGeometryType)Convert.ToInt32(rowError[Field_Name_TopologyGeometryType]);
                        int sourceClassID = (int)rowError["SourceLayerID"];
                        int sourceOID = (int)rowError["OID"];
                        int targetClassID = (int)rowError["TargetLayerID"];
                        int targetOID = Convert.ToInt32( rowError["OID2"]);

                        return errFeatureContainer.get_ErrorFeature((topology as IGeoDataset).SpatialReference, ruleType, geoType, sourceClassID, sourceOID, targetClassID, targetOID) as IFeature;

                    }
                    break;

                case enumErrorType.Normal:
                    {
                        IFeatureLayer flyrTarget = mapController.GetLayer(strLayerName) as IFeatureLayer;
                        if (flyrTarget == null)
                            return null;

                        // ��Ϊ���ȴ�OID���Ҷ�λ
                        if (rowError.Table.Columns.Contains(Field_Name_TargetOID) && rowError[Field_Name_TargetOID] != DBNull.Value)
                        {
                            return flyrTarget.FeatureClass.GetFeature((int)rowError[Field_Name_TargetOID]);
                        }
                        else if (rowError.Table.Columns.Contains(Field_Name_TargetBSM) && !string.IsNullOrEmpty(rowError[Field_Name_TargetBSM] as string))
                        {

                            IQueryFilter qFilter = new QueryFilterClass();
                            IFields fields = flyrTarget.FeatureClass.Fields;
                            int fieldIndex = fields.FindField("BSM");
                            if (fieldIndex < 0)
                                return null;

                            IField bsmField = fields.get_Field(fieldIndex);
                            if (bsmField.Type == esriFieldType.esriFieldTypeInteger)
                            {
                                qFilter.WhereClause = string.Format("BSM={0}", rowError[Field_Name_TargetBSM]);
                            }
                            else
                            {
                                qFilter.WhereClause = string.Format("BSM='{0}'", rowError[Field_Name_TargetBSM]);
                            }
                            IFeatureCursor fCursor = flyrTarget.FeatureClass.Search(qFilter, false);

                            return fCursor.NextFeature();
                        }
                        else
                        {
                            return null;
                        }
                    }

                default: return null;
            }
        }