/// <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); }
/// <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); }