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.
		
		
		
		
		
			
		
			
				
					
					
						
							281 lines
						
					
					
						
							13 KiB
						
					
					
				
			
		
		
	
	
							281 lines
						
					
					
						
							13 KiB
						
					
					
				using ESRI.ArcGIS.Carto; | 
						|
using ESRI.ArcGIS.Controls; | 
						|
using KGIS.Framework.AE; | 
						|
using KGIS.Framework.Commands; | 
						|
using KGIS.Framework.Maps; | 
						|
using KGIS.Framework.Platform; | 
						|
using KGIS.Framework.Utils; | 
						|
using KGIS.Framework.Utils.ExtensionMethod; | 
						|
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 CmdCreateBGDB : BaseMenuCommand | 
						|
    { | 
						|
        /// <summary> | 
						|
        /// 编辑器 | 
						|
        /// </summary> | 
						|
        private EngineEditorClass pEditor = null; | 
						|
        private IHookHelper hookHelper = null; | 
						|
        private IDataCatalogService _DataCatalog = null; | 
						|
        private SystemConfig2 SystemCfg = null; | 
						|
        public override void OnClick() | 
						|
        { | 
						|
            IWorkspaceAPI wsAPI = null; | 
						|
            IWorkspaceAPI wsAPI_YCL = null; | 
						|
            try | 
						|
            { | 
						|
                if (_DataCatalog == null) | 
						|
                    _DataCatalog = BundleRuntime.Instance.GetFirstOrDefaultService<IDataCatalogService>(); | 
						|
                if (_DataCatalog == null) | 
						|
                    return; | 
						|
                if (!(MapsManager.Instance.MapService.GetProjectInfo() is ProjectInfo ProInfo)) | 
						|
                    return; | 
						|
                if (!string.IsNullOrWhiteSpace(ProInfo.BGDatabase)) | 
						|
                    return; | 
						|
                if (pEditor == null) | 
						|
                    pEditor = new EngineEditorClass(); | 
						|
                if (pEditor.EditState != esriEngineEditState.esriEngineStateNotEditing) | 
						|
                { | 
						|
                    MessageHelper.ShowTips("请先关闭编辑!"); | 
						|
                    return; | 
						|
                } | 
						|
                if (hookHelper == null) | 
						|
                    hookHelper = new HookHelperClass { Hook = MapsManager.Instance.MapService.Hook }; | 
						|
                PluginServiceInterface.CommonHelper.DirectoryCopy(SysAppPath.GetCurrentAppPath() + string.Format("工作空间\\模板\\新建变更工程\\{0}\\BGDB.gdb", (int)Math.Floor(Math.Round(10 / ProInfo.XYResolution))), ProInfo.ProjDir); | 
						|
                ProInfo.BGDatabase = Path.Combine(ProInfo.ProjDir, "BGDB.gdb"); | 
						|
                ProInfo.Save(); | 
						|
                wsAPI = new WorkspaceAPI(ProInfo.BGDatabase, KGIS.Framework.AE.Enum.WorkspaceTypeEnum.GDBFile, true); | 
						|
                GeoDBAPI.SetGeoDatasetSpatialReference(wsAPI.CurrentWorkspace, hookHelper.FocusMap.SpatialReference, ProInfo.XYResolution); | 
						|
 | 
						|
                object GroupLayerInfo = null; | 
						|
                ILayer groupLayer = MapsManager.Instance.MapService.GetGroupLayer("XZQTZ"); | 
						|
                if (groupLayer == null) | 
						|
                { | 
						|
                    groupLayer = new GroupLayer() { Name = "行政区调整" }; | 
						|
                    ILayerGeneralProperties layerGeneralProperties = groupLayer as ILayerGeneralProperties; | 
						|
                    layerGeneralProperties.LayerDescription = "XZQTZ"; | 
						|
                    GroupLayerInfo = _DataCatalog.AddLayer(groupLayer); | 
						|
                } | 
						|
                if (GroupLayerInfo == null) | 
						|
                    GroupLayerInfo = _DataCatalog.GetNodeByLayer(groupLayer); | 
						|
 | 
						|
                if (wsAPI.ExistFeatureClass("YSDLTB"))//新增原始地类图斑 | 
						|
                { | 
						|
                    IFeatureClassAPI YSDLTBFcAPI = wsAPI.OpenFeatureClass("YSDLTB"); | 
						|
                    IFeatureLayer YSDLTBLayer = new FeatureLayer() { Name = "原始地类图斑", FeatureClass = YSDLTBFcAPI.FeatureClass }; | 
						|
                    _DataCatalog.AddLayer(YSDLTBLayer, GroupLayerInfo); | 
						|
                } | 
						|
 | 
						|
                if (wsAPI.ExistFeatureClass("XJJXTQTB"))//新增图斑 | 
						|
                { | 
						|
                    IFeatureClassAPI XZQHRQJCTBFcAPI = wsAPI.OpenFeatureClass("XJJXTQTB"); | 
						|
                    IFeatureLayer XZQHRQJCTBLayer = new FeatureLayer() { Name = "县级界线提取图斑", FeatureClass = XZQHRQJCTBFcAPI.FeatureClass }; | 
						|
                    _DataCatalog.AddLayer(XZQHRQJCTBLayer, GroupLayerInfo); | 
						|
                } | 
						|
 | 
						|
                IFeatureClassAPI DLTBHRGCSJFcAPI = wsAPI.OpenFeatureClass("DLTBHRGC"); | 
						|
                IFeatureLayer DLTBHRGCSJLayer = new FeatureLayer() { Name = "地类图斑划入过程", FeatureClass = DLTBHRGCSJFcAPI.FeatureClass }; | 
						|
                _DataCatalog.AddLayer(DLTBHRGCSJLayer, GroupLayerInfo); | 
						|
 | 
						|
                GroupLayerInfo = null; | 
						|
                groupLayer = MapsManager.Instance.MapService.GetGroupLayer("BGSJ"); | 
						|
                if (groupLayer == null) | 
						|
                { | 
						|
                    groupLayer = new GroupLayer() { Name = "变更数据" }; | 
						|
                    ILayerGeneralProperties layerGeneralProperties = groupLayer as ILayerGeneralProperties; | 
						|
                    layerGeneralProperties.LayerDescription = "BGSJ"; | 
						|
                    GroupLayerInfo = _DataCatalog.AddLayer(groupLayer); | 
						|
                } | 
						|
                if (GroupLayerInfo == null) | 
						|
                    GroupLayerInfo = _DataCatalog.GetNodeByLayer(groupLayer); | 
						|
 | 
						|
                ISystemCfg cfg2 = BundleRuntime.Instance.GetFirstOrDefaultService<ISystemCfg>(); | 
						|
                SystemCfg = cfg2.Load(); | 
						|
                if (SystemCfg.BGLayerLoadCfg == null) | 
						|
                    SystemCfg.BGLayerLoadCfg = new List<LayerCfg>(); | 
						|
 | 
						|
                IFeatureClassAPI XJKZJXFcAPI = wsAPI.OpenFeatureClass("XJKZJX"); | 
						|
                IFeatureLayer tempLayer = new FeatureLayer() { Name = "县级控制界线", FeatureClass = XJKZJXFcAPI.FeatureClass }; | 
						|
                SetILayerSymbol(tempLayer, "XJKZJX"); | 
						|
                _DataCatalog.AddLayer(tempLayer, GroupLayerInfo); | 
						|
 | 
						|
                IFeatureClassAPI ZLTBGXFcAPI = wsAPI.OpenFeatureClass2("ZLTBGX"); | 
						|
                if (ZLTBGXFcAPI != null && ZLTBGXFcAPI.FeatureClass != null) | 
						|
                { | 
						|
                    tempLayer = new FeatureLayer() { Name = "增量图斑更新", FeatureClass = ZLTBGXFcAPI.FeatureClass }; | 
						|
                    SetILayerSymbol(tempLayer, "ZLTBGX"); | 
						|
                    _DataCatalog.AddLayer(tempLayer, GroupLayerInfo); | 
						|
                } | 
						|
 | 
						|
                IFeatureClassAPI bgtbFcAPI = wsAPI.OpenFeatureClass("DLTBBG"); | 
						|
                AddFieldSXWHForDBLayer.JudgeTypeAddField(ProInfo, bgtbFcAPI.FeatureClass); | 
						|
                tempLayer = new FeatureLayer() { Name = "变更范围", FeatureClass = bgtbFcAPI.FeatureClass }; | 
						|
                SetILayerSymbol(tempLayer, "DLTBBG"); | 
						|
                LayerCfg layCfg = _DataCatalog.AddLayer(tempLayer, GroupLayerInfo) as LayerCfg; | 
						|
                LayerCfg layerCfg = SystemCfg.BGLayerLoadCfg.FirstOrDefault(x => x.FcName == "DLTBBG"); | 
						|
                layCfg.FieldEditCfg = layerCfg?.FieldEditCfg.ToTrim(); | 
						|
 | 
						|
                GroupLayerInfo = null; | 
						|
                groupLayer = MapsManager.Instance.MapService.GetGroupLayer("JCTBSJ"); | 
						|
                if (groupLayer == null) | 
						|
                { | 
						|
                    groupLayer = new GroupLayer() { Name = "监测数据" }; | 
						|
                    ILayerGeneralProperties layerGeneralProperties = groupLayer as ILayerGeneralProperties; | 
						|
                    layerGeneralProperties.LayerDescription = "JCTBSJ"; | 
						|
                    GroupLayerInfo = _DataCatalog.AddLayer(groupLayer); | 
						|
                } | 
						|
                if (GroupLayerInfo == null) | 
						|
                    GroupLayerInfo = _DataCatalog.GetNodeByLayer(groupLayer); | 
						|
                IFeatureClassAPI jctbFcAPI = wsAPI.OpenFeatureClass("JCTB"); | 
						|
                IFeatureLayer JcTBLayer = new FeatureLayer() { Name = "国家监测图斑", FeatureClass = jctbFcAPI.FeatureClass }; | 
						|
 | 
						|
                IFeatureLayerDefinition pFLDefinition = JcTBLayer as IFeatureLayerDefinition; | 
						|
                if (pFLDefinition != null) | 
						|
                { | 
						|
                    pFLDefinition.DefinitionExpression = "SJLY='GJJC'"; | 
						|
                } | 
						|
                _DataCatalog.AddLayer(JcTBLayer, GroupLayerInfo); | 
						|
 | 
						|
                IFeatureLayer ZZBGTBLayer = new FeatureLayer() { Name = "自主变更图斑", FeatureClass = jctbFcAPI.FeatureClass }; | 
						|
                pFLDefinition = ZZBGTBLayer as IFeatureLayerDefinition; | 
						|
                if (pFLDefinition != null) | 
						|
                { | 
						|
                    pFLDefinition.DefinitionExpression = "SJLY='ZZBG'"; | 
						|
                } | 
						|
                _DataCatalog.AddLayer(ZZBGTBLayer, GroupLayerInfo); | 
						|
 | 
						|
                _DataCatalog.UpdateTree(); | 
						|
                Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { MsgType = "SaveProject" }); | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                MessageHelper.ShowTips("系统设置初始化页面失败:" + ex.Message); | 
						|
                LogAPI.Debug(ex); | 
						|
            } | 
						|
            finally | 
						|
            { | 
						|
                if (wsAPI != null) | 
						|
                { | 
						|
                    wsAPI.CloseWorkspace(); | 
						|
                    wsAPI = null; | 
						|
                } | 
						|
                if (wsAPI_YCL != null) | 
						|
                { | 
						|
                    wsAPI_YCL.CloseWorkspace(); | 
						|
                    wsAPI_YCL = null; | 
						|
                } | 
						|
            } | 
						|
        } | 
						|
        private void SetILayerSymbol(IFeatureLayer tempLayer, string LayerAliseName) | 
						|
        { | 
						|
            IFeatureRenderer result = null; | 
						|
            LayerCfg layerCfg = SystemCfg.BGLayerLoadCfg.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 | 
						|
            } | 
						|
        } | 
						|
        private IFeatureRenderer GetSymbol(string pStrSymbol) | 
						|
        { | 
						|
            IFeatureRenderer result = null; | 
						|
            if (!string.IsNullOrWhiteSpace(pStrSymbol)) | 
						|
            { | 
						|
                AdvancedDrawingInfo ad = AdvancedDrawingInfo.FromJson(pStrSymbol); | 
						|
                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; | 
						|
                    } | 
						|
                } | 
						|
            } | 
						|
            return result; | 
						|
        } | 
						|
 | 
						|
        public override void OnCreate(object Hook) | 
						|
        { | 
						|
            if (hookHelper == null) | 
						|
                hookHelper = new HookHelperClass(); | 
						|
            hookHelper.Hook = Hook; | 
						|
        } | 
						|
 | 
						|
        public override bool Enabled | 
						|
        { | 
						|
            get | 
						|
            { | 
						|
                //验证是否打开工程 | 
						|
                if (!(MapsManager.Instance.MapService.GetProjectInfo() is ProjectInfo ProInfo)) | 
						|
                    return false; | 
						|
                else | 
						|
                    return string.IsNullOrWhiteSpace(ProInfo.BGDatabase); | 
						|
            } | 
						|
        } | 
						|
 | 
						|
    } | 
						|
}
 | 
						|
 |