using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Controls; using KGIS.Framework.AE.ExtensionMethod; using KGIS.Framework.Commands; using KGIS.Framework.Maps; using KGIS.Framework.Platform; using KGIS.Framework.Utils; using KGIS.Framework.Utils.Helper; using Kingo.Plugin.DTBJK_XJ.View; using Kingo.PluginServiceInterface; using Kingo.PluginServiceInterface.Helper; using System; using System.Collections.Generic; using System.Linq; using UIShell.OSGi; namespace Kingo.Plugin.DTBJK_XJ.Commands { /// /// 大数据影像 /// public class CmdMapDataImage : BaseMapMenuCommand { private UCMapDataImage uCMapDataImage = null; LayerCfg rootLayer = null; private ISystemCfg SystemCfg = null; private SystemConfig2 Cfg = null; IDataCatalogService _DataCatalog = null; public override void OnClick() { try { if(SystemCfg == null) SystemCfg = BundleRuntime.Instance.GetFirstOrDefaultService(); if (Cfg == null && SystemCfg != null) Cfg = SystemCfg.Load(); if (_DataCatalog == null) _DataCatalog = BundleRuntime.Instance.GetFirstOrDefaultService(); if (m_hookHelper == null) return; object layerClass = m_hookHelper.GetCustomProperty(); if (layerClass == null) return; string name = ""; if (layerClass as WMTSLayerClass != null) name = (layerClass as WMTSLayerClass).Name; else if (layerClass as WMTSLayer != null) name = (layerClass as WMTSLayer).LayerName; else return; if (name == "天地图1" || name == "天地图2" || name == "天地图3") { MessageHelper.ShowTips("请选择影像切片图层!"); return; } if (string.IsNullOrEmpty(UserLoginHelper.GetYXGroupLayerValueByAliasName(name))) { MessageHelper.ShowTips("请先设置WMTS服务地址!"); return; } uCMapDataImage = new UCMapDataImage(m_hookHelper, name); uCMapDataImage.Closed += (s, e) => { uCMapDataImage.CloseForm(); uCMapDataImage = null; KGIS.Framework.Maps.MapsManager.Instance.MapService.getAxMapControl().CurrentTool = null; }; uCMapDataImage.ShowInMainWindow(); //LoadImage(); } catch (Exception ex) { LogAPI.Debug("大数据影像出现错误,可能的原因是::" + ex.Message); LogAPI.Debug("大数据影像出现错误,可能的原因是::" + ex.StackTrace); MessageHelper.ShowError("大数据影像出现错误,可能的原因是:" + ex.Message); } } private void LoadImage() { ////判断当前地图窗口是否存在“时间轴影像底图”图层,存在则不再添加 //IGroupLayer groupLayer = Kingo.KMapSDK.Common.CommonAPI.GetGroupLayerByName(MapsManager.Instance.MapService.getAxMapControl().Map, Kingo.KMapSDK.Common.GlobalConfig.Instance.GroupName); //if (groupLayer == null) //{ // //初始化时间轴底图服务 // Kingo.KMapSDK.KMap.Instance.InitKMap(UserLoginHelper.GetYXGroupLayerValueByHeader(rootLayer.LayerName)); // //加载时间轴底图服务到地图窗口 // //MapsManager.Instance.MapService.getAxMapControl().AddLayer(Kingo.KMapSDK.KMap.Instance.KMapGroupLayer); // if (Kingo.KMapSDK.KMap.Instance.KMapGroupLayer == null) return; // object GroupLayerInfo = _DataCatalog.GetNodeByLayerName("影响切片"); // Dictionary layers = new Dictionary(); // if (Kingo.KMapSDK.KMap.Instance.KMapGroupLayer is ICompositeLayer) // { // layers = GetAllLayerInGroupLayer(Kingo.KMapSDK.KMap.Instance.KMapGroupLayer as ICompositeLayer, Kingo.KMapSDK.KMap.Instance.KMapGroupLayer); // } // else // layers.Add(Kingo.KMapSDK.KMap.Instance.KMapGroupLayer, null); // // 遍历字典输出键与值 // var fristChilds = layers.Where(a => a.Value == Kingo.KMapSDK.KMap.Instance.KMapGroupLayer).ToList(); // foreach (var fristChild in fristChilds) // { // LayerCfg fristChildLayerCfg = null; // object tempGroupLayerInfo = GroupLayerInfo; // var secondChilds = layers.Where(a => a.Key == fristChild.Key).ToList(); // if (secondChilds == null || secondChilds.Count == 0) // { // tempGroupLayerInfo = _DataCatalog.AddLayer(fristChild.Key, GroupLayerInfo); // fristChildLayerCfg = new LayerCfg(node) // { // IsChecked = true, // LayerName = fristChild.Key.Name, // FcPath = UserLoginHelper.GetAppsetingValueByKey("JSYXUrl"), // LayerType = EnumLayerType.WMTSLayer // }; // Cfg.SJYXLayerLoadCfg.Add(fristChildLayerCfg); // } // } // if (_DataCatalog != null) // { // _DataCatalog.UpdateTree(); // } // Cfg.Save(); // Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { MsgType = "SaveProjectForNoEditor" }); // Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { MsgType = "InitProject" }); // //刷新地图窗口 // MapsManager.Instance.MapService.getAxMapControl().ActiveView.PartialRefresh(esriViewDrawPhase.esriViewBackground, null, MapsManager.Instance.MapService.getAxMapControl().Extent); //} } public Dictionary GetAllLayerInGroupLayer(ICompositeLayer groupLayer, ILayer parentLayer) { Dictionary allLayers = new Dictionary(); if (groupLayer != null && groupLayer.Count > 0) { for (int i = 0; i < groupLayer.Count; i++) { ILayer layer = groupLayer.get_Layer(i); if (layer is ICompositeLayer && !(layer is ESRI.ArcGIS.Carto.IAnnotationLayer)) { if (!allLayers.Keys.Contains(layer)) allLayers.Add(layer, parentLayer); Dictionary list = GetChildLayerInGroupLayer(layer as ICompositeLayer, layer); foreach (var item in list) { if (!allLayers.Keys.Contains(item.Key)) { allLayers.Add(item.Key, item.Value); } } } else { if (layer is ILayer) { if (!allLayers.Keys.Contains(layer)) allLayers.Add(layer, parentLayer); } } } } return allLayers; } public Dictionary GetChildLayerInGroupLayer(ICompositeLayer groupLayer, ILayer parentLayer) { Dictionary allLayers = new Dictionary(); if (groupLayer != null && groupLayer.Count > 0) { for (int i = 0; i < groupLayer.Count; i++) { ILayer layer = groupLayer.get_Layer(i); if (layer is ICompositeLayer && !(layer is ESRI.ArcGIS.Carto.IAnnotationLayer)) { if (!allLayers.Keys.Contains(layer)) allLayers.Add(layer, parentLayer); } else { if (layer is ILayer) { if (!allLayers.Keys.Contains(layer)) allLayers.Add(layer, parentLayer); } } } } return allLayers; } public override void OnCreate(object Hook) { try { if (m_hookHelper == null) { m_hookHelper = new HookHelper(); m_hookHelper.Hook = Hook; } } catch (Exception ex) { LogAPI.Debug("加载 大数据影像 命令时发生异常,异常信息如下:"); LogAPI.Debug(ex); LogAPI.Debug("异常信息结束"); } } public override bool Enabled { get { return KGIS.Framework.Maps.MapsManager.Instance.MapService.GetProjectInfo() == null ? false : true; } } } }