You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							554 lines
						
					
					
						
							26 KiB
						
					
					
				
			
		
		
	
	
							554 lines
						
					
					
						
							26 KiB
						
					
					
				using ESRI.ArcGIS.Carto; | 
						|
using ESRI.ArcGIS.Controls; | 
						|
using ESRI.ArcGIS.Display; | 
						|
using ESRI.ArcGIS.Geodatabase; | 
						|
using ESRI.ArcGIS.Geometry; | 
						|
using KGIS.Framework.AE; | 
						|
using KGIS.Framework.Maps; | 
						|
using KGIS.Framework.Platform; | 
						|
using KGIS.Framework.Utils; | 
						|
using KGIS.Framework.Utils.ExtensionMethod; | 
						|
using KGIS.Framework.Utils.Helper; | 
						|
using KGIS.Framework.Utils.Interface; | 
						|
using Kingo.Plugin.EngineEditor.helper; | 
						|
using Kingo.PluginServiceInterface.Helper; | 
						|
using System; | 
						|
using System.Collections.Generic; | 
						|
using System.Windows; | 
						|
using System.Windows.Input; | 
						|
 | 
						|
namespace Kingo.Plugin.EngineEditor.Views | 
						|
{ | 
						|
    /// <summary> | 
						|
    /// FrmAttribureEdit.xaml 的交互逻辑 | 
						|
    /// </summary> | 
						|
    public partial class FrmMerge : Window | 
						|
    { | 
						|
        public FrmMerge() | 
						|
        { | 
						|
            InitializeComponent(); | 
						|
        } | 
						|
        List<DataSource> groupList; | 
						|
        public IHookHelper m_hookHelper; | 
						|
        public bool IsPromptAgain = true; | 
						|
        public void BindData() | 
						|
        { | 
						|
            gridData.ItemsSource = null; | 
						|
            IMap map = MapsManager.Instance.MapService.getAxMapControl().ActiveView.FocusMap; | 
						|
            Dictionary<string, List<IFeature>> SelectedFeature = GetSelectedFeaturesDic(map); | 
						|
            groupList = new List<DataSource>(); | 
						|
            if (SelectedFeature.Keys.Count > 1) | 
						|
            { | 
						|
                MessageHelper.ShowTips("请选择单图层的要素进行合并操作!"); | 
						|
                return; | 
						|
            } | 
						|
            else | 
						|
            { | 
						|
                foreach (string key in SelectedFeature.Keys) | 
						|
                { | 
						|
                    txtConten.Text = SelectedFeature[key].Count + "个要素"; | 
						|
                    foreach (IFeature f in SelectedFeature[key]) | 
						|
                    { | 
						|
                        DataSource datasource = new DataSource(); | 
						|
                        datasource.FID = f.get_Value(f.Fields.FindField(f.Class.OIDFieldName)).ToString(); | 
						|
                        datasource.feature = f; | 
						|
                        groupList.Add(datasource); | 
						|
                    } | 
						|
                } | 
						|
                gridData.ItemsSource = groupList; | 
						|
            } | 
						|
 | 
						|
            Platform.Instance.NotifyMsgEven2 += Instance_NotifyMsgEven2; | 
						|
        } | 
						|
        public static Dictionary<string, List<IFeature>> GetSelectedFeaturesDic(IMap map, esriGeometryType geoType = esriGeometryType.esriGeometryAny) | 
						|
        { | 
						|
            if (map == null) | 
						|
                return null; | 
						|
            IEnumFeature enumFeature = map.FeatureSelection as IEnumFeature; | 
						|
            if (enumFeature == null) | 
						|
                return null; | 
						|
            Dictionary<string, List<IFeature>> geoList = new Dictionary<string, List<IFeature>>(); | 
						|
            IFeature feart = enumFeature.Next(); | 
						|
            while (feart != null) | 
						|
            { | 
						|
                if (feart.Shape != null && !feart.Shape.IsEmpty && (geoType == esriGeometryType.esriGeometryAny || feart.Shape.GeometryType == geoType)) | 
						|
                { | 
						|
                    IDataset dataset = feart.Table as IDataset; | 
						|
                    if (dataset != null) | 
						|
                    { | 
						|
                        if (geoList.ContainsKey(dataset.BrowseName)) | 
						|
                        { | 
						|
                            geoList[dataset.BrowseName].Add(feart); | 
						|
                        } | 
						|
                        else | 
						|
                        { | 
						|
                            geoList.Add(dataset.BrowseName, new List<IFeature>() { feart }); | 
						|
                        } | 
						|
                    } | 
						|
                } | 
						|
                feart = enumFeature.Next(); | 
						|
            } | 
						|
            return geoList; | 
						|
        } | 
						|
        /// <summary> | 
						|
        /// 点击定位 | 
						|
        /// </summary> | 
						|
        /// <param name="sender"></param> | 
						|
        /// <param name="e"></param> | 
						|
        private void gridFileInfo_MouseDown(object sender, MouseButtonEventArgs e) | 
						|
        { | 
						|
            try | 
						|
            { | 
						|
                DataSource item = gridData.SelectedItem as DataSource; | 
						|
                if (item != null && item.feature != null) | 
						|
                { | 
						|
                    IFeature f = item.feature as IFeature; | 
						|
                    IFillSymbol fillSymbol = new SimpleFillSymbolClass(); | 
						|
                    fillSymbol.Color = new ESRI.ArcGIS.Display.RgbColorClass() { Red = 0, Green = 0, Blue = 255 }; | 
						|
                    MapsManager.Instance.MapService.FlashShape((m_hookHelper.Hook as IMapControlDefault), f.ShapeCopy, 2); | 
						|
                } | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                LogAPI.Debug("合并要素-定位异常:" + ex.Message + ex.StackTrace); | 
						|
            } | 
						|
        } | 
						|
        /// <summary> | 
						|
        /// 合并 | 
						|
        /// </summary> | 
						|
        /// <param name="sender"></param> | 
						|
        /// <param name="e"></param> | 
						|
        private void btnOK_Click(object sender, RoutedEventArgs e) | 
						|
        { | 
						|
 | 
						|
            if (groupList == null || groupList.Count < 2) | 
						|
            { | 
						|
                MessageHelper.ShowTips("请选择合并的要素!"); | 
						|
                return; | 
						|
            } | 
						|
            IEngineEditor m_editor = new EngineEditorClass(); | 
						|
            try | 
						|
            { | 
						|
                IFeatureLayer featureLayer = (m_editor as EngineEditorClass).TargetLayer as IFeatureLayer; | 
						|
                IDataset dataset = featureLayer.FeatureClass as IDataset; | 
						|
                string areapath = SysAppPath.GetAreaUpdateConfigPath(); | 
						|
                string mjField = string.Empty; | 
						|
                if (!string.IsNullOrWhiteSpace(areapath) && System.IO.File.Exists(areapath)) | 
						|
                    mjField = AreaConfigHelper.GetAreaPropertyByLayerName(dataset.Name); | 
						|
                DataSource item = gridData.SelectedItem as DataSource; | 
						|
                IGeometry geo = null; | 
						|
                List<string> bsmList = new List<string>(); | 
						|
                if (dataset.Name == "CZCDYDGX") | 
						|
                { | 
						|
                    CZCDYDGXMerge(); | 
						|
                } | 
						|
                else if (dataset.Name == "DLTBGX") | 
						|
                { | 
						|
                    DLTBGXMerge(); | 
						|
                } | 
						|
                else | 
						|
                { | 
						|
                    m_editor.StartOperation(); | 
						|
                    int index_bsm = featureLayer.FeatureClass.FindField("BSM"); | 
						|
                    foreach (DataSource data in groupList) | 
						|
                    { | 
						|
                        if (dataset.Name.ToUpper() == "DLTBBG" && index_bsm >= 0) | 
						|
                        { | 
						|
                            bsmList.Add(data.feature.Value[index_bsm].ToString()); | 
						|
                        } | 
						|
                        if (geo == null) | 
						|
                        { | 
						|
                            geo = data.feature.ShapeCopy; | 
						|
                        } | 
						|
                        else | 
						|
                        { | 
						|
                            if (geo.GeometryType == esriGeometryType.esriGeometryPoint) | 
						|
                            { | 
						|
                                MessageHelper.ShowTips("点要素不能进行合并!"); | 
						|
                                throw new Exception("点要素不能进行合并"); | 
						|
                            } | 
						|
                            if (!geo.IsEmpty && !data.feature.ShapeCopy.IsEmpty && geo.GeometryType == data.feature.ShapeCopy.GeometryType) | 
						|
                            { | 
						|
                                ITopologicalOperator topOp = geo as ITopologicalOperator; | 
						|
                                topOp.Simplify(); | 
						|
                                IGeometry geometry = data.feature.ShapeCopy; | 
						|
                                (geometry as ITopologicalOperator).Simplify(); | 
						|
                                geo = topOp.Union(geometry); | 
						|
                            } | 
						|
                        } | 
						|
                    } | 
						|
                    //增加提示框原因,如果提示框选择否,再继续点合并会导致删除异常,所以原删除操作移至此处 | 
						|
                    foreach (DataSource data in groupList) | 
						|
                    { | 
						|
                        if (data.feature.OID != item.feature.OID) | 
						|
                        { | 
						|
                            data.feature.Delete(); | 
						|
                        } | 
						|
                    } | 
						|
                    item.feature.Shape = geo; | 
						|
                    if (!string.IsNullOrWhiteSpace(mjField)) | 
						|
                    { | 
						|
                        int mjIndex = item.feature.Fields.FindField(mjField); | 
						|
                        if (mjIndex > -1) | 
						|
                        { | 
						|
                            IArea area = item.feature.ShapeCopy as IArea; | 
						|
                            double mj = area.Area; | 
						|
                            if (dataset.Name == "LSYD") | 
						|
                            { | 
						|
                                mj = mj * 0.0001; | 
						|
                            } | 
						|
                            mj = Math.Round(mj, 2); | 
						|
                            item.feature.Value[mjIndex] = mj; | 
						|
                        } | 
						|
                    } | 
						|
                    item.feature.Store(); | 
						|
                } | 
						|
                if (m_editor.Map.SelectionCount > 0) | 
						|
                { | 
						|
                    m_editor.Map.ClearSelection(); | 
						|
                } | 
						|
                m_editor.StopOperation("合并要素"); | 
						|
                m_hookHelper.ActiveView.Refresh(); | 
						|
                this.Close(); | 
						|
 | 
						|
                //北京单图斑需求:所选被合并图斑挂接的照片挂接到合并后图斑上 | 
						|
                if (Platform.Instance.SystemType == SystemTypeEnum.DTBJK && (MapsManager.Instance.CurrProjectInfo as PluginServiceInterface.ProjectInfo).CODE.StartsWith("11") && dataset.Name.ToUpper() == "DLTBBG") | 
						|
                { | 
						|
                    Platform.Instance.SendMsg(new NotifyMsgPackage() { MsgType = "UpdateImgIsCheckByMergeGeometry", Content = bsmList }); | 
						|
                } | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                m_editor.AbortOperation(); | 
						|
                LogAPI.Debug(ex); | 
						|
            } | 
						|
 | 
						|
        } | 
						|
 | 
						|
        #region 城镇村等用地更新层合并 | 
						|
        private void CZCDYDGXMerge() | 
						|
        { | 
						|
            IGeometry geo = null; | 
						|
            try | 
						|
            { | 
						|
                if (groupList == null || groupList.Count < 2) | 
						|
                { | 
						|
                    MessageHelper.ShowTips("请选择合并的要素!"); | 
						|
                    return; | 
						|
                } | 
						|
                IEngineEditor m_editor = new EngineEditorClass(); | 
						|
                m_editor.StartOperation(); | 
						|
                try | 
						|
                { | 
						|
                    IFeatureLayer featureLayer = (m_editor as EngineEditorClass).TargetLayer as IFeatureLayer; | 
						|
                    IDataset dataset = featureLayer.FeatureClass as IDataset; | 
						|
                    if (dataset.Name != "CZCDYDGX") return; | 
						|
                    DataSource item = gridData.SelectedItem as DataSource; | 
						|
                    int index_mj = featureLayer.FeatureClass.FindField("CZCMJ"); | 
						|
                    int index_bsm = featureLayer.FeatureClass.FindField("BSM"); | 
						|
                    double mj = 0; | 
						|
                    foreach (DataSource data in groupList) | 
						|
                    { | 
						|
                        if (geo == null) | 
						|
                        { | 
						|
                            geo = data.feature.ShapeCopy; | 
						|
                            mj = data.feature.Value[index_mj].ToDouble(); | 
						|
                        } | 
						|
                        else | 
						|
                        { | 
						|
                            if (geo.GeometryType == esriGeometryType.esriGeometryPolygon && geo.GeometryType == data.feature.ShapeCopy.GeometryType) | 
						|
                            { | 
						|
                                if (!geo.IsEmpty && !data.feature.ShapeCopy.IsEmpty) | 
						|
                                { | 
						|
                                    ITopologicalOperator topOp = geo as ITopologicalOperator; | 
						|
                                    topOp.Simplify(); | 
						|
                                    IGeometry geometry = data.feature.ShapeCopy; | 
						|
                                    (geometry as ITopologicalOperator).Simplify(); | 
						|
                                    geo = topOp.Union(geometry); | 
						|
                                    mj += data.feature.Value[index_mj].ToDouble(); | 
						|
                                } | 
						|
                            } | 
						|
                        } | 
						|
                    } | 
						|
                    item.feature.Value[index_mj] = mj.ToDecimal(2).ToDouble(); | 
						|
                    var strBSM = BSMHelper.GetMaxBSM(new List<IFeatureClass>() { featureLayer.FeatureClass }); | 
						|
                    var strbsm = strBSM.Substring(0, 10); | 
						|
                    var Maxbsm = strBSM.Substring(10).ToInt() + 1; | 
						|
                    strBSM = strbsm + Maxbsm.ToString().PadLeft(8, '0');//最新标识码 | 
						|
                    item.feature.Value[index_bsm] = strBSM; | 
						|
                    item.feature.Shape = geo; | 
						|
                    item.feature.Store(); | 
						|
                    foreach (DataSource data in groupList) | 
						|
                    { | 
						|
                        //被合并的图斑新增一条城镇村更新过程层数据 | 
						|
                        if (data.feature.OID != item.feature.OID) | 
						|
                        { | 
						|
                            CZCDYDGXGC(item.feature, data.feature); | 
						|
                            data.feature.Delete(); | 
						|
                        } | 
						|
                    } | 
						|
                    m_editor.StopOperation("城镇村更新合并要素"); | 
						|
                } | 
						|
                catch (Exception ex) | 
						|
                { | 
						|
                    m_editor.AbortOperation(); | 
						|
                    LogAPI.Debug($"城镇村等用地更新层合并失败:{ex.Message}{ex.StackTrace}"); | 
						|
                } | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                LogAPI.Debug($"城镇村等用地更新层合并失败:{ex.Message}{ex.StackTrace}"); | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        private void CZCDYDGXGC(IFeature gxfeature, IFeature feature) | 
						|
        { | 
						|
            IFeatureLayer CZCDYDGXGCLayer = null; | 
						|
            IFeatureLayer JCCZCLayer = null; | 
						|
            IFeatureCursor Cursor = null; | 
						|
            try | 
						|
            { | 
						|
                CZCDYDGXGCLayer = MapsManager.Instance.MapService.GetFeatureLayerByName("CZCDYDGXGC"); | 
						|
                JCCZCLayer = MapsManager.Instance.MapService.GetFeatureLayerByName("CZCDYD"); | 
						|
                IFeatureBuffer buff = CZCDYDGXGCLayer.FeatureClass.CreateFeatureBuffer(); | 
						|
                if (CZCDYDGXGCLayer != null && JCCZCLayer != null) | 
						|
                { | 
						|
                    #region 修改当前更新层对应的更新过程层变更行为,变更后面积 | 
						|
                    var index_bgxw = CZCDYDGXGCLayer.FeatureClass.FindField("BGXW"); | 
						|
                    var index_bghtbbsm = CZCDYDGXGCLayer.FeatureClass.FindField("BGHBSM"); | 
						|
                    var index_bsm = gxfeature.Fields.FindField("BSM"); | 
						|
                    string bghbsm = gxfeature.Value[index_bsm].ToTrim(); | 
						|
                    List<IFeature> list = FeatureAPI.Identify2(gxfeature.ShapeCopy, CZCDYDGXGCLayer); | 
						|
                    if (list != null && list.Count > 0) | 
						|
                    { | 
						|
                        list[0].Value[index_bgxw] = "2"; | 
						|
                        list[0].Value[index_bghtbbsm] = bghbsm; | 
						|
                        list[0].Store(); | 
						|
                    } | 
						|
                    #endregion | 
						|
                    var strBSM = BSMHelper.GetMaxBSM(new List<IFeatureClass>() { CZCDYDGXGCLayer.FeatureClass }); | 
						|
                    list = FeatureAPI.Identify2(feature.ShapeCopy, JCCZCLayer); | 
						|
                    Cursor = CZCDYDGXGCLayer.FeatureClass.Insert(true); | 
						|
                    foreach (var jcfeature in list) | 
						|
                    { | 
						|
                        for (int i = 0; i < CZCDYDGXGCLayer.FeatureClass.Fields.FieldCount; i++) | 
						|
                        { | 
						|
                            IField field = CZCDYDGXGCLayer.FeatureClass.Fields.Field[i]; | 
						|
                            if (!field.Editable || field.Name.Contains("SHAPE")) continue; | 
						|
                            if (field.Name.ToUpper().Contains("BGQ")) | 
						|
                            { | 
						|
                                string sFieldName = field.Name.Replace("BGQ", ""); | 
						|
                                int idx = jcfeature.Fields.FindField(sFieldName); | 
						|
                                if (idx != -1) | 
						|
                                    buff.Value[i] = jcfeature.Value[idx]; | 
						|
                            } | 
						|
                            else if (field.Name.ToUpper().Contains("BGH")) | 
						|
                            { | 
						|
                                if (field.Name == "BGHBSM") | 
						|
                                { | 
						|
                                    buff.Value[i] = bghbsm; | 
						|
                                } | 
						|
                                else | 
						|
                                { | 
						|
                                    string sFieldName = field.Name.Replace("BGH", ""); | 
						|
                                    int idx = gxfeature.Fields.FindField(sFieldName); | 
						|
                                    if (idx != -1) | 
						|
                                        buff.Value[i] = gxfeature.Value[idx]; | 
						|
                                } | 
						|
                            } | 
						|
                            if (field.Name == "BGXW") | 
						|
                                buff.Value[i] = "2"; | 
						|
                            if (field.Name == "BGMJ") | 
						|
                            { | 
						|
                                int idx = jcfeature.Fields.FindField("CZCMJ"); | 
						|
                                if (idx != -1) | 
						|
                                    buff.Value[i] = jcfeature.Value[idx]; | 
						|
                            } | 
						|
                            if (field.Name == "BSM") | 
						|
                            { | 
						|
                                var strbsm = strBSM.Substring(0, 10); | 
						|
                                var Maxbsm = strBSM.Substring(10).ToInt() + 1; | 
						|
                                strBSM = strbsm + Maxbsm.ToString().PadLeft(8, '0');//最新标识码 | 
						|
                                buff.Value[i] = strBSM; | 
						|
                            } | 
						|
                            if (field.Name == "GXSJ") | 
						|
                            { | 
						|
                                buff.Value[i] = DateTime.Now.Month >= 10 ? new DateTime(DateTime.Now.Year, 12, 31) : new DateTime(DateTime.Now.Year - 1, 12, 31); | 
						|
                            } | 
						|
                        } | 
						|
                        buff.Shape = feature.ShapeCopy; | 
						|
                        Cursor.InsertFeature(buff); | 
						|
                    } | 
						|
                    Cursor.Flush(); | 
						|
                } | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                LogAPI.Debug("城镇村等用地更新层合并异常:" + ex.Message + ex.StackTrace); | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        #endregion | 
						|
 | 
						|
        #region 地类图斑更新层合并 | 
						|
        private void DLTBGXMerge() | 
						|
        { | 
						|
            if (groupList == null || groupList.Count < 2) | 
						|
            { | 
						|
                MessageHelper.ShowTips("请选择合并的要素!"); | 
						|
                return; | 
						|
            } | 
						|
            IGeometry geo = null; | 
						|
            IEngineEditor m_editor = new EngineEditorClass(); | 
						|
            try | 
						|
            { | 
						|
                m_editor.StartOperation(); | 
						|
                IFeatureLayer featureLayer = (m_editor as EngineEditorClass).TargetLayer as IFeatureLayer; | 
						|
                IDataset dataset = featureLayer.FeatureClass as IDataset; | 
						|
                if (dataset.Name != "DLTBGX") return; | 
						|
                DataSource item = gridData.SelectedItem as DataSource; | 
						|
                int index_tbmj = featureLayer.FeatureClass.FindField("TBMJ"); | 
						|
                int index_tbdlmj = featureLayer.FeatureClass.FindField("TBDLMJ"); | 
						|
                int index_kcmj = featureLayer.FeatureClass.FindField("KCMJ"); | 
						|
                int index_kcxs = featureLayer.FeatureClass.FindField("KCXS"); | 
						|
                double mj = 0; | 
						|
                foreach (DataSource data in groupList) | 
						|
                { | 
						|
                    if (geo == null) | 
						|
                    { | 
						|
                        geo = data.feature.ShapeCopy; | 
						|
                        mj = data.feature.Value[index_tbmj].ToDouble(); | 
						|
                    } | 
						|
                    else | 
						|
                    { | 
						|
                        if (geo.GeometryType == esriGeometryType.esriGeometryPolygon && geo.GeometryType == data.feature.ShapeCopy.GeometryType) | 
						|
                        { | 
						|
                            if (!geo.IsEmpty && !data.feature.ShapeCopy.IsEmpty) | 
						|
                            { | 
						|
                                ITopologicalOperator topOp = geo as ITopologicalOperator; | 
						|
                                topOp.Simplify(); | 
						|
                                IGeometry geometry = data.feature.ShapeCopy; | 
						|
                                (geometry as ITopologicalOperator).Simplify(); | 
						|
                                geo = topOp.Union(geometry); | 
						|
                                mj += data.feature.Value[index_tbmj].ToDouble(); | 
						|
                            } | 
						|
                        } | 
						|
                    } | 
						|
                } | 
						|
                var tbmj = mj.ToDecimal(2).ToDouble(); | 
						|
                var kcmj = Math.Round((decimal)(item.feature.Value[index_kcxs].ToDouble() * tbmj), 2, MidpointRounding.AwayFromZero).ToDouble(); | 
						|
                item.feature.Value[index_tbmj] = tbmj; | 
						|
                item.feature.Value[index_kcmj] = kcmj; | 
						|
                item.feature.Value[index_tbdlmj] = tbmj - kcmj; | 
						|
                item.feature.Shape = geo; | 
						|
                item.feature.Store(); | 
						|
                foreach (DataSource data in groupList) | 
						|
                { | 
						|
                    //被合并的图斑新增一条地类图斑更新过程层数据 | 
						|
                    if (data.feature.OID != item.feature.OID) | 
						|
                    { | 
						|
                        DLTBGXGC(item.feature, data.feature); | 
						|
                        data.feature.Delete(); | 
						|
                    } | 
						|
                } | 
						|
                m_editor.StopOperation("地类图斑更新合并要素"); | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                m_editor.AbortOperation(); | 
						|
                LogAPI.Debug($"地类图斑更新层合并失败:{ex.Message}{ex.StackTrace}"); | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        private void DLTBGXGC(IFeature gxfeature, IFeature feature) | 
						|
        { | 
						|
            IFeatureLayer DLTBGXGCLayer = null; | 
						|
            IFeatureLayer JCDLTBLayer = null; | 
						|
            IFeatureCursor Cursor = null; | 
						|
            try | 
						|
            { | 
						|
                DLTBGXGCLayer = MapsManager.Instance.MapService.GetFeatureLayerByName("DLTBGXGC"); | 
						|
                JCDLTBLayer = MapsManager.Instance.MapService.GetFeatureLayerByName("DLTB"); | 
						|
                IFeatureBuffer buff = DLTBGXGCLayer.FeatureClass.CreateFeatureBuffer(); | 
						|
                if (DLTBGXGCLayer != null && JCDLTBLayer != null) | 
						|
                { | 
						|
                    #region 修改当前更新层对应的更新过程层变更行为,变更后面积 | 
						|
                    var index_bgxw = DLTBGXGCLayer.FeatureClass.FindField("BGXW"); | 
						|
                    List<IFeature> list = FeatureAPI.Identify2(gxfeature.ShapeCopy, DLTBGXGCLayer); | 
						|
                    if (list != null && list.Count > 0) | 
						|
                    { | 
						|
                        list[0].Value[index_bgxw] = "2"; | 
						|
                        list[0].Store(); | 
						|
                    } | 
						|
                    #endregion | 
						|
                    var strBSM = BSMHelper.GetMaxBSM(new List<IFeatureClass>() { DLTBGXGCLayer.FeatureClass }); | 
						|
                    list = FeatureAPI.Identify2(feature.ShapeCopy, JCDLTBLayer); | 
						|
                    Cursor = DLTBGXGCLayer.FeatureClass.Insert(true); | 
						|
                    foreach (var jcfeature in list) | 
						|
                    { | 
						|
                        for (int i = 0; i < DLTBGXGCLayer.FeatureClass.Fields.FieldCount; i++) | 
						|
                        { | 
						|
                            IField field = DLTBGXGCLayer.FeatureClass.Fields.Field[i]; | 
						|
                            if (!field.Editable || field.Name.Contains("SHAPE")) continue; | 
						|
                            if (field.Name.ToUpper().Contains("BGQ")) | 
						|
                            { | 
						|
                                string sFieldName = field.Name.Replace("BGQ", ""); | 
						|
                                int idx = jcfeature.Fields.FindField(sFieldName); | 
						|
                                if (sFieldName == "TBBSM") | 
						|
                                    idx = jcfeature.Fields.FindField("BSM"); | 
						|
                                if (idx != -1) | 
						|
                                    buff.Value[i] = jcfeature.Value[idx]; | 
						|
                            } | 
						|
                            else if (field.Name.ToUpper().Contains("BGH")) | 
						|
                            { | 
						|
                                string sFieldName = field.Name.Replace("BGH", ""); | 
						|
                                int idx = gxfeature.Fields.FindField(sFieldName); | 
						|
                                if (sFieldName == "TBBSM") | 
						|
                                    idx = gxfeature.Fields.FindField("BSM"); | 
						|
                                if (idx != -1) | 
						|
                                    buff.Value[i] = gxfeature.Value[idx]; | 
						|
                            } | 
						|
                            if (field.Name == "BGXW") | 
						|
                                buff.Value[i] = "2"; | 
						|
                            if (field.Name == "TBBGMJ") | 
						|
                            { | 
						|
                                int idx = jcfeature.Fields.FindField("TBMJ"); | 
						|
                                if (idx != -1) | 
						|
                                    buff.Value[i] = jcfeature.Value[idx]; | 
						|
                            } | 
						|
                            if (field.Name == "BSM") | 
						|
                            { | 
						|
                                var strbsm = strBSM.Substring(0, 10); | 
						|
                                var Maxbsm = strBSM.Substring(10).ToInt() + 1; | 
						|
                                strBSM = strbsm + Maxbsm.ToString().PadLeft(8, '0');//最新标识码 | 
						|
                                buff.Value[i] = strBSM; | 
						|
                            } | 
						|
                            if (field.Name == "GXSJ") | 
						|
                            { | 
						|
                                buff.Value[i] = DateTime.Now.Month >= 10 ? new DateTime(DateTime.Now.Year, 12, 31) : new DateTime(DateTime.Now.Year - 1, 12, 31); | 
						|
                            } | 
						|
                        } | 
						|
                        buff.Shape = feature.ShapeCopy; | 
						|
                        Cursor.InsertFeature(buff); | 
						|
                    } | 
						|
                    Cursor.Flush(); | 
						|
                } | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                LogAPI.Debug("地类图斑更新层合并异常:" + ex.Message + ex.StackTrace); | 
						|
            } | 
						|
        } | 
						|
        #endregion | 
						|
        public class DataSource | 
						|
        { | 
						|
            public string FID { get; set; } | 
						|
            public IFeature feature { get; set; } | 
						|
        } | 
						|
        private void Instance_NotifyMsgEven2(NotifyMsgPackage msg) | 
						|
        { | 
						|
 | 
						|
        } | 
						|
    } | 
						|
 | 
						|
}
 | 
						|
 |