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.
		
		
		
		
		
			
		
			
				
					
					
						
							307 lines
						
					
					
						
							16 KiB
						
					
					
				
			
		
		
	
	
							307 lines
						
					
					
						
							16 KiB
						
					
					
				using ESRI.ArcGIS.Carto; | 
						|
using ESRI.ArcGIS.Controls; | 
						|
using KGIS.Framework.AE; | 
						|
using KGIS.Framework.AE.Enum; | 
						|
using KGIS.Framework.Commands; | 
						|
using KGIS.Framework.Maps; | 
						|
using KGIS.Framework.Platform; | 
						|
using KGIS.Framework.Utils; | 
						|
using KGIS.Framework.Utils.Helper; | 
						|
using Kingo.Framework.LayerStyleConvert.Common; | 
						|
using Kingo.Framework.LayerStyleConvert.XSDClass; | 
						|
using Kingo.PluginServiceInterface; | 
						|
using System; | 
						|
using System.Collections.Generic; | 
						|
using System.IO; | 
						|
using System.Linq; | 
						|
using UIShell.OSGi; | 
						|
 | 
						|
namespace Kingo.Plugin.BGSetting.Commands | 
						|
{ | 
						|
    /// <summary> | 
						|
    /// 系统设置-功能点 | 
						|
    /// </summary> | 
						|
    public class CmdCreateZLDB : BaseMenuCommand | 
						|
    { | 
						|
        private IDataCatalogService _DataCatalog = null; | 
						|
        /// <summary> | 
						|
        /// 编辑器 | 
						|
        /// </summary> | 
						|
        private EngineEditorClass pEditor = null; | 
						|
        private IHookHelper hookHelper = null; | 
						|
        private SystemConfig2 SystemCfg = null; | 
						|
        public override void OnClick() | 
						|
        { | 
						|
            IWorkspaceAPI wsAPI = null; | 
						|
            try | 
						|
            { | 
						|
                if (_DataCatalog == null) | 
						|
                    _DataCatalog = BundleRuntime.Instance.GetFirstOrDefaultService<IDataCatalogService>(); | 
						|
                if (_DataCatalog == null) | 
						|
                    return; | 
						|
                if (!(MapsManager.Instance.MapService.GetProjectInfo() is ProjectInfo ProInfo)) | 
						|
                { | 
						|
                    return; | 
						|
                } | 
						|
                if (pEditor == null) | 
						|
                    pEditor = new EngineEditorClass(); | 
						|
                if (pEditor.EditState != esriEngineEditState.esriEngineStateNotEditing) | 
						|
                { | 
						|
                    MessageHelper.ShowTips("请先关闭编辑!"); | 
						|
                    return; | 
						|
                } | 
						|
                PluginServiceInterface.CommonHelper.DirectoryCopy(SysAppPath.GetCurrentAppPath() + string.Format("工作空间\\模板\\新建变更工程\\{0}\\ZLDB.gdb", (int)Math.Floor(Math.Round(10 / ProInfo.XYResolution))), ProInfo.ProjDir); | 
						|
                PluginServiceInterface.CommonHelper.DirectoryCopy(SysAppPath.GetCurrentAppPath() + string.Format("工作空间\\模板\\新建变更工程\\{0}\\NMDB.gdb", (int)Math.Floor(Math.Round(10 / ProInfo.XYResolution))), ProInfo.ProjDir); | 
						|
                ProInfo.ZLDatabase = Path.Combine(ProInfo.ProjDir, "ZLDB.gdb"); | 
						|
                ProInfo.NMDatabase = Path.Combine(ProInfo.ProjDir, "NMDB.gdb"); | 
						|
                //ProInfo.Save(); | 
						|
                ISystemCfg cfg2 = BundleRuntime.Instance.GetFirstOrDefaultService<ISystemCfg>(); | 
						|
                SystemCfg = cfg2.Load(); | 
						|
                if (SystemCfg.ZLLayerLoadCfg == null) | 
						|
                { | 
						|
                    SystemCfg.ZLLayerLoadCfg = new List<LayerCfg>(); | 
						|
                } | 
						|
 | 
						|
                #region 增量数据库创建 | 
						|
                wsAPI = new WorkspaceAPI(ProInfo.ZLDatabase, KGIS.Framework.AE.Enum.WorkspaceTypeEnum.GDBFile, true); | 
						|
                GeoDBAPI.SetGeoDatasetSpatialReference(wsAPI.CurrentWorkspace, hookHelper.FocusMap.SpatialReference, ProInfo.XYResolution); | 
						|
                IGroupLayer rootGroupLayer = new GroupLayer() { Name = "增量成果" }; | 
						|
                ILayerGeneralProperties zlcglp = rootGroupLayer as ILayerGeneralProperties; | 
						|
                zlcglp.LayerDescription = "ZLCG"; | 
						|
                LayerCfg GroupLayerInfo = _DataCatalog.AddLayer(rootGroupLayer) as LayerCfg; | 
						|
 | 
						|
                #region 添加单独图层 | 
						|
                IFeatureClassAPI PDTGXFcAPI = wsAPI.OpenFeatureClass("PDTGX"); | 
						|
                IFeatureLayer tempLayer = new FeatureLayer() { Name = "坡度图更新", FeatureClass = PDTGXFcAPI.FeatureClass }; | 
						|
                SetILayerSymbol(tempLayer, "PDTGX"); | 
						|
                _DataCatalog.AddLayer(tempLayer, GroupLayerInfo); | 
						|
 | 
						|
                IFeatureClassAPI CCWJQGXFcAPI = wsAPI.OpenFeatureClass("CCWJQGX"); | 
						|
                tempLayer = new FeatureLayer() { Name = "拆除未尽区更新", FeatureClass = CCWJQGXFcAPI.FeatureClass }; | 
						|
                SetILayerSymbol(tempLayer, "CCWJQGX"); | 
						|
                _DataCatalog.AddLayer(tempLayer, GroupLayerInfo); | 
						|
 | 
						|
                IFeatureClassAPI GDDBGXFcAPI = wsAPI.OpenFeatureClass("GDDBGX"); | 
						|
                tempLayer = new FeatureLayer() { Name = "耕地等别更新层", FeatureClass = GDDBGXFcAPI.FeatureClass }; | 
						|
                SetILayerSymbol(tempLayer, "GDDBGX"); | 
						|
                _DataCatalog.AddLayer(tempLayer, GroupLayerInfo); | 
						|
 | 
						|
                IFeatureClassAPI GFBQGXFcAPI = wsAPI.OpenFeatureClass("GFBQGX"); | 
						|
                tempLayer = new FeatureLayer() { Name = "光伏板区更新层", FeatureClass = GFBQGXFcAPI.FeatureClass }; | 
						|
                SetILayerSymbol(tempLayer, "GFBQGX"); | 
						|
                _DataCatalog.AddLayer(tempLayer, GroupLayerInfo); | 
						|
 | 
						|
                //23年规则起,不在包含“临时用地”单独图层 | 
						|
                //IFeatureClassAPI LSYDGXFcAPI = wsAPI.OpenFeatureClass("LSYDGX"); | 
						|
                //tempLayer = new FeatureLayer() { Name = "临时用地更新层", FeatureClass = LSYDGXFcAPI.FeatureClass }; | 
						|
                //SetILayerSymbol(tempLayer, "LSYDGX"); | 
						|
                //_DataCatalog.AddLayer(tempLayer, GroupLayerInfo); | 
						|
 | 
						|
                //23年新增“工厂化工种植更新” | 
						|
                if (wsAPI.ExistFeatureClass("GCHZZGX")) | 
						|
                { | 
						|
                    IFeatureClassAPI GCHZZGXFcAPI = wsAPI.OpenFeatureClass("GCHZZGX"); | 
						|
                    tempLayer = new FeatureLayer() { Name = "工厂化种植更新", FeatureClass = GCHZZGXFcAPI.FeatureClass }; | 
						|
                    SetILayerSymbol(tempLayer, "GCHZZGX"); | 
						|
                    _DataCatalog.AddLayer(tempLayer, GroupLayerInfo); | 
						|
                } | 
						|
 | 
						|
                IFeatureClassAPI LMFWGXFcAPI = wsAPI.OpenFeatureClass("LMFWGX"); | 
						|
                tempLayer = new FeatureLayer() { Name = "路面范围更新层", FeatureClass = LMFWGXFcAPI.FeatureClass }; | 
						|
                SetILayerSymbol(tempLayer, "LMFWGX"); | 
						|
                _DataCatalog.AddLayer(tempLayer, GroupLayerInfo); | 
						|
 | 
						|
                IFeatureClassAPI TTQGXFcAPI = wsAPI.OpenFeatureClass("TTQGX"); | 
						|
                tempLayer = new FeatureLayer() { Name = "推土区更新层", FeatureClass = TTQGXFcAPI.FeatureClass }; | 
						|
                SetILayerSymbol(tempLayer, "TTQGX"); | 
						|
                _DataCatalog.AddLayer(tempLayer, GroupLayerInfo); | 
						|
 | 
						|
                IFeatureClassAPI MPFcAPI = wsAPI.OpenFeatureClass("MP"); | 
						|
                tempLayer = new FeatureLayer() { Name = "摸排", FeatureClass = MPFcAPI.FeatureClass }; | 
						|
                //SetILayerSymbol(tempLayer, "MP"); | 
						|
                _DataCatalog.AddLayer(tempLayer, GroupLayerInfo); | 
						|
 | 
						|
                IFeatureClassAPI YNRGDQCZFWFcAPI = wsAPI.OpenFeatureClass("YNRGDQCZFW"); | 
						|
                tempLayer = new FeatureLayer() { Name = "已纳入过渡期处置范围", FeatureClass = YNRGDQCZFWFcAPI.FeatureClass }; | 
						|
                //SetILayerSymbol(tempLayer, "YNRGDQCZFW"); | 
						|
                _DataCatalog.AddLayer(tempLayer, GroupLayerInfo); | 
						|
                #endregion | 
						|
 | 
						|
                //hookHelper.FocusMap.AddLayer(rootGroupLayer); | 
						|
                IGroupLayer groupLayer = new GroupLayer() { Name = "增量图层" }; | 
						|
                ILayerGeneralProperties zltclp = groupLayer as ILayerGeneralProperties; | 
						|
                zltclp.LayerDescription = "ZLTC"; | 
						|
                GroupLayerInfo = _DataCatalog.AddLayer(groupLayer, GroupLayerInfo) as LayerCfg; | 
						|
                //rootGroupLayer.Add(groupLayer); | 
						|
 | 
						|
                IFeatureClassAPI xzqgcFcAPI = wsAPI.OpenFeatureClass("XZQGXGC"); | 
						|
                tempLayer = new FeatureLayer() { Name = "行政区更新过程", FeatureClass = xzqgcFcAPI.FeatureClass }; | 
						|
                SetILayerSymbol(tempLayer, "XZQGXGC"); | 
						|
                _DataCatalog.AddLayer(tempLayer, GroupLayerInfo); | 
						|
 | 
						|
                IFeatureClassAPI xzqjxgxFcAPI = wsAPI.OpenFeatureClass("XZQJXGX"); | 
						|
                tempLayer = new FeatureLayer() { Name = "行政区界线更新", FeatureClass = xzqjxgxFcAPI.FeatureClass }; | 
						|
                SetILayerSymbol(tempLayer, "XZQJXGX"); | 
						|
                _DataCatalog.AddLayer(tempLayer, GroupLayerInfo); | 
						|
 | 
						|
                IFeatureClassAPI xzqgxFcAPI = wsAPI.OpenFeatureClass("XZQGX"); | 
						|
                tempLayer = new FeatureLayer() { Name = "行政区更新", FeatureClass = xzqgxFcAPI.FeatureClass }; | 
						|
                SetILayerSymbol(tempLayer, "XZQGX"); | 
						|
                _DataCatalog.AddLayer(tempLayer, GroupLayerInfo); | 
						|
 | 
						|
                IFeatureClassAPI cjdcqgcFcAPI = wsAPI.OpenFeatureClass("CJDCQGXGC"); | 
						|
                tempLayer = new FeatureLayer() { Name = "村级调查区更新过程", FeatureClass = cjdcqgcFcAPI.FeatureClass }; | 
						|
                SetILayerSymbol(tempLayer, "CJDCQGXGC"); | 
						|
                _DataCatalog.AddLayer(tempLayer, GroupLayerInfo); | 
						|
 | 
						|
                IFeatureClassAPI cjdcqjxgxFcAPI = wsAPI.OpenFeatureClass("CJDCQJXGX"); | 
						|
                tempLayer = new FeatureLayer() { Name = "村级调查区界线更新", FeatureClass = cjdcqjxgxFcAPI.FeatureClass }; | 
						|
                SetILayerSymbol(tempLayer, "CJDCQJXGX"); | 
						|
                _DataCatalog.AddLayer(tempLayer, GroupLayerInfo); | 
						|
 | 
						|
                IFeatureClassAPI cjdcqgxFcAPI = wsAPI.OpenFeatureClass("CJDCQGX"); | 
						|
                tempLayer = new FeatureLayer() { Name = "村级调查区更新", FeatureClass = cjdcqgxFcAPI.FeatureClass }; | 
						|
                SetILayerSymbol(tempLayer, "CJDCQGX"); | 
						|
                _DataCatalog.AddLayer(tempLayer, GroupLayerInfo); | 
						|
 | 
						|
                IFeatureClassAPI czcgcFcAPI = wsAPI.OpenFeatureClass("CZCDYDGXGC"); | 
						|
                tempLayer = new FeatureLayer() { Name = "城镇村更新过程", FeatureClass = czcgcFcAPI.FeatureClass }; | 
						|
                SetILayerSymbol(tempLayer, "CZCDYDGXGC"); | 
						|
                _DataCatalog.AddLayer(tempLayer, GroupLayerInfo); | 
						|
 | 
						|
                IFeatureClassAPI czcgxFcAPI = wsAPI.OpenFeatureClass("CZCDYDGX"); | 
						|
                tempLayer = new FeatureLayer() { Name = "城镇村更新", FeatureClass = czcgxFcAPI.FeatureClass }; | 
						|
                SetILayerSymbol(tempLayer, "CZCDYDGX"); | 
						|
                _DataCatalog.AddLayer(tempLayer, GroupLayerInfo); | 
						|
 | 
						|
                IFeatureClassAPI bgtbFcAPI = wsAPI.OpenFeatureClass("DLTBGXGC"); | 
						|
                AddFieldSXWHForDBLayer.JudgeTypeAddField(ProInfo, bgtbFcAPI.FeatureClass); | 
						|
                tempLayer = new FeatureLayer() { Name = "地类图斑更新过程", FeatureClass = bgtbFcAPI.FeatureClass }; | 
						|
                SetILayerSymbol(tempLayer, "DLTBGXGC"); | 
						|
                _DataCatalog.AddLayer(tempLayer, GroupLayerInfo); | 
						|
 | 
						|
                IFeatureClassAPI jctbFcAPI = wsAPI.OpenFeatureClass("DLTBGX"); | 
						|
                AddFieldSXWHForDBLayer.JudgeTypeAddField(ProInfo, jctbFcAPI.FeatureClass); | 
						|
                tempLayer = new FeatureLayer() { Name = "地类图斑更新", FeatureClass = jctbFcAPI.FeatureClass }; | 
						|
                SetILayerSymbol(tempLayer, "DLTBGX"); | 
						|
                _DataCatalog.AddLayer(tempLayer, GroupLayerInfo); | 
						|
                #endregion | 
						|
 | 
						|
                ILayer groupLayerNM = MapsManager.Instance.MapService.GetGroupLayer("NMSJ"); | 
						|
                object GroupLayerInfoNM = _DataCatalog.GetNodeByLayer(groupLayerNM); | 
						|
                IWorkspaceAPI NmWsAPI = new WorkspaceAPI(ProInfo.NMDatabase, WorkspaceTypeEnum.GDBFile, true); | 
						|
                GeoDBAPI.SetGeoDatasetSpatialReference(NmWsAPI.CurrentWorkspace, hookHelper.FocusMap.SpatialReference, ProInfo.XYResolution); | 
						|
                IFeatureLayer JCdltb_Layer = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("地类图斑"); | 
						|
                IFeatureClassAPI DLTBNMKAPI = null;// NmWsAPI.CreateFeatureClass("DLTB_NMK", (JCdltb_Layer.FeatureClass as IGeoDataset).SpatialReference, JCdltb_Layer.FeatureClass.Fields); | 
						|
                DLTBNMKAPI = NmWsAPI.OpenFeatureClass2("DLTB_NMK"); | 
						|
                if (DLTBNMKAPI != null) | 
						|
                { | 
						|
                    if (DLTBNMKAPI.FeatureClass.FindField("XZQDM") == -1) | 
						|
                        DLTBNMKAPI.AddField("XZQDM", ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeString, "行政区代码"); | 
						|
                    if (DLTBNMKAPI != null && DLTBNMKAPI.FeatureClass.FindField("XZQTZLX") == -1) | 
						|
                        DLTBNMKAPI.AddField("XZQTZLX", ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeInteger, "行政区调整类型"); | 
						|
                    tempLayer = new FeatureLayer() { Name = "地类图斑年末库", FeatureClass = DLTBNMKAPI.FeatureClass }; | 
						|
                    #region 设置图层样式 | 
						|
                    tempLayer.MinimumScale = 25000; | 
						|
                    tempLayer.MaximumScale = 0; | 
						|
                    #endregion | 
						|
                    _DataCatalog.AddLayer(tempLayer, GroupLayerInfoNM); | 
						|
                } | 
						|
                _DataCatalog.UpdateTree(); | 
						|
                Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { MsgType = "SaveProject" }); | 
						|
                Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { MsgType = "InitProject" }); | 
						|
                NmWsAPI?.CloseWorkspace(); | 
						|
                DLTBNMKAPI?.CloseFeatureClass(); | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                MessageHelper.ShowTips("系统设置初始化页面失败:" + ex.Message); | 
						|
                LogAPI.Debug(ex); | 
						|
            } | 
						|
            finally | 
						|
            { | 
						|
                wsAPI?.CloseWorkspace(); | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        private void SetILayerSymbol(IFeatureLayer tempLayer, string LayerAliseName) | 
						|
        { | 
						|
            IFeatureRenderer result = null; | 
						|
            LayerCfg layerCfg = SystemCfg.ZLLayerLoadCfg.FirstOrDefault(x => x.FcName == LayerAliseName);//默认配置默认不为NULL | 
						|
            if (layerCfg == null) | 
						|
                layerCfg = SystemCfg.ZLLayerLoadCfg[0].Layers.FirstOrDefault(x => x.FcName == LayerAliseName);//默认配置默认不为NULL | 
						|
            if (layerCfg != null && !string.IsNullOrWhiteSpace(layerCfg.Symbol)) | 
						|
            { | 
						|
                AdvancedDrawingInfo ad = AdvancedDrawingInfo.FromJson(layerCfg.Symbol); | 
						|
                if (ad != null) | 
						|
                { | 
						|
                    if (ad.DrawingInfo.Renderer is Framework.LayerStyleConvert.XSDClass.SimpleRenderer) | 
						|
                    { | 
						|
                        Symbol symbol1 = (ad.DrawingInfo.Renderer as Framework.LayerStyleConvert.XSDClass.SimpleRenderer).Symbol; | 
						|
                        ISimpleRenderer simpleRander2 = SymbolConvert.Instance().GetSimpleRenderer(symbol1, SymbolTypeEnum.Fill); | 
						|
                        result = simpleRander2 as IFeatureRenderer; | 
						|
                    } | 
						|
                    else if (ad.DrawingInfo.Renderer is Framework.LayerStyleConvert.XSDClass.UniqueValueRenderer) | 
						|
                    { | 
						|
                        Renderer rander = ad.DrawingInfo.Renderer; | 
						|
                        IUniqueValueRenderer uniqueValueRander = SymbolConvert.Instance().GetUniqueValueRenderer(rander, SymbolTypeEnum.Fill); | 
						|
                        result = uniqueValueRander as IFeatureRenderer; | 
						|
                    } | 
						|
                } | 
						|
 | 
						|
                #region 样式 | 
						|
                if (result != null) | 
						|
                    (tempLayer as IGeoFeatureLayer).Renderer = result; | 
						|
                #endregion | 
						|
 | 
						|
                #region 显示比例设置 | 
						|
                tempLayer.MinimumScale = layerCfg.MinScale; | 
						|
                tempLayer.MaximumScale = layerCfg.MaxScale; | 
						|
                #endregion | 
						|
 | 
						|
                #region 图层透明度 | 
						|
                if (tempLayer is ILayerEffects mLayerEffects)//透明度 | 
						|
                    mLayerEffects.Transparency = (short)layerCfg.Transparency; | 
						|
                #endregion | 
						|
 | 
						|
                #region 是否显示 | 
						|
                tempLayer.Visible = layerCfg.Visible;//是否显示 | 
						|
                #endregion | 
						|
 | 
						|
                #region 是否可选择 | 
						|
                tempLayer.Selectable = layerCfg.Selectable; | 
						|
                #endregion | 
						|
 | 
						|
                #region 过滤条件 | 
						|
                IFeatureLayerDefinition pFLDefinition = tempLayer as IFeatureLayerDefinition; | 
						|
                if (pFLDefinition != null) | 
						|
                { | 
						|
                    pFLDefinition.DefinitionExpression = layerCfg.DefinitionExpression; | 
						|
                } | 
						|
                #endregion | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        public override void OnCreate(object Hook) | 
						|
        { | 
						|
            if (hookHelper == null) | 
						|
                hookHelper = new HookHelperClass(); | 
						|
 | 
						|
            hookHelper.Hook = Hook; | 
						|
            pEditor = new EngineEditorClass(); | 
						|
        } | 
						|
 | 
						|
        public override bool Enabled | 
						|
        { | 
						|
            get | 
						|
            { | 
						|
                //验证是否打开工程 | 
						|
                if (!(MapsManager.Instance.MapService.GetProjectInfo() is ProjectInfo ProInfo)) | 
						|
                    return false; | 
						|
                else | 
						|
                    return string.IsNullOrWhiteSpace(ProInfo.ZLDatabase) && !string.IsNullOrWhiteSpace(ProInfo.BGDatabase);//对应BUG:6333,创建变更数据库后才能创建增量数据库 | 
						|
            } | 
						|
        } | 
						|
 | 
						|
    } | 
						|
}
 | 
						|
 |