示例#1
0
        /// <summary>
        /// 如果是Polygon,进行自重叠检查
        /// </summary>
        /// <returns></returns>
        public bool CheckSelfOverlap(List <FeatureObject> featureList, out string outMsg)
        {
            bool result = false;

            outMsg = string.Empty;

            try
            {
                for (int i = 0; i < featureList.Count; i++)
                {
                    FeatureObject foi = featureList[i];
                    if (foi.geometry == null || foi.geometry.IsEmpty)
                    {
                        continue;
                    }

                    ITopologicalOperator pITop = (ITopologicalOperator)foi.geometry;

                    for (int j = i + 1; j < featureList.Count; j++)
                    {
                        FeatureObject foj = featureList[j];
                        if (foj.geometry == null || foj.geometry.IsEmpty)
                        {
                            continue;
                        }

                        IGeometry overlapGeo = pITop.Intersect(foj.geometry, esriGeometryDimension.esriGeometry2Dimension);
                        if (overlapGeo != null && !overlapGeo.IsEmpty)
                        {
                            result = true;
                            int i_int = i + 1;
                            int j_int = j + 1;
                            outMsg += string.Format("传入的地块集合中第{0}和第{1}个地块是相互重叠的;", i_int, j_int);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                outMsg += ex.Message;
                result  = true;
            }

            return(result);
        }
示例#2
0
        /// <summary>
        /// 删除Features
        /// </summary>
        /// <param name="connObj">连接对象</param>
        /// <param name="fcObj">表对象</param>
        /// <param name="fwObj">查询条件</param>
        /// <param name="outMsg">返回必要信息</param>
        /// <returns></returns>
        public List <FeatureObject> GetFeatures(ConnectionJSObject connObj, FeatureClassJSObject fcObj, FilterWhereJSObject fwObj, out string outMsg)
        {
            List <FeatureObject> result = new List <FeatureObject>();

            outMsg = string.Empty;
            try
            {
                if (fcObj != null)
                {
                    OpenSDE(connObj);

                    if (pWorkspace != null)
                    {
                        IFeatureClass featureClass = null;
                        //指定表名是否存在
                        if (pWorkspace2.get_NameExists(esriDatasetType.esriDTFeatureClass, fcObj.name))
                        {
                            featureClass = pFeatureWorkspace.OpenFeatureClass(fcObj.name);

                            //查找地块
                            IQueryFilter pQueryFilter = new QueryFilterClass();
                            pQueryFilter.WhereClause = fwObj.filter;
                            IFeatureCursor pFeatureCursor = featureClass.Update(pQueryFilter, false);
                            IFeature       feature        = pFeatureCursor.NextFeature();
                            while (feature != null)
                            {
                                //TODO:解析
                                FeatureObject            fo    = new FeatureObject();
                                List <AttributeJSObject> attrs = new List <AttributeJSObject>();

                                for (int i = 0; i < featureClass.Fields.FieldCount; i++)
                                {
                                    IField field = featureClass.Fields.get_Field(i);
                                    if (field != null && field.Editable && field.Type != esriFieldType.esriFieldTypeGeometry)
                                    {
                                        AttributeJSObject ajso = new AttributeJSObject();
                                        ajso.name  = field.Name;
                                        ajso.value = feature.get_Value(i);
                                        attrs.Add(ajso);
                                    }
                                }
                                fo.attributes = attrs;
                                fo.geometry   = feature.ShapeCopy;

                                result.Add(fo);

                                feature = pFeatureCursor.NextFeature();
                            }
                        }
                        else
                        {
                            outMsg = string.Format("数据源中不存在表名[{0}]。", fcObj.name);
                        }
                    }
                }
                else
                {
                    outMsg = string.Format("操作表参数错误!");
                }
            }
            catch (Exception ex)
            {
                outMsg = ex.Message;
            }
            finally
            {
                CloseSDE();
            }

            return(result);
        }