using DevExpress.XtraBars; using DevExpress.XtraBars.Docking; using ESRI.ArcGIS.ADF; using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Controls; using ESRI.ArcGIS.Display; using ESRI.ArcGIS.esriSystem; using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.Geometry; using ESRI.ArcGIS.SystemUI; using KGIS.Framework.AE; using KGIS.Framework.AE.Enum; using KGIS.Framework.Commands; using KGIS.Framework.Core.Services; using KGIS.Framework.DBOperator; using KGIS.Framework.Maps; using KGIS.Framework.Maps.Handlers; using KGIS.Framework.Menus; using KGIS.Framework.Menus.Entities; using KGIS.Framework.Platform; using KGIS.Framework.Utils; using KGIS.Framework.Utils.ExtensionMethod; using KGIS.Framework.Utils.Helper; //using KGIS.Framework.Utils.Model; using KGIS.Framework.Views; using Kingo.Framework.LayerStyleConvert.Common; using Kingo.Framework.LayerStyleConvert.XSDClass; using Kingo.ImageViewForWebSocket; using Kingo.KMapSDK; using Kingo.Plugin.MapView.Common; using Kingo.Plugin.MapView.Views.AppMenuView; using Kingo.PluginServiceInterface; using Kingo.PluginServiceInterface.Helper; using KUI.Windows; using System; using System.Collections.Generic; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Security.AccessControl; using System.Text; using System.Windows.Forms; using System.Xml; using System.Xml.Linq; using UIShell.OSGi; using Path = System.IO.Path; using PolygonElement = KGIS.Framework.Maps.PolygonElement; namespace Kingo.Plugin.MapView { public partial class UcMapControl : UserControl, IMapService, IDocumentView2, ICameraPoint { public DockManager dockManager { get; private set; } private ControlsSynchronizer _CtrlSynchronizer; private object TocHook = null; private EngineEditor editor; private ControlsMapPanToolClass panTool = null; private ProjectInfo projectInfo = null; private ICommandManager _CmdManager; public event OpenedProjectHandler ProjectOpened; public event EventHandler ProjectClosed; public event EventHandler OnSelectionChanged; public event MouseEventHandler MapContainerMouseWheel; private string m_FolderPath = string.Empty; private bool m_IsLoad = true; private string m_XmlPath = AppDomain.CurrentDomain.BaseDirectory + "\\" + "ProjectPath.xml"; private string StrTig { get; set; } /// /// 工作目录服务接口 /// IDataCatalogService _DataCatalog = null; IWorkCatalog _workCatalog = null; //IEngineEditor m_EngineEditor = new EngineEditorClass(); private IElementInfo ucJCTBTree { get; set; } LayerCfg allLayerInfo = null; private UCProjectInfoSetting frmUserInfoSetting { get; set; } public UcMapControl() { InitializeComponent(); allLayerInfo = null; EnvironmentVariables.Instance.cameraPoint = this; this.Header = "地图数据"; this.AllowClose = false; this.IsActive = true; this.AllowFloat = false; axMapControl.AutoKeyboardScrolling = false; axMapControl.OnMouseDown += AxMapControl_OnMouseDown; axMapControl.OnMouseMove += AxMapControl_OnMouseMove; axMapControl.OnMouseUp += AxMapControl_OnMouseUp; axMapControl.OnSelectionChanged += PMapCtrl_OnSelectionChanged; axMapControl.OnExtentUpdated += AxMapControl_OnExtentUpdated; if (editor == null) editor = new EngineEditorClass(); List Listobjid_update = new List(); List Listobjid_insert = new List(); editor.OnStopOperation += () => { #region 变化图斑提取 //添加新的监测图斑时,自动维护相应的属性值 if (projectInfo != null && projectInfo.ProjType == EnumProjType.BHTBTQ) { IWorkspaceEdit2 workspaceEdit2 = (IWorkspaceEdit2)editor.EditWorkspace; IDataChangesEx dataChangesEx = workspaceEdit2.get_EditDataChanges(esriEditDataChangesType.esriEditDataChangesWithinSession); int featureOID = -1; IFIDSet fids = dataChangesEx.ChangedIDs["JCTB", esriDifferenceType.esriDifferenceTypeInsert]; fids.Next(out featureOID); while (featureOID != -1) { IFeatureLayer pFeatureLayer = MapsManager.Instance.MapService.GetFeatureLayerByName("JCTB"); IFeature feature = pFeatureLayer.FeatureClass.GetFeature(featureOID); feature.Value[feature.Fields.FindField("XZQDM")] = projectInfo.CODE; feature.Value[feature.Fields.FindField("XMC")] = GetXZQDic(projectInfo.CODE); IArea area = feature.ShapeCopy as IArea; IPoint point = new PointClass(); area.QueryCentroid(point); if (area.Area > 0) { feature.Value[feature.Fields.FindField("XZB")] = point.X; feature.Value[feature.Fields.FindField("YZB")] = point.Y; feature.Value[feature.Fields.FindField("JCMJ")] = area.Area > 0 ? (area.Area / 666.7).ToDouble(2) : 0; feature.Store(); } Marshal.FinalReleaseComObject(feature); feature = null; fids.Next(out featureOID); } Marshal.FinalReleaseComObject(fids); } #endregion }; panel1.MouseWheel += MapCtrlContainer_MouseWheel; dockManager = dockManager1; Platform.Instance.NotifyMsgEven2 += o => { switch (o.MsgType) { case "InitProject": LoadProject(); AddMask(); break; case "SaveProject": SaveProject(); break; case "SaveProjectForNoEditor": SaveProjectForNoEditor(); break; case "LoadProject": LoadProject(o.Content.ToTrim()); break; default: break; } if (o.MsgType == "ExtentUpdated" && o.Content.ToTrim() == "Map2") { try { StrTig = o.Content.ToTrim(); axMapControl.ActiveView.Extent = o.Extend as IEnvelope;// MapsManager.Instance.MapService.getAxMapControl().Extent; axMapControl.ActiveView.Refresh(); } catch { } } }; } /// /// 根据区划代码获取县级名称 /// /// /// public string GetXZQDic(string Codes) { IRDBHelper rdbHelper = null; string CodeName = string.Empty; try { string systemPath = SysAppPath.GetDataBasePath() + "System.mdb"; if (File.Exists(systemPath)) { string connStr = SysConfigsOprator.GetDBConnectionByName("MDBOledbConnection"); connStr = string.Format(connStr, systemPath); rdbHelper = RDBFactory.CreateDbHelper(connStr, DatabaseType.MSAccess); string strSQL = "select OBJECTID AS ID, XZQ AS CODE,XZQMC AS NAME from XZQ Where XZQ LIKE '" + Codes + "%'"; DataTable dt = rdbHelper.ExecuteDatatable("Dic", strSQL, true); if (dt != null) { CodeName = dt.Rows[0]["NAME"].ToString(); } } } catch (Exception ex) { LogAPI.Debug(ex.Message); LogAPI.Debug(ex.StackTrace); } finally { if (rdbHelper != null) { rdbHelper.DisConnect(); } } return CodeName; } private void AddMask() { try { if (Platform.Instance.SystemType != SystemTypeEnum.BGFWCG) return; IUcZYQMagrHelper ucZYQMagrHelper = BundleRuntime.Instance.GetFirstOrDefaultService(); if (ucZYQMagrHelper != null) { int selectIdZYQ = ucZYQMagrHelper.GetCheckedID(); if (selectIdZYQ < 0) return; selectIdZYQ++; IGeometry geometry = null; IFeatureClass featureClass = MapsManager.Instance.MapService.GetFeatureClassByName("ZYQ"); if (featureClass != null) { IQueryFilter filter = new QueryFilterClass(); filter.WhereClause = string.Format("OBJECTID = {0}", selectIdZYQ); IFeatureCursor pCursor = featureClass.Search(filter, true); IFeature feature = null; if ((feature = pCursor.NextFeature()) != null) { geometry = feature.Shape; } if (geometry != null && !geometry.IsEmpty) { ShowMaskHelper showMaskForBHTBHelper = new ShowMaskHelper(); showMaskForBHTBHelper.axMapControl = MapsManager.Instance.MapService.getAxMapControl(); showMaskForBHTBHelper.ShowMask(geometry); } } } } catch (Exception ex) { return; } } private void AxMapControl_OnExtentUpdated(object sender, IMapControlEvents2_OnExtentUpdatedEvent e) { if (StrTig != "Map2") { Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { MsgType = "ExtentUpdated", Content = "MainMap", Extend = e.newEnvelope }); } StrTig = ""; } private void MapCtrlContainer_MouseWheel(object sender, MouseEventArgs e) { MapContainerMouseWheel?.Invoke(sender, e); } private void PMapCtrl_OnSelectionChanged(object sender, EventArgs e) { OnSelectionChanged?.Invoke(sender, e); } private void AxMapControl_OnMouseUp(object sender, IMapControlEvents2_OnMouseUpEvent e) { //滚轮按下执行地图漫游工具,拖动地图 if (e.button == 4 && panTool != null && panTool.Enabled) { panTool.OnMouseUp(1, e.shift, e.x, e.y); panTool.Deactivate(); axMapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, axMapControl.ActiveView.Extent); } } private void AxMapControl_OnMouseMove(object sender, IMapControlEvents2_OnMouseMoveEvent e) { //滚轮按下执行地图漫游工具,拖动地图 if (e.button == 4) { if (panTool != null && panTool.Enabled) { this.Cursor = global::System.Windows.Forms.Cursors.Hand; panTool.OnMouseMove(1, e.shift, e.x, e.y); } } Platform.Instance.UpdateStateBar("", string.Format("X:{0:F3} Y:{1:F3} Unit {2}", e.mapX, e.mapY, axMapControl.Map.MapUnits)); } private void AxMapControl_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e) { if (editor == null) editor = new EngineEditorClass(); if (e.button == 2) { //在未开启编辑状态下,地图控件上右键,则将当前工具切换至平移工具 if (this.axMapControl.CurrentTool == null || (this.axMapControl.CurrentTool.GetType() != typeof(ControlsMapPanToolClass) && editor.EditState != esriEngineEditState.esriEngineStateEditing)) { ControlsMapPanToolClass tool = new ControlsMapPanToolClass(); tool.OnCreate(this.axMapControl.Object); this.axMapControl.CurrentTool = tool; } } else if (e.button == 4) { //鼠标滚轮键按下 if (panTool == null) { panTool = new ControlsMapPanToolClass(); panTool.OnCreate(axMapControl.Object); } this.Cursor = global::System.Windows.Forms.Cursors.Hand; panTool.OnMouseDown(1, e.shift, e.x, e.y); } } #region ExecuteDataCheck public void ExecuteDataCheck(IFeature feature) { IDataCheckHelper dataCheckHelper = UIShell.OSGi.BundleRuntime.Instance.GetFirstOrDefaultService(); if (dataCheckHelper == null) return; dataCheckHelper.DataCheckByThread(new CheckParametr() { CheckType = enumCheckType.Attribute | enumCheckType.Graphic, DataSource = feature, IDataCheckName = "BGQDataCheck" }); } #endregion public UcMapControl(IBundleContext pContext, object pTocHook = null) : this() { TocHook = pTocHook; //CtlsSynchronizer.AddFrameworkControl(TocHook); CtlsSynchronizer.ActivateMap(); InitService(pContext); //object o = MapsManager.Instance; } public void InitService(IBundleContext context) { context.AddService(this); } private IWorkspace GetDefaultWorkspace(IMap pMap = null) { IWorkspace result = null; try { IEnumLayer enumlayer = axMapControl.Map.Layers; if (pMap != null) enumlayer = pMap.Layers; enumlayer.Reset(); ILayer layer = null; while ((layer = enumlayer.Next()) != null) { if (!(layer is IFeatureLayer)) continue; IFeatureLayer featureLayer = layer as IFeatureLayer; if (!IsRemoteDatabase(featureLayer)) { if (featureLayer.FeatureClass == null || !(featureLayer is IDataset)) continue; if ((featureLayer as IDataset).Workspace == null) continue; if (featureLayer is IDataset) { string wsPath = (featureLayer as IDataset).Workspace.PathName; if (projectInfo.GetDHZSDBPath().Equals(wsPath)) { result = (featureLayer as IDataset).Workspace; } } } } return result; } catch { throw; } } private bool IsRemoteDatabase(IFeatureLayer pLayer) { bool result = false; try { if (pLayer != null && pLayer.FeatureClass != null && (pLayer.FeatureClass as FeatureClass).Workspace.Type == esriWorkspaceType.esriRemoteDatabaseWorkspace) { result = true; } } catch (Exception ex) { throw ex; } return result; } private string GetClassShortName(IDataset paramDS) { if (paramDS == null) { return ""; } return GetClassShortName(paramDS.BrowseName.ToUpper()); } private string GetClassShortName(string paramName) { string str = paramName; int num = paramName.LastIndexOf("."); if (num >= 0) { str = paramName.Substring(num + 1); } return str; } public List GetAllLayerInGroupLayer(ICompositeLayer groupLayer) { List allLayers = new List(); 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)) { List list = GetAllLayerInGroupLayer(layer as ICompositeLayer); allLayers.AddRange(list); } else { if (layer is T) { allLayers.Add((T)layer); } } } } return allLayers; } public List GetAllVisibleLayerInGroupLayer(ICompositeLayer groupLayer) { List allLayers = new List(); 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.Visible && !(layer is ESRI.ArcGIS.Carto.IAnnotationLayer)) { allLayers.AddRange(GetAllVisibleLayerInGroupLayer(layer as ICompositeLayer)); } else { if (layer is T && layer.Visible) { if ((layer.MinimumScale == 0 || layer.MinimumScale > axMapControl.MapScale) && (layer.MaximumScale == 0 || layer.MaximumScale < axMapControl.MapScale)) allLayers.Add((T)layer); } } } } return allLayers; } /// 创建菜单项 /// /// /// private BarItem CreateItem(MenuItemEntity itemEntity, object pHook) { try { var itemType = itemEntity.ItemType; var item = CreateItem(itemType); item.Caption = itemEntity.Name; item.Glyph = itemEntity.GetSmallImage(); item.LargeGlyph = itemEntity.GetLargeImage(); var type = item.GetType(); //设置文本信息 var propertyInfo = type.GetProperty("Text"); if (propertyInfo != null) propertyInfo.SetValue(item, itemEntity.Name, null); //注册快捷键 //propertyInfo = type.GetProperty("ShortcutKeys"); if (!string.IsNullOrWhiteSpace(itemEntity.ShortcutKeys)) { if (itemEntity.ShortcutKeys.Contains("+")) { if (itemEntity.ShortcutKeys.StartsWith("Shift")) { Keys key = GetObj(itemEntity.ShortcutKeys.Replace("Shift+", "")); item.ItemShortcut = new BarShortcut(Keys.Shift, key); } else { Shortcut shortcut = GetObj(itemEntity.ShortcutKeys.Replace("+", "").Trim()); BarShortcut ishortcut = new BarShortcut(shortcut); item.ItemShortcut = ishortcut; } } else { Keys key = GetObj(itemEntity.ShortcutKeys); item.ItemShortcut = new BarShortcut(key); } } item.ItemClick += Item_ItemClick; string commandId = itemEntity.CommandId; if (!string.IsNullOrEmpty(commandId)) { if (_CmdManager != null) { item.Tag = _CmdManager.AddCmd(itemEntity.CommandId, itemEntity.Bundle, pHook); if (item.Tag is ICommand) { (item.Tag as ICommand).OnCreate(axMapControl.Object); (item as BarItem).Enabled = (item.Tag as ESRI.ArcGIS.SystemUI.ICommand).Enabled; } else if (item.Tag is BaseMenuCommand) { (item.Tag as BaseMenuCommand).OnCreate(axMapControl.Object); (item as BarItem).Enabled = (item.Tag as BaseMenuCommand).Enabled; } } } if (item is BarCheckItem && item.Tag is ESRI.ArcGIS.SystemUI.ICommand) { (item as BarCheckItem).Checked = (item.Tag as ESRI.ArcGIS.SystemUI.ICommand).Checked; } else if (item.Tag is ICombox) { ICombox combox = item.Tag as ICombox; combox.SetBarEditItem(item); } //CreateChildItems(item, itemEntity); return item; } catch (Exception ex) { LogAPI.Debug("创建菜单项 时异常,异常信息如下:"); LogAPI.Debug(ex); LogAPI.Debug("创建菜单项 时异常信息结束"); throw ex; } } private T GetObj(string pStr) { T t = default(T); try { t = (T)System.Enum.Parse(typeof(T), pStr); } catch (Exception ex) { LogAPI.Debug(ex); } return t; } private void Item_ItemClick(object sender, ItemClickEventArgs e) { BarItem item = e.Item as BarItem; if (item == null || item.Tag == null) { return; } try { if (item.Tag is ITool) { SetCurrentTool(item.Tag); } else if (item.Tag is ICommand) { (item.Tag as ICommand).OnClick(); if (item is BarCheckItem) { (item as BarCheckItem).Checked = (item.Tag as ICommand).Checked; } } else if (item.Tag is IMenuCommand) { //if (item.Tag is IAppMenuCommand) //{ // (item.Tag as IAppMenuCommand).CmdParameter = param; //} (item.Tag as IMenuCommand).OnClick(); } else { //IMapService mapService = MapsManager.Instance.MapService; //if (mapService != null) //{ // mapService.SetCurrentTool(item.Tag); // //if (mapService.Hook is IMapControlDefault) // //{ // // (mapService.Hook as IMapControlDefault).CurrentTool = pCmd as ITool; // //} //} } } catch (Exception ex) { LogAPI.Debug(string.Format("执行【{0}】命令异常,异常信息如下:", item.Caption)); LogAPI.Debug(ex); LogAPI.Debug("异常信息结束"); } } /// 创建菜单项 /// /// 菜单项类型 private BarItem CreateItem(string itemType) { if (string.IsNullOrWhiteSpace(itemType)) return new BarButtonItem(); BarItem item = null; switch (itemType.ToLower()) { case "cmditem": item = new BarButtonItem(); break; case "toolitem": item = new BarCheckItem(); break; case "combobox": item = new BarEditItem(); break; case "labitem": item = new BarHeaderItem(); item.PaintStyle = BarItemPaintStyle.Caption; break; } return item; } private void MoveToCenter(List pFeatures) { try { IEnvelope pEnvelope = new EnvelopeClass() as IEnvelope; pEnvelope = pFeatures[0].ShapeCopy.Envelope; for (int i = 1; i < pFeatures.Count; i++) { if (pEnvelope.XMax < pFeatures[i].ShapeCopy.Envelope.XMax) pEnvelope.XMax = pFeatures[i].ShapeCopy.Envelope.XMax; if (pEnvelope.XMin > pFeatures[i].ShapeCopy.Envelope.XMin) pEnvelope.XMin = pFeatures[i].ShapeCopy.Envelope.XMin; if (pEnvelope.YMax < pFeatures[i].ShapeCopy.Envelope.YMax) pEnvelope.YMax = pFeatures[i].ShapeCopy.Envelope.YMax; if (pEnvelope.YMin > pFeatures[i].ShapeCopy.Envelope.YMin) pEnvelope.YMin = pFeatures[i].ShapeCopy.Envelope.YMin; } ////投影到当前地图坐标系定位缩放到当前要素 pEnvelope.Project((Hook as IMapControlDefault).SpatialReference); IUnitConverter pUnitConverter = new UnitConverterClass(); double dScale = pUnitConverter.ConvertUnits(20, esriUnits.esriMeters, (Hook as IMapControlDefault).MapUnits); pEnvelope.PutCoords(pEnvelope.XMin - dScale, pEnvelope.YMin - dScale, pEnvelope.XMax + dScale, pEnvelope.YMax + dScale); (Hook as IMapControlDefault).ActiveView.Extent = pEnvelope; (Hook as IMapControlDefault).ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, (Hook as IMapControlDefault).ActiveView.Extent); } catch (Exception ex) { MessageHelper.ShowError("操作异常!异常信息:" + ex.Message); LogAPI.Debug(ex); } } public void SwitchWorkspace(string pDirPath) { try { if (!Directory.Exists(pDirPath)) { MessageHelper.Show(string.Format("指定的工作目录{0}不存在,请重新选择!", pDirPath)); } string templatePath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "工作空间", "模板", "移动端数据制作"); ProjectInfo prj = new ProjectInfo(); prj.ProjDir = pDirPath; prj.ProjSuffix = ".prj"; prj.ProjName = "数据制作"; string prjPath = System.IO.Path.Combine(prj.ProjDir, prj.ProjName + prj.ProjSuffix); if (File.Exists(prjPath)) { LoadProject(prjPath); } else { if (!Directory.Exists(prj.ProjDir + "数据制作.gdb") && File.Exists(prj.ProjDir + "\\~temp.mxd")) { File.Delete(prj.ProjDir + "\\~temp.mxd"); } DirectoryCopy(templatePath + "\\数据制作.gdb", prj.ProjDir); File.Copy(templatePath + "\\dic.mdb", prj.ProjDir + "\\dic.mdb", true); //string dicPath = System.IO.Path.Combine(SysAppPath.GetCurrentAppPath(), "Database\\dic.kzd"); //if (System.IO.File.Exists(dicPath)) //{ // File.Copy(templatePath + "\\dic.mdb", prj.ProjDir + "\\dic.mdb", true); //} FileInfo file = new FileInfo(System.IO.Path.Combine(templatePath, "数据制作.MOD")); System.IO.FileStream fileStream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None); byte[] bytes = new byte[fileStream.Length]; fileStream.Read(bytes, 0, bytes.Length); fileStream.Close(); string strBase64 = Convert.ToBase64String(bytes); prj.TempData = strBase64; if (prj.Save()) { LoadProject(prjPath); } } } catch (Exception ex) { MessageHelper.Show("切换目录异常:" + ex.Message); LogAPI.Debug(ex); } } /// /// 设置数据目录图层样式 /// /// /// /// private bool SetCatalogLayerStyle(ILayer layer, XElement element) { bool isSet = false; try { ESRI.ArcGIS.Geometry.esriGeometryType geometryType; IStyleGalleryClass symbologyStyleClass = null; ISymbol symbol = null; IFillSymbol fillSymbol = null; string layerCaption = element.Attribute("LayerCaption").Value; if (layerCaption == layer.Name) { isSet = true; string layerLabelName = element.Attribute("LayerLableName").Value; int layerBorderStyle = int.Parse(element.Attribute("LayerBorderStyle").Value); double layerBorderWidth = double.Parse(element.Attribute("LayerBorderWidth").Value); Color layerFillColor = ColorTranslator.FromHtml(element.Attribute("LayerFillColor").Value); Color layerBorderColor = ColorTranslator.FromHtml(element.Attribute("LayerBorderColor").Value); Color layerLableColor = ColorTranslator.FromHtml(element.Attribute("LayerLableColor").Value); IFeatureLayer2 featureLayer = layer as IFeatureLayer2; if (featureLayer != null) { geometryType = featureLayer.ShapeType; switch (geometryType) { case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint: symbologyStyleClass = new MarkerSymbolStyleGalleryClassClass(); break; case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline: symbologyStyleClass = new LineSymbolStyleGalleryClassClass(); break; case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon: symbologyStyleClass = new FillSymbolStyleGalleryClassClass(); break; } ISimpleRenderer simpleRenderer = (featureLayer as IGeoFeatureLayer).Renderer as ISimpleRenderer; if (simpleRenderer != null) { symbol = simpleRenderer.Symbol; } else { GetDefaultSymbol(geometryType); } fillSymbol = (symbol as IFillSymbol); if (fillSymbol != null) { //填充颜色 IColor color = fillSymbol.Color; System.Drawing.Color fillColor = System.Drawing.Color.FromArgb(layerFillColor.A, layerFillColor.R, layerFillColor.G, layerFillColor.B); color = (IColor)Converter.ToRGBColor(fillColor); color.Transparency = layerFillColor.A; fillSymbol.Color = color; //设置边框颜色、样式、宽度 ISimpleLineSymbol pMarkerLineSymbol = new SimpleLineSymbolClass(); System.Drawing.Color borderColor = System.Drawing.Color.FromArgb(layerBorderColor.A, layerBorderColor.R, layerBorderColor.G, layerBorderColor.B); IColor outlineColor = (IColor)Converter.ToRGBColor(borderColor); pMarkerLineSymbol.Width = Math.Abs(layerBorderWidth); pMarkerLineSymbol.Color = outlineColor; outlineColor.Transparency = layerBorderColor.A; if (layerBorderStyle == 0)//实线 { pMarkerLineSymbol.Style = ESRI.ArcGIS.Display.esriSimpleLineStyle.esriSLSSolid; } else if (layerBorderStyle == 1)//虚线 { pMarkerLineSymbol.Style = ESRI.ArcGIS.Display.esriSimpleLineStyle.esriSLSDash; } else if (layerBorderStyle == 2)//点 { pMarkerLineSymbol.Style = ESRI.ArcGIS.Display.esriSimpleLineStyle.esriSLSDot; } else if (layerBorderStyle == 3)//点划线 { pMarkerLineSymbol.Style = ESRI.ArcGIS.Display.esriSimpleLineStyle.esriSLSDashDot; } else if (layerBorderStyle == 4)//两点划线 { pMarkerLineSymbol.Style = ESRI.ArcGIS.Display.esriSimpleLineStyle.esriSLSDashDotDot; } fillSymbol.Outline = pMarkerLineSymbol; if (!string.IsNullOrWhiteSpace(layerLabelName)) { IGeoFeatureLayer pGeoFeatureLayer = layer as IGeoFeatureLayer; pGeoFeatureLayer.AnnotationProperties.Clear();//必须执行,因为里面有一个默认的 IBasicOverposterLayerProperties pBasic = new BasicOverposterLayerPropertiesClass(); ITextSymbol pTextSymbol = new TextSymbolClass(); Color textColor = System.Drawing.Color.FromArgb(layerLableColor.A, layerLableColor.R, layerLableColor.G, layerLableColor.B); IColor lableColor = (IColor)Converter.ToRGBColor(textColor); ILabelEngineLayerProperties pLableEngine = new LabelEngineLayerPropertiesClass(); pTextSymbol.Color = lableColor;//设置字体颜色 string pLable = "[" + layerLabelName + "]"; pLableEngine.Expression = pLable; pLableEngine.IsExpressionSimple = true; pBasic.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerShape; pLableEngine.BasicOverposterLayerProperties = pBasic; pLableEngine.Symbol = pTextSymbol; pGeoFeatureLayer.AnnotationProperties.Add(pLableEngine as IAnnotateLayerProperties); pGeoFeatureLayer.DisplayAnnotation = true; pLableEngine.Symbol = pTextSymbol; } } } } return isSet; } catch (Exception ex) { LogAPI.Debug(ex.Message); return isSet; } } private ISymbol GetDefaultSymbol(ESRI.ArcGIS.Geometry.esriGeometryType geometryType) { try { ISymbol result = null; IRgbColor rgbColor = new RgbColorClass(); rgbColor.Red = 184; rgbColor.Green = 242; rgbColor.Blue = 200; switch (geometryType) { case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint: result = (new SimpleMarkerSymbolClass { Color = rgbColor, Style = ESRI.ArcGIS.Display.esriSimpleMarkerStyle.esriSMSCircle } as ISymbol); goto IL_B3; case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryMultipoint: goto IL_B3; case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline: break; case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon: result = (new SimpleFillSymbolClass { Color = rgbColor, Style = ESRI.ArcGIS.Display.esriSimpleFillStyle.esriSFSSolid } as ISymbol); goto IL_B3; default: if (geometryType != ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryLine) { goto IL_B3; } break; } result = (new SimpleLineSymbolClass { Color = rgbColor, Width = 1.0, Style = ESRI.ArcGIS.Display.esriSimpleLineStyle.esriSLSSolid } as ISymbol); IL_B3: return result; } catch (Exception ex) { //RdbUtil.AddException(ex); } return null; } public void LoadProject() { try { if (_workCatalog == null) { _workCatalog = BundleRuntime.Instance.GetFirstOrDefaultService(); } if (Platform.Instance.SystemType == SystemTypeEnum.WYZS || Platform.Instance.SystemType == SystemTypeEnum.DTBJK || Platform.Instance.SystemType == SystemTypeEnum.YCLJK) { string workCatalogPathTemp = null; if (Platform.Instance.SystemType == SystemTypeEnum.DTBJK) workCatalogPathTemp = SysAppPath.GetCurrentAppPath() + "DTBProject\\单图斑建库.KBG"; else if (Platform.Instance.SystemType == SystemTypeEnum.YCLJK) workCatalogPathTemp = SysAppPath.GetCurrentAppPath() + "YCLProject\\图斑预处理.KBG"; else if (Platform.Instance.SystemType == SystemTypeEnum.WYZS) workCatalogPathTemp = SysAppPath.GetCurrentAppPath() + "DTBZJProject\\单图斑质检.KBG"; if (!string.IsNullOrEmpty(workCatalogPathTemp)) { if (File.Exists(workCatalogPathTemp)) { LoadProject(workCatalogPathTemp); Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { Content = Platform.Instance.SystemType, MsgType = "LoadDTBViewData" }); //SetJCTBLayer(); //LoadDTBViewData(); } else { InitDTBProject(); //Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { Content = Platform.Instance.SystemType, MsgType = "LoadDTBViewData" }); } return; } } string filePath = string.Empty; #region 获取上次打开的工作目录 if (File.Exists(SysAppPath.GetRecentOpenProjectRecordConfigPath())) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(SysAppPath.GetRecentOpenProjectRecordConfigPath()); string[,] RecentOpenProjectRecord_List = null; SysConfigsOprator configOp = new SysConfigsOprator(); RecentOpenProjectRecord_List = configOp.GetRecentOpenProjectRecordList(); if (RecentOpenProjectRecord_List != null) { for (int i = 0; i < RecentOpenProjectRecord_List.Length / 3; i++) { filePath = RecentOpenProjectRecord_List[i, 1].ToString(); if (Directory.Exists(filePath)) { _workCatalog.SetWorksapce(filePath); break; } } } } #endregion } catch (Exception ex) { LogAPI.Debug(string.Format("执行命令异常,异常信息如下:")); LogAPI.Debug(ex); LogAPI.Debug("异常信息结束"); } } /// /// 初始化单图斑建库工程模板 /// private void InitDTBProject() { try { this.ShowLoading("工程创建中……", 0, 0); string path = null; ProjectInfo pro = null; if (Platform.Instance.SystemType == SystemTypeEnum.DTBJK) { path = SysAppPath.GetCurrentAppPath() + "DTBProject"; pro = new ProjectInfo { ProjType = EnumProjType.DTBJK, ProjSuffix = ".KBG", ProjDir = path, ProjUserName = "今奥科技有限技术股份公司", ProjName = "单图斑建库", XYResolution = 0.0001 //默认值后续可动态配置 }; } else if (Platform.Instance.SystemType == SystemTypeEnum.YCLJK) { path = SysAppPath.GetCurrentAppPath() + "YCLProject"; pro = new ProjectInfo { ProjType = EnumProjType.YCLJK, ProjSuffix = ".KBG", ProjDir = path, ProjUserName = "今奥科技有限技术股份公司", ProjName = "图斑预处理", XYResolution = 0.0001 //默认值后续可动态配置 }; } else if (Platform.Instance.SystemType == SystemTypeEnum.WYZS) { path = SysAppPath.GetCurrentAppPath() + "DTBZJProject"; pro = new ProjectInfo { ProjType = EnumProjType.WYZS, ProjSuffix = ".KBG", ProjDir = path, ProjUserName = "今奥科技有限技术股份公司", ProjName = "单图斑质检", XYResolution = 0.0001 //默认值后续可动态配置 }; } pro.UserName = PluginServiceInterface.CommonHelper.GetAppsetingValueByKey("UserName"); //验证同名工程是否存在 if (!Directory.Exists(pro.ProjDir)) { Directory.CreateDirectory(pro.ProjDir); } string strMxdPath = string.Empty; //单图斑建库及单图斑质检 if (Platform.Instance.SystemType == SystemTypeEnum.DTBJK || Platform.Instance.SystemType == SystemTypeEnum.WYZS) { if (pro.ProjSuffix == ".KBG") { strMxdPath = SysAppPath.GetCurrentAppPath() + "工作空间DTBJK\\初始化工程模板\\LatersToXMLForDTBJK.xml"; File.Copy(SysAppPath.GetCurrentAppPath() + "工作空间DTBJK\\初始化工程模板\\dic.mdb", pro.ProjDir + "\\dic.mdb"); File.Copy(SysAppPath.GetCurrentAppPath() + "工作空间DTBJK\\初始化工程模板\\BGTJ.sqlite", pro.ProjDir + "\\BGTJ.sqlite"); DirectoryCopy(SysAppPath.GetCurrentAppPath() + string.Format("工作空间DTBJK\\DatabaseTemplate\\JCDB.gdb"), pro.ProjDir); pro.JCDatabase = Path.Combine(pro.ProjDir, "JCDB.gdb");//监测数据图层 DirectoryCopy(SysAppPath.GetCurrentAppPath() + string.Format("工作空间DTBJK\\DatabaseTemplate\\BGDB.gdb"), pro.ProjDir); pro.BGDatabase = Path.Combine(pro.ProjDir, "BGDB.gdb"); DirectoryCopy(SysAppPath.GetCurrentAppPath() + string.Format("工作空间DTBJK\\DatabaseTemplate\\Scheme-JK.gdb"), pro.ProjDir); pro.DTBJKDatabase = Path.Combine(pro.ProjDir, "Scheme-JK.gdb"); DirectoryCopy(SysAppPath.GetCurrentAppPath() + string.Format("工作空间DTBJK\\DatabaseTemplate\\DTBDLTBBGGX.gdb"), pro.ProjDir); pro.DTBBGGXDatabase = Path.Combine(pro.ProjDir, "DTBDLTBBGGX.gdb"); DirectoryCopy(SysAppPath.GetCurrentAppPath() + string.Format("工作空间DTBJK\\DatabaseTemplate\\Check.gdb"), pro.ProjDir); pro.DTBCheckDatabase = Path.Combine(pro.ProjDir, "Check.gdb"); pro.LNGDFWPath = Path.Combine(pro.ProjDir, "Scheme-JK.gdb"); } } else if (Platform.Instance.SystemType == SystemTypeEnum.YCLJK) { if (pro.ProjSuffix == ".KBG") { strMxdPath = SysAppPath.GetCurrentAppPath() + "工作空间DTBJK\\初始化工程模板\\LatersToXMLForDTBYCL.xml"; File.Copy(SysAppPath.GetCurrentAppPath() + "工作空间DTBJK\\初始化工程模板\\dic.mdb", pro.ProjDir + "\\dic.mdb"); File.Copy(SysAppPath.GetCurrentAppPath() + "工作空间DTBJK\\初始化工程模板\\BGTJ.sqlite", pro.ProjDir + "\\BGTJ.sqlite"); DirectoryCopy(SysAppPath.GetCurrentAppPath() + string.Format("工作空间DTBJK\\DatabaseTemplate\\Scheme-YCL.gdb"), pro.ProjDir); pro.DTBYCLDatabase = Path.Combine(pro.ProjDir, "Scheme-YCL.gdb"); DirectoryCopy(SysAppPath.GetCurrentAppPath() + string.Format("工作空间DTBJK\\DatabaseTemplate\\Scheme0.gdb"), pro.ProjDir); pro.DTBYCLYHDatabase = Path.Combine(pro.ProjDir, "Scheme0.gdb"); } } LayerCfg StrLayerInfo = SerializeAPI.DeserializeToObject2(strMxdPath); StrLayerInfo.LayerName = pro.ProjName; SetLayerCfgPath(StrLayerInfo, pro); Byte[] bytearr = Encoding.Default.GetBytes(SerializeAPI.SerializeToXML(StrLayerInfo)); string strBase64 = Convert.ToBase64String(bytearr); pro.TempData = strBase64; Platform.Instance.Progress.SetWorkPath(Path.GetDirectoryName(pro.ProjDir)); this.CloseLoading(); if (pro.Save()) { IMapService mapService = MapsManager.Instance.MapService; //设置工作目录时同时会加载 mapService.LoadProject(pro.ProjDir + "\\" + pro.ProjName + pro.ProjSuffix); mapService.SetFolderPath(pro.ProjDir); Platform.Instance.ViewManager.SetFilePath(pro.ProjDir); Platform.Instance.AppMenuManager.HideAppMenu(); } Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { MsgType = "SaveProject" }); this.CloseLoading(); if (string.IsNullOrWhiteSpace(pro.UserName)) { //设置单图斑工程用户信息 frmUserInfoSetting = new UCProjectInfoSetting { WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen, }; frmUserInfoSetting.Closed += UserInfoSet_Closed; frmUserInfoSetting.ShowInMainWindow(true); } } catch (Exception ex) { MessageHelper.ShowError("新建工程失败:" + ex.Message); LogAPI.Debug("新建工程时发生异常,异常信息如下:"); LogAPI.Debug(ex); LogAPI.Debug("异常信息结束。"); } finally { this.CloseLoading(); } } private void SetILayerSymbol(IFeatureLayer tempLayer, string LayerAliseName) { IFeatureRenderer result = null; ISystemCfg cfg2 = BundleRuntime.Instance.GetFirstOrDefaultService(); SystemCfg = cfg2.Load(); if (SystemCfg.BGLayerLoadCfg == null) { SystemCfg.BGLayerLoadCfg = new List(); } 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 void SetLayerCfgPath(LayerCfg StrLayerInfo, ProjectInfo pro) { foreach (LayerCfg CfgItem in StrLayerInfo.Layers)//目录图层一级 { if (CfgItem.LayerType == EnumLayerType.GroupLayer) { SetLayerCfgPath(CfgItem, pro); } else if (CfgItem.LayerType == EnumLayerType.FeatureLayer) { if (Platform.Instance.SystemType == SystemTypeEnum.YCLJK) { if ("标注点,标注线,标注面,自主图斑".Contains(CfgItem.LayerName)) CfgItem.FcPath = pro.DTBYCLYHDatabase; else CfgItem.FcPath = pro.DTBYCLDatabase; } else { if ("单图斑地类图斑更新层,推土区更新".Contains(CfgItem.LayerName)) CfgItem.FcPath = pro.DTBBGGXDatabase; else CfgItem.FcPath = pro.DTBJKDatabase; } } } } private void UserInfoSet_Closed(object sender, EventArgs e) { try { ProjectInfo projectInfo = MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo; if (frmUserInfoSetting != null) { frmUserInfoSetting.Close(); frmUserInfoSetting = null; } if (frmUserInfoSetting == null && string.IsNullOrWhiteSpace(projectInfo.UserName)) { MessageHelper.Show("请输入用户名!"); frmUserInfoSetting = new UCProjectInfoSetting { WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen, }; frmUserInfoSetting.Closed += UserInfoSet_Closed; frmUserInfoSetting.ShowInMainWindow(true); } } catch (Exception ex) { LogAPI.Debug(ex); } } /// /// 文件夹复制 /// /// 原文件夹 /// 目标目录 /// 是否成功复制 public bool DirectoryCopy(string sourceDir, string targetDirPath) { try { if (!System.IO.Directory.Exists(sourceDir)) return false; string targetDir = targetDirPath + "\\" + System.IO.Path.GetFileName(sourceDir); if (!System.IO.Directory.Exists(targetDir)) System.IO.Directory.CreateDirectory(targetDir); // 文件及文件夹名称数组 string[] dirColl = System.IO.Directory.GetDirectories(sourceDir); string[] fileColl = System.IO.Directory.GetFiles(sourceDir); // 便利所有文件 if (fileColl.Length > 0) { string fileName; foreach (string fileDir in fileColl) { fileName = System.IO.Path.GetFileName(fileDir); System.IO.File.Copy(sourceDir + "\\" + fileName, targetDir + "\\" + fileName, true); } } // 遍历所有文件夹 if (dirColl.Length > 0) { string folderName; foreach (string dir in dirColl) { folderName = System.IO.Path.GetFileName(dir); // 递归调用 System.IO.Directory.CreateDirectory(targetDir + "\\" + folderName); DirectoryCopy(dir, targetDir + "\\" + folderName); } } return true; } catch (Exception ex) { LogAPI.Debug("新建工程 页面 中 文件夹复制 时失败,异常原因: " + ex + " ; "); return false; throw; } } private void LoadMap(string filePath) { try { axMapControl.CurrentTool = null; projectInfo = new ProjectInfo(); projectInfo.ProjName = System.IO.Path.GetFileNameWithoutExtension(filePath); projectInfo.ProjSuffix = System.IO.Path.GetExtension(filePath); projectInfo.ProjDir = System.IO.Path.GetDirectoryName(filePath); IMapDocument mDoc = new MapDocumentClass(); mDoc.Open(filePath); IMap map = mDoc.get_Map(0); if (map == null) return; map.Name = projectInfo.ProjName; ISpatialReference reference = GeoDBAPI.GetGeoDatasetSpatialReference(GetDefaultWorkspace(map)); if (map.SpatialReference != reference && reference != null) { map.SpatialReference = reference; } IActiveView view = (IActiveView)map; mDoc.SetActiveView(view); CtlsSynchronizer.ReplaceMap(map); axMapControl.DocumentFilename = filePath; mDoc.Close(); } catch (Exception ex) { throw ex; } } private void CreateXml(string path) { try { System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument(); xmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null)); System.Xml.XmlElement root = xmlDoc.CreateElement("Root"); xmlDoc.AppendChild(root); System.Xml.XmlElement roots = xmlDoc.CreateElement("File"); roots.SetAttribute("path", path); root.AppendChild(roots); xmlDoc.Save(m_XmlPath); } catch (Exception ex) { LogAPI.Debug("在初始化 目录切换 命令时异常,异常信息如下:"); LogAPI.Debug(ex); LogAPI.Debug("在初始化 目录切换 命令时异常信息结束"); } } #region 接口函数 public void InitMapTools(IEnumerable pageDatas) { try { if (barManager1 == null) return; barManager1.BeginUpdate(); if (_CmdManager == null) { _CmdManager = BundleRuntime.Instance.GetFirstOrDefaultService(); } foreach (var pageEntity in pageDatas) { var groupChilds = pageEntity.Childs; if (groupChilds == null) continue; foreach (var groupChild in groupChilds) { Bar subItem = new Bar(); subItem.OptionsBar.AllowQuickCustomization = false; subItem.BarName = groupChild.Name; subItem.Visible = groupChild.Visible; if (groupChild.Name == "地图操作") { subItem.DockStyle = BarDockStyle.Left; } else { subItem.DockStyle = BarDockStyle.Top; } barManager1.Bars.Add(subItem); var itemChilds = groupChild.Childs; if (itemChilds == null) continue; foreach (var itemChild in itemChilds) { var item = CreateItem(itemChild, Hook); //item.PaintStyle = BarItemPaintStyle.Caption; //subItem.LinksPersistInfo.Add(new LinkPersistInfo(DevExpress.XtraBars.BarLinkUserDefines.PaintStyle, item, "", false, true, true, 0, null, DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph)); subItem.LinksPersistInfo.Add(new LinkPersistInfo(item)); } } } } catch (Exception ex) { LogAPI.Debug("加载主菜单异常,异常信息如下:"); LogAPI.Debug(ex); LogAPI.Debug("异常信息结束"); } finally { barManager1.EndUpdate(); } } public void RefreshToolState(object currentTool) { try { if (barManager1 == null) return; foreach (Bar bar in barManager1.Bars) { foreach (LinkPersistInfo linkPersist in bar.LinksPersistInfo) { BarItem item = linkPersist.Item; if (item.Tag is ICommand) { item.Enabled = (item.Tag as ICommand).Enabled; if (item is BarCheckItem) { (item as BarCheckItem).Checked = (item.Tag as ICommand).Checked; if (currentTool == item.Tag) { (item as BarCheckItem).Checked = true; } } } else if (item.Tag is BaseMenuCommand) { item.Enabled = (item.Tag as BaseMenuCommand).Enabled; if (item is BarCheckItem) { (item as BarCheckItem).Checked = (item.Tag as BaseMenuCommand).Checked; if (currentTool == item.Tag) { (item as BarCheckItem).Checked = true; } } } } } } catch (Exception ex) { LogAPI.Debug("刷新工具条状态时发生异常,异常信息如下:"); LogAPI.Debug(ex); LogAPI.Debug("异常信息结束"); } } private IFeatureRenderer GetSymbol(string pStrSymbol) { IFeatureRenderer result = null; try { 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; } } } } catch (Exception ex) { LogAPI.Debug("获取图层样式失败:" + ex.Message); } return result; } private void LaodLayersToMap(ILayer addLayerTemp, List layerInfo2s) { foreach (var item in layerInfo2s) { ILayer addLayer = null; if (item.LayerType == EnumLayerType.GroupLayer) { addLayer = new GroupLayer() { Name = item.LayerName }; ILayerGeneralProperties layerGeneralProperties = addLayer as ILayerGeneralProperties; layerGeneralProperties.LayerDescription = item.FcName; } foreach (LayerCfg subItem in item.Layers) { // LayerCfg GroupLayerInfo = null; if (subItem.LayerType == EnumLayerType.GroupLayer) { ILayer groupLayer = new GroupLayer() { Name = subItem.LayerName }; ILayerGeneralProperties layerGeneralProperties = addLayer as ILayerGeneralProperties; layerGeneralProperties.LayerDescription = subItem.FcName; //GroupLayerInfo = _DataCatalog.AddLayer(groupLayer, addLayer as IGroupLayer) as LayerCfg; //(addLayer as IGroupLayer).Add(addLayer); subItem.Data = groupLayer; LaodLayersToMap(groupLayer, item.Layers);//Group-Group } //工程文件夹或被移动-替换工作目录 if (!string.IsNullOrWhiteSpace(subItem.FcPath) && projectInfo.ProWorkDir != null && _workCatalog.SaveWorkSapcePath != null) { subItem.FcPath = subItem.FcPath.ToString().Replace(projectInfo.ProWorkDir, _workCatalog.SaveWorkSapcePath); } if (addLayer is IGroupLayer && subItem.LayerType == EnumLayerType.FeatureLayer) { if (string.IsNullOrWhiteSpace(subItem.FcPath)) continue; WorkspaceTypeEnum workspaceType = WorkspaceTypeEnum.GDBFile; if (subItem.FcPath.ToLower().EndsWith(".mdb")) { if (!File.Exists(subItem.FcPath)) { continue; } workspaceType = WorkspaceTypeEnum.MDBFile; } else { if (!Directory.Exists(subItem.FcPath)) continue; workspaceType = WorkspaceTypeEnum.ShapeFile; if (subItem.FcPath.ToLower().EndsWith(".gdb")) { workspaceType = WorkspaceTypeEnum.GDBFile; } } IWorkspaceAPI wsAPI = new WorkspaceAPI(subItem.FcPath, workspaceType); IFeatureClass fc = wsAPI.OpenFeatureClass(subItem.FcName).FeatureClass; ILayer tempLayer = new FeatureLayer() { Name = subItem.LayerName, FeatureClass = fc }; IFeatureRenderer render = GetSymbol(subItem.Symbol); if (render != null) (tempLayer as IGeoFeatureLayer).Renderer = render; //(addLayer as IGroupLayer).Add(tempLayer); _DataCatalog.AddLayer(tempLayer, addLayer); subItem.Data = tempLayer; } else if (addLayer is IGroupLayer && subItem.LayerType == EnumLayerType.RasterLayer) { if (string.IsNullOrWhiteSpace(subItem.FcPath)) continue; IRasterLayer layer = new RasterLayerClass(); layer.CreateFromFilePath(subItem.FcPath); layer.Name = subItem.LayerName; //(addLayer as IGroupLayer).Add(layer); _DataCatalog.AddLayer(layer, addLayer); subItem.Data = layer; } else if (addLayer is IGroupLayer && subItem.LayerType == EnumLayerType.KOTilesLayer) { if (string.IsNullOrWhiteSpace(subItem.FcPath)) continue; KOTilesLayer ko = KOTilesLayer.CreateInstance(subItem.FcPath); ko.Name = subItem.LayerName; //(addLayer as IGroupLayer).Add(ko); _DataCatalog.AddLayer(ko, addLayer); subItem.Data = ko; } } if (addLayer != null) axMapControl.Map.AddLayer(addLayer); } } public SystemConfig2 SystemCfg { get; set; } private void LoadLayerToMap(LayerCfg ParentGroup, List layerInfo2s) { try { for (int i = 0; i < layerInfo2s.Count; i++) { IGroupLayer rootGroupLayer = null; LayerCfg GroupLayerInfo = null; if (layerInfo2s[i].LayerType == EnumLayerType.GroupLayer) { rootGroupLayer = new GroupLayer() { Name = layerInfo2s[i].LayerName }; ILayerGeneralProperties layerGeneralProperties = rootGroupLayer as ILayerGeneralProperties; layerGeneralProperties.LayerDescription = layerInfo2s[i].FcName; GroupLayerInfo = _DataCatalog.AddLayer(rootGroupLayer, ParentGroup) as LayerCfg; layerInfo2s[i].Symbol = GroupLayerInfo.Symbol; layerInfo2s[i].SymbolImg = GroupLayerInfo.SymbolImg; layerInfo2s[i].Data = GroupLayerInfo.Data; LoadLayerToMap(GroupLayerInfo, layerInfo2s[i].Layers); } else { GroupLayerInfo = GroupLayerInfo ?? ParentGroup; if (Platform.Instance.SystemType != SystemTypeEnum.WYZS && Platform.Instance.SystemType != SystemTypeEnum.DTBJK && Platform.Instance.SystemType != SystemTypeEnum.YCLJK) { layerInfo2s[i].FcPath = layerInfo2s[i].FcPath.Replace("{工程目录}", projectInfo.ProjDir); layerInfo2s[i].FcPath = layerInfo2s[i].FcPath.Replace("{工作目录}", projectInfo.ProWorkDir); //工程文件夹或被移动-替换工作目录 AddLayerWay-外部路径文件 if (projectInfo.ProjType != EnumProjType.BHTBTQ && layerInfo2s[i].AbsolutePathType != "AddLayerWay" && !string.IsNullOrWhiteSpace(layerInfo2s[i].FcPath) && projectInfo.ProWorkDir != null && _workCatalog.SaveWorkSapcePath != null) { if (layerInfo2s[i].FcPath.ToLower().EndsWith(".mdb") || layerInfo2s[i].FcPath.ToLower().EndsWith(".gdb")) { if (layerInfo2s[i].FcPath.Contains(projectInfo.ProWorkDir)) { string Temppath = layerInfo2s[i].FcPath.ToString().Replace(projectInfo.ProWorkDir, "|"); layerInfo2s[i].FcPath = System.IO.Path.Combine(_workCatalog.SaveWorkSapcePath, projectInfo.ProWorkDir + Temppath.Split('|')[Temppath.Split('|').Length - 1].ToString()); } else { string Temppath = layerInfo2s[i].FcPath.ToString().Replace("\\", "|"); layerInfo2s[i].FcPath = System.IO.Path.Combine(_workCatalog.SaveWorkSapcePath, projectInfo.ProWorkDir, "参考数据", Temppath.Split('|')[Temppath.Split('|').Length - 1].ToString()); } } } } LayerCfg layerInfo3 = new LayerCfg(); if (layerInfo2s[i].LayerType == EnumLayerType.FeatureLayer) { string sdf = layerInfo2s[i].LayerName; ILayer tempLayer = null; if (!string.IsNullOrWhiteSpace(layerInfo2s[i].FcPath)) { WorkspaceTypeEnum workspaceType = WorkspaceTypeEnum.GDBFile; if (layerInfo2s[i].FcPath.ToLower().EndsWith(".mdb")) { if (!File.Exists(layerInfo2s[i].FcPath)) { layerInfo2s.Remove(layerInfo2s[i]); i--; continue; } workspaceType = WorkspaceTypeEnum.MDBFile; } else if (layerInfo2s[i].FcPath.ToLower().EndsWith(".gdb")) { if (!Directory.Exists(layerInfo2s[i].FcPath)) { layerInfo2s.Remove(layerInfo2s[i]); i--; continue; } workspaceType = WorkspaceTypeEnum.GDBFile; } else { workspaceType = WorkspaceTypeEnum.ShapeFile; } IWorkspaceAPI wsAPI = null; if (workspaceType == WorkspaceTypeEnum.GDBFile) wsAPI = new WorkspaceAPI(layerInfo2s[i].FcPath, workspaceType, true); else wsAPI = new WorkspaceAPI(layerInfo2s[i].FcPath, workspaceType); if (wsAPI.OpenFeatureClass2(layerInfo2s[i].FcName) != null) { IFeatureClass fc = wsAPI.OpenFeatureClass(layerInfo2s[i].FcName).FeatureClass; tempLayer = new FeatureLayer() { Name = layerInfo2s[i].LayerName, FeatureClass = fc }; } wsAPI.CloseWorkspace(); wsAPI = null; } else if (string.IsNullOrWhiteSpace(layerInfo2s[i].FcPath) && Platform.Instance.SystemType != SystemTypeEnum.DTBJK && Platform.Instance.SystemType != SystemTypeEnum.YCLJK) continue; if (tempLayer == null) tempLayer = GetFeatureLayerByBasicPath(layerInfo2s[i]);// new FeatureLayer() { Name = layerInfo2s[i].LayerName }; #region 显示比例设置 sdf = tempLayer.Name; tempLayer.MinimumScale = layerInfo2s[i].MinScale; tempLayer.MaximumScale = layerInfo2s[i].MaxScale; #endregion #region 图层透明度 if (tempLayer is ILayerEffects mLayerEffects)//透明度 mLayerEffects.Transparency = (short)layerInfo2s[i].Transparency; #endregion #region 是否显示 tempLayer.Visible = layerInfo2s[i].Visible;//是否显示 #endregion #region 过滤条件 IFeatureLayerDefinition pFLDefinition = tempLayer as IFeatureLayerDefinition; if (pFLDefinition != null) { pFLDefinition.DefinitionExpression = layerInfo2s[i].DefinitionExpression; } #endregion #region 图层样式 IFeatureRenderer render = GetSymbol(layerInfo2s[i].Symbol); if (render != null) (tempLayer as IGeoFeatureLayer).Renderer = render; #endregion #region 图层标注 SetLayerAnnotation(tempLayer, layerInfo2s[i]); #endregion layerInfo2s[i].Data = tempLayer; tempLayer.Visible = layerInfo2s[i].Visible == false ? false : GetParentIsChecked(layerInfo2s[i]); LayerCfg newLayerCfg = _DataCatalog.AddLayer(tempLayer, GroupLayerInfo) as LayerCfg; layerInfo2s[i].Symbol = newLayerCfg.Symbol ?? layerInfo2s[i].Symbol; layerInfo2s[i].SymbolImg = newLayerCfg.SymbolImg; layerInfo2s[i].Data = newLayerCfg.Data; var layerCfg = SystemCfg.ZLLayerLoadCfg.FirstOrDefault(x => x.LayerName == "增量成果"); if (layerCfg != null) { var ilayerCfg = layerCfg.Layers.FirstOrDefault(x => x.LayerName == tempLayer.Name); if (ilayerCfg != null) { layerInfo2s[i].FieldEditCfg = ilayerCfg.FieldEditCfg; } } layerInfo3 = GroupLayerInfo.Layers.FirstOrDefault(x => x.FcName == tempLayer.Name); } else if (layerInfo2s[i].LayerType == EnumLayerType.RasterLayer) { if (string.IsNullOrWhiteSpace(layerInfo2s[i].FcPath)) continue; IRasterLayer layer = new RasterLayerClass(); layer.CreateFromFilePath(layerInfo2s[i].FcPath); layer.Name = layerInfo2s[i].LayerName; LayerCfg layerCfg = SystemCfg.JcLayerLoadCfg.FirstOrDefault(x => x.LayerName == layer.Name); if (layerCfg != null) { layer.MinimumScale = layerCfg.MinScale; layer.MaximumScale = layerCfg.MaxScale; } if (layer is ILayerEffects mLayerEffects) mLayerEffects.Transparency = (short)layerInfo2s[i].Transparency; layer.Visible = layerInfo2s[i].Visible; layerInfo2s[i].Data = layer; layer.Visible = layerInfo2s[i].Visible == false ? false : GetParentIsChecked(layerInfo2s[i]); _DataCatalog.AddLayer(layer, GroupLayerInfo); layerInfo3 = GroupLayerInfo.Layers.FirstOrDefault(x => x.FcName == layer.Name); } else if (layerInfo2s[i].LayerType == EnumLayerType.KOTilesLayer) { if (string.IsNullOrWhiteSpace(layerInfo2s[i].FcPath)) continue; KOTilesLayer ko = KOTilesLayer.CreateInstance(layerInfo2s[i].FcPath); ko.Name = layerInfo2s[i].LayerName; LayerCfg layerCfg = SystemCfg.JcLayerLoadCfg.FirstOrDefault(x => x.LayerName == ko.Name); if (layerCfg != null) { ko.MinimumScale = layerCfg.MinScale; ko.MaximumScale = layerCfg.MaxScale; } if (ko is ILayerEffects mLayerEffects) mLayerEffects.Transparency = (short)layerInfo2s[i].Transparency; ko.Visible = layerInfo2s[i].Visible; layerInfo2s[i].Data = ko; ko.Visible = layerInfo2s[i].Visible == false ? false : GetParentIsChecked(layerInfo2s[i]); _DataCatalog.AddLayer(ko, GroupLayerInfo); layerInfo3 = GroupLayerInfo.Layers.FirstOrDefault(x => x.FcName == ko.Name); } else if (layerInfo2s[i].LayerType == EnumLayerType.WMTSLayer) { } if (layerInfo3 != null) { layerInfo3.AbsolutePathType = layerInfo2s[i].AbsolutePathType; layerInfo3.AbsolutePath = layerInfo2s[i].AbsolutePath; } } } } catch (Exception ex) { LogAPI.Debug("LoadLayerToMap异常:" + ex.Message); LogAPI.Debug("LoadLayerToMap异常:" + ex.StackTrace); } } #region 大数据影像相关 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; } #endregion /// /// 获取模版数据库要素类 /// /// /// private IFeatureLayer GetFeatureLayerByBasicPath(LayerCfg layerCfg) { IFeatureLayer featureLayer = null; IWorkspaceAPI wsAPI = null; try { if (projectInfo == null) projectInfo = MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo; string BasicPath = string.Empty; switch (layerCfg.LayerName) { case "质检结果": BasicPath = projectInfo.DTBCheckDatabase; break; case "基础_历年耕地": BasicPath = projectInfo.DTBJKDatabase; break; default: break; } if (string.IsNullOrWhiteSpace(BasicPath)) return featureLayer ?? new FeatureLayer() { Name = layerCfg.LayerName }; wsAPI = new WorkspaceAPI(BasicPath, WorkspaceTypeEnum.GDBFile, true); if (wsAPI.ExistFeatureClass(layerCfg.FcName)) { IFeatureClass fc = wsAPI.OpenFeatureClass(layerCfg.FcName).FeatureClass; featureLayer = new FeatureLayer() { Name = layerCfg.LayerName, FeatureClass = fc }; } return featureLayer ?? new FeatureLayer() { Name = layerCfg.LayerName }; } catch (Exception ex) { LogAPI.Debug("获取模版数据库要素类失败:" + ex); return featureLayer ?? new FeatureLayer() { Name = layerCfg.LayerName }; } finally { if (wsAPI != null) wsAPI.CloseWorkspace(); } } private bool GetParentIsChecked(LayerCfg layer) { if (allLayerInfo == null) return true; LayerCfg parent = allLayerInfo.GetAllItem().Find(a => a.Layers.Contains(layer)); if (parent == null) { return true; } else if (!parent.Visible) { return false; } else { return GetParentIsChecked(parent); } } public void LoadProject(string pPrjFile) { try { EngineEditor engineEditor = new EngineEditor(); if (engineEditor.EditState == esriEngineEditState.esriEngineStateEditing) { MessageHelper.ShowTips("当前处于编辑状态,请关闭后打开工程!"); return; } if (_DataCatalog == null) _DataCatalog = BundleRuntime.Instance.GetFirstOrDefaultService(); CloseProject(); projectInfo = ProjectInfo.OpenProject(pPrjFile); if (projectInfo == null) { MessageHelper.ShowError("加载工程失败!"); return; } axMapControl.CurrentTool = null; if (projectInfo != null && !string.IsNullOrWhiteSpace(projectInfo.TempData)) { #region 将文件流转换成文件存储到本地 byte[] contentArray = Convert.FromBase64String(projectInfo.TempData); string LayerCfgd = Encoding.Default.GetString(contentArray); LayerCfg layerInfo = SerializeAPI.DeserializeToObject(LayerCfgd); //string strMxdPath = @"C:\Users\Administrator\Desktop\临时文档\新建文件夹\LatersSymbolToXML.xml"; //LayerCfg layerInfo = SerializeAPI.DeserializeToObject2(strMxdPath); allLayerInfo = layerInfo; axMapControl.Map.ClearLayers(); if (layerInfo != null) { if (layerInfo.LayerType == EnumLayerType.Map) { axMapControl.Map.Name = layerInfo.LayerName; Bitmap groupImg = new Bitmap(Image.FromFile(System.IO.Path.Combine(Application.StartupPath, @"images\menu", "MxtFile" + ".png")), 22, 16); //string asd = System.IO.Path.Combine(Application.StartupPath, @"images\menu", "MxdFile" + ".png"); layerInfo.SymbolImg = groupImg; } if (layerInfo.Layers.Count > 0) { ISystemCfg cfg2 = BundleRuntime.Instance.GetFirstOrDefaultService(); SystemCfg = cfg2.Load(); if (SystemCfg.JcLayerLoadCfg == null) { SystemCfg.JcLayerLoadCfg = new List(); } //重新加载大数据影像 #region 大数据影像 LayerCfg tempSJYX = layerInfo.Layers.FirstOrDefault(a => a.LayerName == "影像底图"); LayerCfg tempSJYXWMTSLayer = null; List SJYXAllItem = null; if (tempSJYX != null && tempSJYX.GetAllItem() != null) { SJYXAllItem = tempSJYX.GetAllItem(); if (SJYXAllItem != null) tempSJYXWMTSLayer = SJYXAllItem.FirstOrDefault(b => b.LayerType == EnumLayerType.WMTSLayer); } if (tempSJYX != null && tempSJYX.Layers != null) tempSJYX.Layers.Clear(); List keyAndValues = UserLoginHelper.GetAllYXGroupLayer(); if (keyAndValues != null && keyAndValues.Count > 0) { IGroupLayer groupLayer = Kingo.KMapSDK.Common.CommonAPI.GetGroupLayerByName(MapsManager.Instance.MapService.getAxMapControl().Map, Kingo.KMapSDK.Common.GlobalConfig.Instance.GroupName); IDataCatalogService _DataCatalog = BundleRuntime.Instance.GetFirstOrDefaultService(); if (_DataCatalog == null) return; if (groupLayer != null) { ILayer parent = MapsManager.Instance.MapService.GetGroupLayer(Kingo.KMapSDK.KMap.Instance.KMapGroupLayer.Name); if (parent != null) { _DataCatalog.RemoveLayer(parent); _DataCatalog.UpdateTree(); MapsManager.Instance.MapService.getAxMapControl().Map.DeleteLayer(Kingo.KMapSDK.KMap.Instance.KMapGroupLayer); MapsManager.Instance.MapService.getAxMapControl().ActiveView.Refresh(); } } SystemCfg.SJYXLayerLoadCfg.Clear(); layerInfo.Layers.Remove(tempSJYX); //初始化时间轴底图服务 try { Kingo.KMapSDK.KMap.Instance.InitKMaps(keyAndValues); //加载时间轴底图服务到地图窗口 if (Kingo.KMapSDK.KMap.Instance.KMapGroupLayer != null) { IGroupLayer group = Kingo.KMapSDK.KMap.Instance.KMapGroupLayer as IGroupLayer; ILayerGeneralProperties layerGeneralProperties = group as ILayerGeneralProperties; layerGeneralProperties.LayerDescription = group.Name; if (tempSJYXWMTSLayer != null) { group.MinimumScale = tempSJYXWMTSLayer.MinScale; group.MaximumScale = tempSJYXWMTSLayer.MaxScale; if (group is ILayerEffects mLayerEffects) mLayerEffects.Transparency = (short)tempSJYXWMTSLayer.Transparency; group.Visible = tempSJYXWMTSLayer.Visible; tempSJYXWMTSLayer.Data = group; group.Visible = tempSJYXWMTSLayer.Visible == false ? false : GetParentIsChecked(tempSJYXWMTSLayer); } else group.Visible = false; //影像底图 第一层级 LayerCfg GroupLayerInfo = _DataCatalog.AddLayer(group) as LayerCfg; LayerCfg node = new LayerCfg() { Visible = false, IsChecked = false, LayerName = group.Name, FcPath = UserLoginHelper.GetYXGroupLayerValueByAliasName(group.Name), LayerType = EnumLayerType.GroupLayer }; SystemCfg.SJYXLayerLoadCfg.Add(node); 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.Value == fristChild.Key).ToList(); if (secondChilds != null && secondChilds.Count > 0) { ILayer fristChildGroupLayer = new GroupLayer() { Name = fristChild.Key.Name }; ILayerGeneralProperties fristChildLayerGeneralProperties = fristChildGroupLayer as ILayerGeneralProperties; fristChildLayerGeneralProperties.LayerDescription = fristChild.Key.Name; if (tempSJYXWMTSLayer != null) { fristChildGroupLayer.MinimumScale = tempSJYXWMTSLayer.MinScale; fristChildGroupLayer.MaximumScale = tempSJYXWMTSLayer.MaxScale; if (fristChildGroupLayer is ILayerEffects mLayerEffectsfristChild) mLayerEffectsfristChild.Transparency = (short)tempSJYXWMTSLayer.Transparency; fristChildGroupLayer.Visible = tempSJYXWMTSLayer.Visible; tempSJYXWMTSLayer.Data = fristChildGroupLayer; fristChildGroupLayer.Visible = tempSJYXWMTSLayer.Visible == false ? false : GetParentIsChecked(tempSJYXWMTSLayer); } else fristChildGroupLayer.Visible = false; tempGroupLayerInfo = _DataCatalog.AddLayer(fristChildGroupLayer, GroupLayerInfo); fristChildLayerCfg = new LayerCfg(node) { Visible = false, IsChecked = false, LayerName = fristChild.Key.Name, FcPath = UserLoginHelper.GetYXGroupLayerValueByAliasName(fristChild.Key.Name), LayerType = EnumLayerType.WMTSLayer }; SystemCfg.SJYXLayerLoadCfg.Add(fristChildLayerCfg); } else { if (tempSJYXWMTSLayer != null) { fristChild.Key.MinimumScale = tempSJYXWMTSLayer.MinScale; fristChild.Key.MaximumScale = tempSJYXWMTSLayer.MaxScale; if (fristChild.Key is ILayerEffects mLayerEffectsfristChild) mLayerEffectsfristChild.Transparency = (short)tempSJYXWMTSLayer.Transparency; fristChild.Key.Visible = tempSJYXWMTSLayer.Visible; tempSJYXWMTSLayer.Data = fristChild.Key; fristChild.Key.Visible = tempSJYXWMTSLayer.Visible == false ? false : GetParentIsChecked(tempSJYXWMTSLayer); } else fristChild.Key.Visible = false; tempGroupLayerInfo = _DataCatalog.AddLayer(fristChild.Key, GroupLayerInfo); fristChildLayerCfg = new LayerCfg(node) { Visible = false, IsChecked = false, LayerName = fristChild.Key.Name, FcPath = UserLoginHelper.GetYXGroupLayerValueByAliasName(fristChild.Key.Name), LayerType = EnumLayerType.WMTSLayer }; SystemCfg.SJYXLayerLoadCfg.Add(fristChildLayerCfg); } foreach (var secondChild in secondChilds) { if (tempSJYXWMTSLayer != null) { secondChild.Key.MinimumScale = tempSJYXWMTSLayer.MinScale; secondChild.Key.MaximumScale = tempSJYXWMTSLayer.MaxScale; if (secondChild.Key is ILayerEffects mLayerEffectssecondChild) mLayerEffectssecondChild.Transparency = (short)tempSJYXWMTSLayer.Transparency; secondChild.Key.Visible = tempSJYXWMTSLayer.Visible; tempSJYXWMTSLayer.Data = secondChild.Key; secondChild.Key.Visible = tempSJYXWMTSLayer.Visible == false ? false : GetParentIsChecked(tempSJYXWMTSLayer); } else secondChild.Key.Visible = false; _DataCatalog.AddLayer(secondChild.Key, tempGroupLayerInfo); LayerCfg secondLayerCfg = new LayerCfg(fristChildLayerCfg) { Visible = false, IsChecked = false, LayerName = secondChild.Key.Name, FcPath = UserLoginHelper.GetYXGroupLayerValueByAliasName(secondChild.Key.Name), LayerType = EnumLayerType.WMTSLayer }; SystemCfg.SJYXLayerLoadCfg.Add(secondLayerCfg); } } layerInfo.Layers.Add(GroupLayerInfo); tempSJYX = layerInfo.Layers.FirstOrDefault(a => a.LayerName == "影像底图"); } } catch (Exception exce) { LogAPI.Debug("加载大数据影像 异常:" + exce.Message); LogAPI.Debug("加载大数据影像 异常:" + exce.StackTrace); } } else { layerInfo.Layers.Remove(tempSJYX); } #endregion layerInfo.Layers.Reverse(); foreach (var item in layerInfo.Layers) { if (item.LayerName == "影像底图" && tempSJYX != null && tempSJYX.GetAllItem() != null && tempSJYX.GetAllItem().FirstOrDefault(b => b.LayerType == EnumLayerType.WMTSLayer) != null) continue; IGroupLayer rootGroupLayer = new GroupLayer() { Name = item.LayerName, Visible = item.Visible }; ILayerGeneralProperties layerGeneralProperties = rootGroupLayer as ILayerGeneralProperties; layerGeneralProperties.LayerDescription = item.FcName; LayerCfg GroupLayerInfo = _DataCatalog.AddLayer(rootGroupLayer) as LayerCfg; item.Symbol = GroupLayerInfo.Symbol; item.SymbolImg = GroupLayerInfo.SymbolImg; item.Data = GroupLayerInfo.Data; LoadLayerToMap(GroupLayerInfo, item.Layers); } layerInfo.Layers.Reverse(); } if (_DataCatalog != null) { _DataCatalog.CurrentLayers = layerInfo; _DataCatalog.UpdateTree(); } Byte[] bytearr = System.Text.Encoding.Default.GetBytes(SerializeAPI.SerializeToXML(layerInfo)); string strBase64 = Convert.ToBase64String(bytearr); projectInfo.TempData = strBase64; projectInfo.Save(); } try { #region 装载地图 IWorkspaceAPI wsAPI = new WorkspaceAPI(projectInfo.JCKPath, WorkspaceTypeEnum.GDBFile); ISpatialReference reference = GeoDBAPI.GetGeoDatasetSpatialReference(wsAPI.CurrentWorkspace); if (reference == null) { reference = GetCurentProjectedCoordinate(projectInfo.PrjFileStr); } if (axMapControl.Map.SpatialReference != reference && reference != null) { axMapControl.Map.SpatialReference = reference; } #endregion if (projectInfo.MapExtent != null && projectInfo.MapExtent.XMax > 0 && projectInfo.MapExtent.YMax > 0 && projectInfo.MapExtent.XMin > 0 && projectInfo.MapExtent.YMin > 0) { IEnvelope env = axMapControl.ActiveView.Extent; env.XMax = projectInfo.MapExtent.XMax; env.YMax = projectInfo.MapExtent.YMax; env.XMin = projectInfo.MapExtent.XMin; env.YMin = projectInfo.MapExtent.YMin; axMapControl.ActiveView.Extent = env; } //axMapControl.Map = axMapControl.Map.Copy(); } finally { } SetFolderPath(projectInfo.ProjDir); #region 记录最近打开的工程 //使用接口调用不确定是否为当前工作目录 string workCatalogPath = SplitWorkCatalogPath(pPrjFile); string workCatalogPathTemp = workCatalogPath + "\\RecentWorkCatalogRecord.xml"; XmlDocument docWork = new XmlDocument(); if (File.Exists(workCatalogPathTemp) == false) { XmlDeclaration dec = docWork.CreateXmlDeclaration("1.0", "utf-8", null); docWork.AppendChild(dec); XmlElement projectmessage = docWork.CreateElement("projectmessage"); docWork.AppendChild(projectmessage); docWork.Save(workCatalogPathTemp); } UpDataFileAttribute(workCatalogPathTemp); SysConfigsOprator configOp = new SysConfigsOprator(); //记录不存在,可以加 if (configOp.JudgeRecentOpenProjectRecordXmlMsgIsExist(workCatalogPathTemp, pPrjFile) == false) { docWork.Load(workCatalogPathTemp); XmlElement projectrecord = docWork.DocumentElement; XmlElement project = docWork.CreateElement("project"); project.SetAttribute("ProjectPath", pPrjFile); projectrecord.AppendChild(project); project.SetAttribute("LastOpenTime", DateTime.Now.Year + "-" + DateTime.Now.Month + "-" + DateTime.Now.Day + " " + DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second); projectrecord.AppendChild(project); //加上工程唯一标识码---2020-6-12 string sProjectUniqueID_Now = System.Guid.NewGuid().ToString("N"); sProjectUniqueID_Now += DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString(); project.SetAttribute("ProjectUniqueID", sProjectUniqueID_Now); projectrecord.AppendChild(project); project.SetAttribute("ProjType", Platform.Instance.SystemType.ToTrim()); projectrecord.AppendChild(project); docWork.Save(workCatalogPathTemp); } else { //更新打开记录的时间 configOp.UpdateProjectFileOpenTime(workCatalogPathTemp, pPrjFile); } #endregion ProjectOpened?.Invoke(null, new ProjectArgs(projectInfo)); } string ring = SysConfigsOprator.GetAppsetingValueByKey("Ring"); #region 单图斑建库不需要授权验证 if (RunIDService2.Instance.Secretkey is null) return; #endregion ring = Decrypt(ring, RunIDService2.Instance.Secretkey); IPointCollection py = new PolygonClass(); ring = ring.Replace("POLYGON((", "").Replace("))", ""); string[] points = ring.Split(','); foreach (var item in points) { string[] xy = item.Split(' '); if (!string.IsNullOrEmpty(xy[0])) py.AddPoint(new PointClass() { X = xy[0].ToDouble(), Y = xy[1].ToDouble() }); } IGeometry geo = py as IPolygon; ISpatialReferenceFactory NewSpatialReference = new SpatialReferenceEnvironmentClass(); geo.SpatialReference = NewSpatialReference.CreateGeographicCoordinateSystem(4490); geo.Project(axMapControl.Map.SpatialReference); ITopologicalOperator topo = geo as ITopologicalOperator; geo = topo.Buffer(2000); if (string.IsNullOrWhiteSpace(RunIDService2.Instance.Area)) return; //RunIDService2.Instance.Area = "113.672189445838,29.5445025464221;113.674780898419,29.5538753998546;113.701036907537,29.5619667292916;113.703271032312,29.5737472305565;113.728065241476,29.5814296430658;113.730506236069,29.5882305110216;113.72180845195,29.5981916415709;113.714908315116,29.6115914363939;113.700369113137,29.6099134436897;113.6953225086,29.6348894093267;113.672875331586,29.6354090935205;113.663931638311,29.6396170811324;113.662126446635,29.6633090724344;113.652666745806,29.6818636464943;113.64199627008,29.6726730250061;113.602871647016,29.6668273654561;113.554668258905,29.6728419265816;113.535555299977,29.6854613645623;113.528957441395,29.7007731081284;113.545355979903,29.7486616021041;113.542229089153,29.7712650559793;113.556918366136,29.7984533689952;113.561973187234,29.8065616278606;113.562697175743,29.8100010824577;113.559731900403,29.8121393968801;113.556377748795,29.8156353469605;113.572431727121,29.8351352257007;113.56391902912,29.8526500772604;113.603278403139,29.8775300941483;113.620968979039,29.8987163161281;113.646176590223,29.9198835060142;113.669368914261,29.9251254215999;113.690165507591,29.9256276003578;113.659227355269,29.9031459113497;113.667075910438,29.8935207769548;113.661490078874,29.8814927630501;113.670407089747,29.85787047763;113.7100824322,29.8409276157232;113.711286111745,29.8304365301236;113.738815122822,29.8041364810043;113.740939250502,29.8165538490895;113.762089741447,29.8262406132185;113.78816387954,29.8174971479217;113.785953750843,29.8098836804694;113.795360816635,29.8030080534899;113.799160891553,29.7948756763448;113.807430116224,29.7952919449776;113.813280933787,29.8072339778784;113.831126362636,29.7938128483825;113.855127904827,29.8129356819566;113.86739213361,29.8057059081432;113.87648535357,29.8202414643093;113.895647196403,29.8255658007337;113.903588539662,29.8341265134432;113.910424087836,29.8335183420794;113.912052354168,29.8393529063506;113.919092467777,29.8487576999041;113.904372002384,29.864215412778;113.923502111859,29.8848707414145;113.937916080263,29.8852587922305;113.937731326637,29.8717281510483;113.947920394616,29.8690742492733;113.95295374687,29.8734275299451;113.956896952155,29.8747177792446;113.959381324924,29.8740283049994;113.960676849402,29.8736687426157;113.962319512292,29.8751968097791;113.960883499039,29.8815093827451;113.958697774393,29.8911160382025;113.961988632386,29.8953943781068;113.963215307708,29.8969890246439;113.967172740952,29.8974616312853;113.972830172899,29.8981370423029;113.993204963744,29.8936752666882;114.023300475456,29.9146075574597;114.0390605966,29.9074327317217;114.037699759084,29.9340572650935;114.051792059689,29.9447039519426;114.05295775514,29.9713141417686;114.07129721007,29.9910854084222;114.094008487758,29.9866259538265;114.116757550228,29.9666043498142;114.134074796786,29.9255096904288;114.147111232515,29.9176035592078;114.152069654698,29.8873811991018;114.159686864605,29.8827777725355;114.166380158647,29.8757235219821;114.170503085988,29.8699346619422;114.172659810995,29.866371990232;114.17567626303,29.8542297850871;114.172371968494,29.8522078144413;114.171115703486,29.84367356524;114.176451793087,29.8350163773508;114.172680733594,29.8334408152698;114.167715583789,29.824697387795;114.159875104255,29.8109869549732;114.167788411704,29.8027380589187;114.174570918831,29.7792351891774;114.167807837268,29.7605632620057;114.176232577057,29.7496548280721;114.1578888375,29.7410165459216;114.155933396733,29.7314039064953;114.184218966974,29.7201329498954;114.209467520814,29.7291582613439;114.218111903101,29.7243626898426;114.236012639636,29.7014228176329;114.225781028504,29.6930146897363;114.228854219987,29.6805189355768;114.221355193287,29.6720530401913;114.189646676224,29.6674027775449;114.174831006201,29.6545404768989;114.166710418725,29.6439133045843;114.122674315467,29.6520613634896;114.056341451424,29.6313613844561;114.048526665701,29.6376586384469;114.035814946605,29.6351734806015;114.016976116019,29.6369195412727;114.004117368051,29.6292767183716;113.980866116356,29.6546241574212;113.950556093013,29.641277743452;113.946993768725,29.619385802198;113.932098230655,29.619265458565;113.918972850696,29.6086670685312;113.87180330466,29.6122141844208;113.856813921097,29.6019838780728;113.840638525266,29.5957229378519;113.838350946298,29.5864242812261;113.835754979929,29.573372540421;113.847536289081,29.5570559440134;113.847735438665,29.5483967865813;113.772057756796,29.5347459407102;113.773885886538,29.5278281990955;113.764834479406,29.5245239769588;113.768393042467,29.509892300721;113.748600081366,29.4981904984826;113.750897520608,29.4820802578662;113.738582487231,29.4696511486735;113.716065281407,29.4741007325227;113.677233889245,29.5117111605733;113.637506408177,29.5086071065593;113.627100199249,29.5112539244845;113.623624965331,29.5281239635167;113.64903315024,29.541876420418;113.672189445838,29.5445025464221;";// RunIDService2.Instance.Area.ToTrim().Replace(",", " ").Replace("|", ";").Replace(";", ","); string SQstring = RunIDService2.Instance.Area.Replace('\r', ' ').ToTrim(); string[] rings = SQstring.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries); string coord = string.Empty; if (rings.Length > 500) return; if (rings.Length > 1) { coord = "MULTIPOLYGON("; foreach (var r in rings) { string Temp_Coordinate = string.Empty; string[] ps = r.TrimEnd(';').Split(';'); string strRing = "(("; if (ps.Length == 1) { strRing += ps[0]; } else { foreach (var item in ps) { strRing += item.Replace('\n', ' ').Replace(',', ' ') + ","; } } char[] charsToTrim = { ',' }; strRing = strRing.TrimEnd(charsToTrim); strRing = strRing.ToTrim(); strRing = strRing.TrimEnd(charsToTrim); strRing += ")),"; coord += strRing; } coord = coord.TrimEnd(','); coord += ")"; IGeometry geo2 = GetPolygonFromWkt(coord); geo2.SpatialReference = NewSpatialReference.CreateGeographicCoordinateSystem(4490); geo2.Project(axMapControl.Map.SpatialReference); //GeometryBag ExterGeometryBag = (geo2 as ESRI.ArcGIS.Geometry.IPolygon4).ExteriorRingBag as GeometryBag; if (geo2 == null) return; //IGeometry firstGeo = null; IGeometryCollection ExterRingGeometryCollection = geo2 as IGeometryCollection; if (ExterRingGeometryCollection == null) return; IGeometryCollection geometry = new ESRI.ArcGIS.Geometry.PolygonClass() as IGeometryCollection; for (int i = 0; i < ExterRingGeometryCollection.GeometryCount; i++) { IGeometry ExterGeometry = ExterRingGeometryCollection.get_Geometry(i); if (ExterGeometry != null && !ExterGeometry.IsEmpty) { geometry.AddGeometry(ExterGeometry); } else { continue; } } ITopologicalOperator topo2 = geometry as ITopologicalOperator; IGeometry buf = topo2.Buffer(2000); GeometryBag ExterGeometryBag = (buf as ESRI.ArcGIS.Geometry.IPolygon4).ExteriorRingBag as GeometryBag; ExterRingGeometryCollection = ExterGeometryBag as IGeometryCollection; geometry = new ESRI.ArcGIS.Geometry.PolygonClass() as IGeometryCollection; for (int i = 0; i < ExterRingGeometryCollection.GeometryCount; i++) { IGeometry ExterGeometry = ExterRingGeometryCollection.get_Geometry(i); if (ExterGeometry != null && !ExterGeometry.IsEmpty) { geometry.AddGeometry(ExterGeometry); } else { continue; } } topo = geo as ITopologicalOperator; geo = topo.Difference(geometry as IGeometry); } else { foreach (var geoRing in rings) { string strGeo = geoRing.Replace('\r', ' ').ToTrim(); if (strGeo.Split(new char[] { ';' }).Length < 10) strGeo = geoRing.Replace(";", ","); if (strGeo.Contains(";")) { coord = string.Format("POLYGON(("); string[] ps = strGeo.TrimEnd(';').Split(';'); foreach (var item in ps) { coord += item.Replace('\r', ' ').Replace(',', ' ') + ","; } } else { coord = string.Format("POLYGON(("); coord += strGeo; } coord = coord.TrimEnd(','); coord += "))"; IGeometry geo2 = GetPolygonFromWkt(coord); IArea area = geo2 as IArea; if (area.Area < 0) { (geo2 as IPolygon).ReverseOrientation(); } geo2.SpatialReference = NewSpatialReference.CreateGeographicCoordinateSystem(4490); geo2.Project(axMapControl.Map.SpatialReference); ITopologicalOperator topo2 = geo2 as ITopologicalOperator; IGeometry buf = topo2.Buffer(2000); topo = geo as ITopologicalOperator; GeometryBag ExterGeometryBag = (buf as ESRI.ArcGIS.Geometry.IPolygon4).ExteriorRingBag as GeometryBag; if (ExterGeometryBag == null) continue; //IGeometry firstGeo = null; IGeometryCollection ExterRingGeometryCollection = ExterGeometryBag as IGeometryCollection; IGeometryCollection geometry = new ESRI.ArcGIS.Geometry.PolygonClass() as IGeometryCollection; for (int i = 0; i < ExterRingGeometryCollection.GeometryCount; i++) { IGeometry ExterGeometry = ExterRingGeometryCollection.get_Geometry(i); if (ExterGeometry != null && !ExterGeometry.IsEmpty) { geometry.AddGeometry(ExterGeometry); } else { continue; } } geo = topo.Difference(geometry as IGeometry); } } if (geo != null && !geo.IsEmpty) { MapsManager.Instance.MapService.DrawGraph(geo, true); MapsManager.Instance.MapService.Zoom(geo); DrawBaseGraph(geo, 150, 150, 150); } } catch (Exception ex) { MessageHelper.ShowError("加载工程异常:" + ex.Message); LogAPI.Debug("加载工程异常:" + ex); } finally { this.CloseLoading(); } } private IGeometry GetPolygonFromWkt(string pointsStr) { try { //OSGeo.OGR.Ogr.RegisterAll(); IGeometry geometry = new PolygonClass(); OSGeo.OGR.Geometry rstGeometry = OSGeo.OGR.Geometry.CreateFromWkt(pointsStr); byte[] geometryBytes = new byte[rstGeometry.WkbSize()]; rstGeometry.ExportToWkb(geometryBytes); IGeometryFactory3 factory = new GeometryEnvironment() as IGeometryFactory3; int bytesLen = geometryBytes.Length; factory.CreateGeometryFromWkbVariant(geometryBytes, out geometry, out bytesLen); IPolygon polygon = geometry as IPolygon; polygon.Close(); ITopologicalOperator pBoundaryTop = polygon as ITopologicalOperator; pBoundaryTop.Simplify(); return geometry; } catch (Exception ex) { LogAPI.Debug("GetPolygonFromWkt获取图形异常:" + ex); throw ex; } } public string Decrypt(string content, string strKey) { string result = string.Empty; try { if (string.IsNullOrWhiteSpace(content)) return string.Empty; System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged { Key = Encoding.UTF8.GetBytes(strKey), Mode = System.Security.Cryptography.CipherMode.ECB, Padding = System.Security.Cryptography.PaddingMode.PKCS7 }; //将base64字符串转换成byte数组 byte[] contentArray = Convert.FromBase64String(content); //创建解密转换器 System.Security.Cryptography.ICryptoTransform cDecryptTransform = rm.CreateDecryptor(); //对byte数组进行解密转换 Byte[] DecryptArray = cDecryptTransform.TransformFinalBlock(contentArray, 0, contentArray.Length); //将解密后的byte[]转换成字符串(base64) string strDecrypt = Encoding.UTF8.GetString(DecryptArray); //将base64字符串转换成8位无符号整数数组 byte[] base64ToByte = Convert.FromBase64String(strDecrypt); //string s = Encoding.UTF8.GetString(base64ToByte); //将8位无符号整数数组转换成等效字符串,并返回 return Encoding.UTF8.GetString(base64ToByte); } catch (Exception ex) { throw new Exception("解密工程文件异常:" + ex.Message); } finally { GC.Collect(); } } public ISpatialReference GetCurentProjectedCoordinate(string pPrjFileStr) { try { if (!string.IsNullOrWhiteSpace(pPrjFileStr)) { //创建一个要素集创建一个投影 ISpatialReferenceFactory pSpatialRefFac = new SpatialReferenceEnvironmentClass(); ISpatialReference pSpatialReference; pPrjFileStr = pPrjFileStr.Replace("'", "\""); pSpatialRefFac.CreateESRISpatialReference(pPrjFileStr, out pSpatialReference, out int s); return pSpatialReference; } return null; } catch (Exception ex) { LogAPI.Debug("创建投影坐标系失败:" + ex.Message); return null; } } /// ///为文件夹添加users,everyone,Administrator用户组的完全控制权限 /// /// static void AddSecurityControll2Folder(string dirPath) { //获取文件夹信息 DirectoryInfo dir = new DirectoryInfo(dirPath); //获得该文件夹的所有访问权限 System.Security.AccessControl.DirectorySecurity dirSecurity = dir.GetAccessControl(AccessControlSections.All); //设定文件ACL继承 InheritanceFlags inherits = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit; //添加ereryone用户组的访问权限规则 完全控制权限 FileSystemAccessRule everyoneFileSystemAccessRule = new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, inherits, PropagationFlags.None, AccessControlType.Allow); //添加Users用户组的访问权限规则 完全控制权限 FileSystemAccessRule usersFileSystemAccessRule = new FileSystemAccessRule("Users", FileSystemRights.FullControl, inherits, PropagationFlags.None, AccessControlType.Allow); //添加Administrator用户组的访问权限规则 完全控制权限 FileSystemAccessRule AdministratorFileSystemAccessRule = new FileSystemAccessRule("Administrator", FileSystemRights.FullControl, inherits, PropagationFlags.None, AccessControlType.Allow); bool isModified = false; dirSecurity.ModifyAccessRule(AccessControlModification.Add, everyoneFileSystemAccessRule, out isModified); dirSecurity.ModifyAccessRule(AccessControlModification.Add, usersFileSystemAccessRule, out isModified); //设置访问权限 dir.SetAccessControl(dirSecurity); } /// /// 修改文件的可读写 /// /// private void UpDataFileAttribute(string T_Path) { try { DirectoryInfo dirInfo = new DirectoryInfo(T_Path); dirInfo.Attributes = FileAttributes.Normal | FileAttributes.Directory; FileInfo fileInfo = new FileInfo(T_Path); if (fileInfo.IsReadOnly) { File.SetAttributes(T_Path, FileAttributes.Normal); } } catch (Exception ex) { LogAPI.Debug(ex.Message); } } /// /// 根据工程文件路径获取工作目录路径 /// /// /// public string SplitWorkCatalogPath(string pPrjFile) { string TempPath = string.Empty; string pathshba = System.IO.Path.GetFileName(pPrjFile); //单图斑建库三套系统历史工程记录 if ((pPrjFile.Contains("DTBZJProject") && pathshba.Equals("单图斑质检.KBG")) || (pPrjFile.Contains("DTBProject") && pathshba.Equals("单图斑建库.KBG")) || (pPrjFile.Contains("YCLProject") && pathshba.Equals("图斑预处理.KBG"))) { for (int i = 0; i < pPrjFile.Split('\\').Length - 1; i++) { TempPath += pPrjFile.Split('\\')[i] + "\\"; } } else if (Path.GetFileName(pPrjFile).EndsWith(".KBG"))//建库软件向上循环获取工作目录 { for (int i = 0; i < pPrjFile.Split('\\').Length - 4; i++) { TempPath += pPrjFile.Split('\\')[i] + "\\"; } } else if (Path.GetFileName(pPrjFile) == "工作目录") { for (int i = 0; i < pPrjFile.Split('\\').Length - 2; i++) { TempPath += pPrjFile.Split('\\')[i] + "\\"; } } return TempPath.TrimEnd('\\'); } private IGroupLayer GetGroupLayer(IMap map, string Description, bool IsClear = true) { try { IGroupLayer pgpLayer = null; if (map != null && !string.IsNullOrEmpty(Description)) { for (int i = 0; i < map.LayerCount; i++) { if (map.get_Layer(i) is IGroupLayer) { ILayerGeneralProperties lp = map.get_Layer(i) as ILayerGeneralProperties; if (lp != null && lp.LayerDescription.ToUpper().Equals(Description.ToUpper())) { pgpLayer = map.get_Layer(i) as IGroupLayer; //if (IsClear) // pgpLayer.Clear(); return pgpLayer; } ICompositeLayer pComLayer = map.get_Layer(i) as ICompositeLayer; for (int j = 0; j < pComLayer.Count; j++) { if (pComLayer.get_Layer(j) is IGroupLayer) { ILayerGeneralProperties lgp = pComLayer.get_Layer(j) as ILayerGeneralProperties; if (lgp != null && lgp.LayerDescription.ToUpper().Equals(Description.ToUpper())) { pgpLayer = pComLayer.get_Layer(j) as IGroupLayer; //if (IsClear) // pgpLayer.Clear(); return pgpLayer; } } } } } } return pgpLayer; } catch (Exception ex) { throw ex; } } public void LoadProjectByMxd(string filePath) { try { if (true == string.IsNullOrEmpty(filePath) || false == File.Exists(filePath)) { return; } axMapControl.CurrentTool = null; projectInfo = new ProjectInfo(); projectInfo.ProjName = System.IO.Path.GetFileNameWithoutExtension(filePath); projectInfo.ProjSuffix = System.IO.Path.GetExtension(filePath); projectInfo.ProjDir = System.IO.Path.GetDirectoryName(filePath); (MapsManager.Instance.CurrProjectInfo as ProjectInfo).ProjName = System.IO.Path.GetFileNameWithoutExtension(filePath); (MapsManager.Instance.CurrProjectInfo as ProjectInfo).ProjSuffix = System.IO.Path.GetExtension(filePath); (MapsManager.Instance.CurrProjectInfo as ProjectInfo).ProjDir = System.IO.Path.GetDirectoryName(filePath); ESRI.ArcGIS.Carto.IMapDocument mDoc = new ESRI.ArcGIS.Carto.MapDocumentClass(); mDoc.Open(filePath); ESRI.ArcGIS.Carto.IMap map = mDoc.get_Map(0); if (map == null) return; map.Name = projectInfo.ProjName; ISpatialReference reference = GeoDBAPI.GetGeoDatasetSpatialReference(GetDefaultWorkspace(map)); if (map.SpatialReference != reference && reference != null) { map.SpatialReference = reference; } IActiveView view = (IActiveView)map; mDoc.SetActiveView(view); CtlsSynchronizer.ReplaceMap(map); axMapControl.DocumentFilename = filePath; mDoc.Close(); ProjectClosed?.Invoke(null, null); } catch (Exception ex) { throw ex; } } public void SetFolderPath(string folderPath) { m_FolderPath = folderPath; Platform.Instance.ViewManager.SetFilePath(m_FolderPath); } public string GetFolderPath() { return m_FolderPath; } public bool DeleteTheDir(string strPath) { try { strPath = @strPath.Trim(); if (Directory.Exists(strPath)) { string[] strDirs = Directory.GetDirectories(strPath); string[] strFiles = Directory.GetFiles(strPath); int iCountDirs = strDirs.Count(); int iFileDirs = strFiles.Count(); foreach (string strFile in strFiles) { File.Delete(strFile); } foreach (string strdir in strDirs) { Directory.Delete(strdir, true); } //LogAPI.Debug("清空变更统计信息文件夹 。文件夹数量=" + iCountDirs + " ; 文件数量=" + iFileDirs + " ; "); } return true; } catch (Exception ex) { LogAPI.Debug("清空文件目录(" + strPath + ") 时失败,异常原因: " + ex + " ; "); return false; } } public void CloseProject() { IMapDocument mDoc = new MapDocumentClass(); try { EngineEditor editor = new EngineEditorClass(); #region 修改在编辑状态时,快捷键保存工程不提示信息;修改人:白明雅;修改时间:2018-09-04 if (editor.EditState == esriEngineEditState.esriEngineStateEditing) { MessageHelper.ShowTips("当前工程正处于编辑状态,保存之前请先结束编辑!"); return; } #endregion if (projectInfo != null) SaveProject(); else return; projectInfo = null; axMapControl.Map.Name = "地图文档"; axMapControl.ClearLayers(); axMapControl.CurrentTool = null; ProjectClosed?.Invoke(null, null); axMapControl.ActiveView.GraphicsContainer.DeleteAllElements(); } catch (Exception ex) { throw ex; } finally { mDoc.Close(); } } public void FlashShape(IMapControlDefault mapControl, IGeometry geo, int nflashes = 3, int flashInterval = 300) { try { IRgbColor pRgbColor = new RgbColorClass(); pRgbColor.Red = 0; pRgbColor.Green = 105; pRgbColor.Blue = 0; ILineSymbol pLineSymbol = new SimpleLineSymbolClass(); pLineSymbol.Color = Converter.ToRGBColor(Color.Black) as IColor; pLineSymbol.Width = 5; ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbolClass(); pSimpleFillSymbol.Color = pRgbColor; pSimpleFillSymbol.Outline = pLineSymbol; ISimpleLineSymbol pSimpleLineSymbol = new SimpleLineSymbolClass(); pSimpleLineSymbol.Color = pRgbColor; pSimpleLineSymbol.Width = 8; ISimpleMarkerSymbol pSimpleMarkerSymbol = new SimpleMarkerSymbolClass(); pSimpleMarkerSymbol.Color = pRgbColor; pSimpleMarkerSymbol.Size = 14; pSimpleMarkerSymbol.Outline = true; pSimpleMarkerSymbol.OutlineSize = 2; pSimpleMarkerSymbol.OutlineColor = Converter.ToRGBColor(Color.Black) as IColor; if (geo.GeometryType == ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint) mapControl.FlashShape(geo, nflashes, flashInterval, pSimpleMarkerSymbol); else if (geo.GeometryType == ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline) mapControl.FlashShape(geo, nflashes, flashInterval, pSimpleLineSymbol); else if (geo.GeometryType == ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon) mapControl.FlashShape(geo, nflashes, flashInterval, pSimpleFillSymbol); } catch (Exception ex) { LogAPI.Debug("执行 FlashShape 时异常,异常信息如下:"); LogAPI.Debug(ex); LogAPI.Debug("执行 FlashShape 时异常信息结束"); MessageHelper.ShowError("操作异常!异常信息:" + ex.Message); //LogAPI.Debug(ex); } } /// /// 根据名称获取当前工程中的图层 /// /// /// public IFeatureLayer GetFeatureLayerByName(string pName) { IFeatureLayer result = null; try { IEnumLayer enumlayer = axMapControl.Map.Layers; ILayer layer = null; while ((layer = enumlayer.Next()) != null) { if (!(layer is IFeatureLayer)) continue; IFeatureLayer featureLayer = layer as IFeatureLayer; if (featureLayer.FeatureClass == null || (featureLayer as IDataset) == null || (featureLayer as IDataset).Workspace == null) continue; if (featureLayer is IDataset && GetClassShortName(featureLayer as IDataset).ToUpper() == pName.ToUpper()) { result = featureLayer; break; } //if (featureLayer is IDataset && GetClassShortName(featureLayer as IDataset).ToUpper() == pName.ToUpper() && (featureLayer as IDataset).Workspace.PathName == Env.Instance.Project.GetProjMDBPath()) //{ // result = featureLayer; // break; //} //if (IsRemoteDatabase(featureLayer)) //{ // if (featureLayer is IDataset && GetClassShortName(featureLayer as IDataset).ToUpper() == pName.ToUpper()) // result = featureLayer; //} //else //{ // if (featureLayer is IDataset && GetClassShortName(featureLayer as IDataset).ToUpper() == pName.ToUpper() && (featureLayer as IDataset).Workspace.PathName == Env.Instance.Project.GetProjMDBPath()) // result = featureLayer; //} } return result; } catch { throw; } } public IFeatureLayer GetFeatureLayerByLayerName(string layerName) { IFeatureLayer result = null; try { IEnumLayer enumlayer = axMapControl.Map.Layers; ILayer layer = null; while ((layer = enumlayer.Next()) != null) { if (!(layer is IFeatureLayer)) continue; IFeatureLayer featureLayer = layer as IFeatureLayer; if (featureLayer.Name.ToUpper().Equals(layerName)) { result = featureLayer; break; } } } catch (Exception ex) { throw ex; } return result; } public IRasterLayer GetRasterLayerByLayerName(string layerName) { IRasterLayer result = null; try { IEnumLayer enumlayer = axMapControl.Map.Layers; ILayer layer = null; while ((layer = enumlayer.Next()) != null) { if (!(layer is IRasterLayer)) continue; IRasterLayer rasterLayer = layer as IRasterLayer; if (rasterLayer.Name.ToUpper().Equals(layerName)) { result = rasterLayer; break; } } } catch (Exception ex) { throw ex; } return result; } public IRasterLayer GetRasterLayerByLayerName(string groupName, string layerName) { IRasterLayer result = null; try { IEnumLayer enumlayer = axMapControl.Map.Layers; ILayer layer = null; while ((layer = enumlayer.Next()) != null) { if (layer is IGroupLayer) { IGroupLayer grlayer = layer as IGroupLayer; if (grlayer.Name.Equals(groupName)) { ICompositeLayer pComLayer = layer as ICompositeLayer; for (int j = 0; j < pComLayer.Count; j++) { ILayer newLayer = pComLayer.get_Layer(j); if (!(newLayer is IRasterLayer)) continue; IRasterLayer rasterLayer = newLayer as IRasterLayer; if (rasterLayer.Name.ToUpper().Equals(layerName.ToUpper())) { result = rasterLayer; break; } } } } } } catch (Exception ex) { throw ex; } return result; } /// /// 通过图层名称获取图层 /// /// 图层名称 /// public IFeatureClass GetFeatureClassByName(string pName) { IFeatureClass result = null; try { IEnumLayer enumlayer = axMapControl.Map.Layers; ILayer layer = null; while ((layer = enumlayer.Next()) != null) { if (!(layer is IFeatureLayer)) continue; IFeatureLayer featureLayer = layer as IFeatureLayer; if (featureLayer.FeatureClass == null || (featureLayer as IDataset) == null || (featureLayer as IDataset).Workspace == null) continue; if (featureLayer is IDataset && GetClassShortName(featureLayer as IDataset).ToUpper() == pName.ToUpper()) result = featureLayer.FeatureClass; //if (featureLayer is IDataset && GetClassShortName(featureLayer as IDataset).ToUpper() == pName.ToUpper() && (featureLayer as IDataset).Workspace.PathName == Env.Instance.Project.GetProjMDBPath()) //{ // result = featureLayer.FeatureClass; // break; //} //if (IsRemoteDatabase(featureLayer)) //{ // if (featureLayer is IDataset && GetClassShortName(featureLayer as IDataset).ToUpper() == pName.ToUpper()) // result = featureLayer.FeatureClass; //} //else //{ // if (featureLayer is IDataset && GetClassShortName(featureLayer as IDataset).ToUpper() == pName.ToUpper() && (featureLayer as IDataset).Workspace.PathName == Env.Instance.Project.GetProjMDBPath()) // result = featureLayer.FeatureClass; //} } return result; } catch { throw; } } public void SelectFeature(string layerName, string OIDs, bool IsMoveToCenter = true) { List featureList = null; try { IMapControlDefault mapControl = Hook as IMapControlDefault; string[] oidArr = OIDs.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); ILayer layer = GetFeatureLayerByName(layerName) != null ? GetFeatureLayerByName(layerName) : GetFeatureLayerByLayerName(layerName);//GetLayerByTableName(Env.Instance.KMap.GetMap(), layerName); if (!(layer is IFeatureLayer)) { return; } featureList = new List(); //ClearFeatureSelection(mapControl); ISelectionSet pSelectionSetes = (layer as IFeatureSelection).SelectionSet; if (pSelectionSetes.Count > 0) { int unSeleID = pSelectionSetes.IDs.Next(); pSelectionSetes.RemoveList(pSelectionSetes.Count, ref unSeleID); mapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, featureList, mapControl.ActiveView.Extent); } foreach (string oid in oidArr) { IFeature feature = (layer as IFeatureLayer).FeatureClass.GetFeature(Convert.ToInt32(oid)); if (feature != null && feature.Shape != null && !feature.Shape.IsEmpty) { featureList.Add(feature); (Hook as IMapControlDefault).Map.SelectFeature(layer, feature); } } if (IsMoveToCenter && featureList.Count != 0) { MoveToCenter(featureList); } if (featureList.Count != 0) mapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, featureList, mapControl.ActiveView.Extent); } catch (Exception ex) { LogAPI.Debug($"{layerName}图斑{OIDs}高亮显示失败:" + ex); throw ex; } finally { if (featureList != null) { featureList.Clear(); } } } public IElement DrawGraph(ESRI.ArcGIS.Geometry.IGeometry geoDraw, bool pIsDel = true, int R = 255, int G = 0, int B = 0) { try { IElement result = null; IGraphicsContainer iGraphicsContainer = null; IElement CameraPointElm = null; // axMapControl.ActiveView.GraphicsContainer.Next(); while ((CameraPointElm = axMapControl.ActiveView.GraphicsContainer.Next()) != null) { if ((CameraPointElm as IElementProperties).Name == "TempElem") break; } if (CameraPointElm == null) { CameraPointElm = new GroupElementClass(); (CameraPointElm as IElementProperties).Name = "TempElem"; (Hook as IMapControlDefault).ActiveView.GraphicsContainer.AddElement(CameraPointElm, 0); } if (pIsDel == true) { ////替换Env改动 ////IGraphicsContainer graphics = Env.Instance.KMap.HookHelper.ActiveView.GraphicsContainer; //IGraphicsContainer graphics = (Hook as IMapControlDefault).ActiveView.GraphicsContainer; //graphics.DeleteAllElements(); (CameraPointElm as IGroupElement).ClearElements(); } if (geoDraw == null) return null; //替换Env改动---无用 //IMapControl2 axMapDraw = Env.Instance.KMap.HookHelper.Hook as IMapControl2; // 获取IRGBColor接口 IRgbColor color = new RgbColor(); // 设置颜色属性 color.Red = R; color.Green = G; color.Blue = B; switch (geoDraw.GeometryType) { case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint: result = new MarkerElementClass(); IMarkerSymbol symbol = new SimpleMarkerSymbolClass(); symbol.Color = color; symbol.Size = 10; (result as IMarkerElement).Symbol = symbol; result.Geometry = geoDraw; break; case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon: result = new PolygonElement() { Opacity = 40 }; // 获取ILine符号接口 ILineSymbol lineSymbol = new SimpleLineSymbol(); // 设置线符号属 lineSymbol.Width = 2; ISimpleFillSymbol simpleFillSymbol = new SimpleFillSymbolClass(); simpleFillSymbol.Color = color; IRgbColor colorLine = new RgbColor(); colorLine.Red = 255; colorLine.Green = 0; colorLine.Blue = 0; lineSymbol.Color = colorLine; // 设置填充符号属性 simpleFillSymbol.Outline = lineSymbol; simpleFillSymbol.Style = ESRI.ArcGIS.Display.esriSimpleFillStyle.esriSFSCross;//esriSimpleFillStyle.esriSFSSolid; (result as IFillShapeElement).Symbol = simpleFillSymbol; result.Geometry = geoDraw; break; case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline: result = new LineElementClass(); // 获取ILine符号接口 ILineSymbol outline = new SimpleLineSymbol(); // 设置线符号属 outline.Width = 3; outline.Color = color; (outline as SimpleLineSymbol).Style = ESRI.ArcGIS.Display.esriSimpleLineStyle.esriSLSSolid; (result as ILineElement).Symbol = outline; result.Geometry = geoDraw; break; default: break; } if (!pIsDel) { result.Locked = true; } //替换Env改动 //Env.Instance.KMap.HookHelper.ActiveView.GraphicsContainer.AddElement(result, 0); //(Hook as IMapControlDefault).ActiveView.GraphicsContainer.AddElement(result, 0); (CameraPointElm as IGroupElement).AddElement(result); if (iGraphicsContainer != null) { iGraphicsContainer.AddElement(result, 0); } return result; } catch (Exception ex) { LogAPI.Debug("执行DrawGraph方法时异常:" + ex); return null; } } public IElement DrawBaseGraph(ESRI.ArcGIS.Geometry.IGeometry geoDraw, int R = 255, int G = 0, int B = 0) { try { IElement result = null; IGraphicsContainer iGraphicsContainer = null; IElement CameraPointElm = null; // axMapControl.ActiveView.GraphicsContainer.Next(); while ((CameraPointElm = axMapControl.ActiveView.GraphicsContainer.Next()) != null) { if ((CameraPointElm as IElementProperties).Name == "BaseElement") break; } if (CameraPointElm == null) { CameraPointElm = new GroupElementClass(); (CameraPointElm as IElementProperties).Name = "BaseElement"; (Hook as IMapControlDefault).ActiveView.GraphicsContainer.AddElement(CameraPointElm, 2); } (CameraPointElm as IGroupElement).ClearElements(); if (geoDraw == null) return null; //替换Env改动---无用 //IMapControl2 axMapDraw = Env.Instance.KMap.HookHelper.Hook as IMapControl2; // 获取IRGBColor接口 IRgbColor color = new RgbColor(); // 设置颜色属性 color.Red = R; color.Green = G; color.Blue = B; switch (geoDraw.GeometryType) { case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint: result = new MarkerElementClass(); IMarkerSymbol symbol = new SimpleMarkerSymbolClass(); symbol.Color = color; symbol.Size = 10; (result as IMarkerElement).Symbol = symbol; result.Geometry = geoDraw; break; case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon: result = new PolygonElement() { Opacity = 100 }; // 获取ILine符号接口 ILineSymbol lineSymbol = new SimpleLineSymbol(); // 设置线符号属 lineSymbol.Width = 2; ISimpleFillSymbol simpleFillSymbol = new SimpleFillSymbolClass(); simpleFillSymbol.Color = color; IRgbColor colorLine = new RgbColor(); colorLine.Red = 0; colorLine.Green = 0; colorLine.Blue = 0; lineSymbol.Color = colorLine; // 设置填充符号属性 simpleFillSymbol.Outline = lineSymbol; simpleFillSymbol.Style = ESRI.ArcGIS.Display.esriSimpleFillStyle.esriSFSSolid;//esriSimpleFillStyle.esriSFSSolid; (result as IFillShapeElement).Symbol = simpleFillSymbol; result.Geometry = geoDraw; break; case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline: result = new LineElementClass(); // 获取ILine符号接口 ILineSymbol outline = new SimpleLineSymbol(); // 设置线符号属 outline.Width = 3; outline.Color = color; (outline as SimpleLineSymbol).Style = ESRI.ArcGIS.Display.esriSimpleLineStyle.esriSLSSolid; (result as ILineElement).Symbol = outline; result.Geometry = geoDraw; break; default: break; } (CameraPointElm as IGroupElement).AddElement(result); if (iGraphicsContainer != null) { iGraphicsContainer.AddElement(result, 0); } axMapControl.ActiveView.Refresh(); return result; } catch (Exception ex) { LogAPI.Debug("执行DrawGraph方法时异常:" + ex); return null; } } /// /// 获取特定样式的图形元素 /// /// /// /// /// /// public IElement GetGraphicsElement(ESRI.ArcGIS.Geometry.IGeometry geoDraw, int R = 255, int G = 0, int B = 0) { IElement result = null; try { if (geoDraw == null) { return null; } IRgbColor color = new RgbColor();//获取IRGBColor接口,并设置颜色属性 color.Red = R; color.Green = G; color.Blue = B; switch (geoDraw.GeometryType) { case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint: result = new MarkerElementClass(); IMarkerSymbol symbol = new SimpleMarkerSymbolClass(); symbol.Color = color; symbol.Size = 10; (result as IMarkerElement).Symbol = symbol; result.Geometry = geoDraw; break; case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline: result = new LineElementClass(); ILineSymbol outline = new SimpleLineSymbol();//获取ILine符号接口,并设置线符号属 outline.Width = 3; outline.Color = color; (outline as SimpleLineSymbol).Style = ESRI.ArcGIS.Display.esriSimpleLineStyle.esriSLSSolid; (result as ILineElement).Symbol = outline; result.Geometry = geoDraw; break; case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon: result = new PolygonElement() { Opacity = 40 }; IRgbColor colorLine = new RgbColor(); colorLine.Red = 255; colorLine.Green = 0; colorLine.Blue = 0; ILineSymbol lineSymbol = new SimpleLineSymbol();//获取ILine符号接口,并设置线符号属性 lineSymbol.Color = colorLine; lineSymbol.Width = 5; ISimpleFillSymbol simpleFillSymbol = new SimpleFillSymbolClass(); simpleFillSymbol.Color = color; simpleFillSymbol.Outline = lineSymbol;//设置填充符号属性 //simpleFillSymbol.Outline = new SimpleLineSymbol() { Color = new RgbColor() { Red = 255, Green = 0, Blue = 0 }, Width = 5 };//设置填充符号属性 simpleFillSymbol.Style = ESRI.ArcGIS.Display.esriSimpleFillStyle.esriSFSCross;//esriSimpleFillStyle.esriSFSSolid; (result as IFillShapeElement).Symbol = simpleFillSymbol; result.Geometry = geoDraw; break; default: break; } return result; } catch (Exception ex) { LogAPI.Debug("获取特定样式的图形元素 时失败,异常原因: " + ex + " ; "); return null; } } public void Zoom(ESRI.ArcGIS.Geometry.IGeometry geo) { try { if (geo == null) return; //替换Env改动 //-----------解决问题图斑处理工具查出的问题图斑双击定位异常,原因axmap为空 //IMap map = Env.Instance.KMap.HookHelper.FocusMap; IMap map = (Hook as IMapControlDefault).Map; IActiveView axMap = map as IActiveView; //------------------------------------ IEnvelope NewExtent = geo.Envelope; if (geo.Envelope.Width <= 0 || geo.Envelope.Height <= 0) { NewExtent.XMax = geo.Envelope.XMax + 800 / 2; NewExtent.XMin = geo.Envelope.XMin - 800 / 2; NewExtent.YMax = geo.Envelope.YMax + 500 / 2; NewExtent.YMin = geo.Envelope.YMin - 500 / 2; } else { NewExtent.XMax = geo.Envelope.XMax + geo.Envelope.Width / 2; NewExtent.YMax = geo.Envelope.YMax + geo.Envelope.Height / 2; NewExtent.XMin = geo.Envelope.XMin - geo.Envelope.Width / 2; NewExtent.YMin = geo.Envelope.YMin - geo.Envelope.Height / 2; } axMap.Extent = NewExtent; if (axMap.FocusMap.MapScale < 2) axMap.FocusMap.MapScale = 2; axMap.PartialRefresh(esriViewDrawPhase.esriViewBackground, null, axMap.Extent); } catch (Exception ex) { LogAPI.Debug("执行Zoom方法时异常:" + ex); } } /// /// 清除选中的要素 /// /// /// public void ClearFeatureSelection(IMapControlDefault mapControl, string layerName = "") { try { if (!string.IsNullOrEmpty(layerName)) { ILayer clearLy = GetFeatureLayerByName(layerName); if (!(clearLy is IFeatureLayer)) return; IFeatureSelection pFeatureSelection = clearLy as IFeatureSelection; mapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, pFeatureSelection, null); pFeatureSelection.Clear(); mapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, pFeatureSelection, null); } else { ISelection pSelection = mapControl.Map.FeatureSelection as ISelection; mapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, pSelection, null); ControlsClearSelectionCommand cmd = new ControlsClearSelectionCommandClass(); cmd.OnCreate(mapControl); cmd.OnClick(); mapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null); } } catch (Exception ex) { MessageHelper.ShowError("操作异常!异常信息:" + ex.Message); LogAPI.Debug(ex); } } public object GetProjectInfo() { return projectInfo; } public void SetCustomProperty(object pProperty) { if (axMapControl != null) axMapControl.CustomProperty = pProperty; } public string GetLayerPathByLayer(ILayer pLayer) { if (pLayer is IFeatureLayer) { IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer; if (pFeatureLayer.FeatureClass == null || (pFeatureLayer as IDataset) == null || (pFeatureLayer as IDataset).Workspace == null) return ""; FeatureClass fc = pFeatureLayer.FeatureClass as FeatureClass; if (pFeatureLayer.FeatureClass.FeatureDataset != null) { //if (fc.Workspace.WorkspaceFactory.WorkspaceType == esriWorkspaceType.esriRemoteDatabaseWorkspace // && (string.IsNullOrWhiteSpace(fc.Workspace.PathName) || !System.IO.File.Exists(fc.Workspace.PathName))) //{ // return System.IO.Path.Combine(fc.Workspace.PathName, pFeatureLayer.FeatureClass.FeatureDataset.BrowseName, fc.BrowseName); //} return global::System.IO.Path.Combine(fc.Workspace.PathName, pFeatureLayer.FeatureClass.FeatureDataset.BrowseName, fc.BrowseName); } else { return global::System.IO.Path.Combine(fc.Workspace.PathName, fc.BrowseName); } ////return (pFeatureLayer as IDataset).Workspace.PathName; } return ""; } public List GetAllLayerInMap() { try { List allLayers = new List(); for (int i = 0; i < axMapControl.Map.LayerCount; i++) { ILayer layer = axMapControl.Map.get_Layer(i); if (layer is ICompositeLayer) { List list = GetAllLayerInGroupLayer(layer as ICompositeLayer); allLayers.AddRange(list); } else { if (layer is T) { allLayers.Add((T)layer); } } } return allLayers; } catch (Exception ex) { throw ex; } } public List GetAllRasterGroupLayerInMap() { try { List allLayers = new List(); for (int i = 0; i < axMapControl.Map.LayerCount; i++) { ILayer layer = axMapControl.Map.get_Layer(i); if (layer is ICompositeLayer) { List list = GetAllLayerInGroupLayer(layer as ICompositeLayer); if (list.Count > 0) allLayers.Add(layer as IGroupLayer); } else { //if (layer is T) //{ // allLayers.Add((T)layer); //} } } return allLayers; } catch (Exception ex) { throw ex; } } public AxMapControl getAxMapControl() { //throw new NotImplementedException(); return this.axMapControl; } public List GetAllDisplayLayerInMap() { List allLayers = new List(); for (int i = 0; i < axMapControl.Map.LayerCount; i++) { ILayer layer = axMapControl.Map.get_Layer(i); if (layer is ICompositeLayer) { if (!layer.Visible) { continue; } allLayers.AddRange(GetAllDisplayLayerInGroupLayer(layer as ICompositeLayer)); } else { if (layer is T) { if (layer.Visible) { allLayers.Add((T)layer); } } } } return allLayers; } public List GetAllDisplayLayerInGroupLayer(ICompositeLayer pCompLayer) { List allLayers = new List(); try { IFeatureLayer layer = null; for (int j = 0; j < pCompLayer.Count; j++) { if (pCompLayer.get_Layer(j) is IFeatureLayer) { layer = pCompLayer.get_Layer(j) as IFeatureLayer; if (layer.Visible) { allLayers.Add((T)layer); } } else if (pCompLayer.get_Layer(j) is IGroupLayer) { if (!pCompLayer.get_Layer(j).Visible) { continue; } allLayers.AddRange(GetAllDisplayLayerInGroupLayer(pCompLayer.get_Layer(j) as ICompositeLayer)); } } return allLayers; } catch (Exception ex) { LogAPI.Debug(ex); } return allLayers; } /// /// 根据索引获得地图上显示的图层 /// /// 地图 /// 索引 /// 检索到的图层 public IFeatureLayer GetMapDisLayer(IMap pMap, int index) { IFeatureLayer layer = null; int ind = -1; try { //IEnumLayer enumLayer= KGIS.Framework.Platform.Platform.Instance.MapsService.getAxMapControl().Map.Layers; ICompositeLayer pCompLayer; //遍历地图 for (int i = 0; i < pMap.LayerCount; i++) { if (pMap.get_Layer(i) is IFeatureLayer) { //获得图层要素 layer = pMap.get_Layer(i) as IFeatureLayer; if (layer.Visible) { ind++; } if (ind == index) { return layer; } } else if (pMap.get_Layer(i) is IGroupLayer) { if (!pMap.get_Layer(i).Visible) { continue; } //遍历图层组 pCompLayer = pMap.get_Layer(i) as ICompositeLayer; GetMapDisLayer(pCompLayer, index, ref layer, ref ind); if (layer != null) { return layer; } } } return layer; } catch (Exception ex) { LogAPI.Debug(ex); return layer; } } private void GetMapDisLayer(ICompositeLayer pCompLayer, int index, ref IFeatureLayer getLayer, ref int retIndex) { try { IFeatureLayer layer = null; for (int j = 0; j < pCompLayer.Count; j++) { if (pCompLayer.get_Layer(j) is IFeatureLayer) { layer = pCompLayer.get_Layer(j) as IFeatureLayer; if (layer.Visible) { retIndex++; } if (retIndex == index) { getLayer = layer; return; } } else if (pCompLayer.get_Layer(j) is IGroupLayer) { if (!pCompLayer.get_Layer(j).Visible) { continue; } GetMapDisLayer(pCompLayer.get_Layer(j) as ICompositeLayer, index, ref getLayer, ref retIndex); if (getLayer != null) { return; } } } } catch (Exception ex) { LogAPI.Debug(ex); } } /// /// 获取当前地图控件在屏幕上的位置 /// /// public System.Drawing.Point GetMapInScreenLocation(int pIndex) { System.Drawing.Point result = new System.Drawing.Point(); try { result = axMapControl.Parent.PointToScreen(new System.Drawing.Point(0, 0)); switch (pIndex) { case 2: result.X += axMapControl.Width;//x为地图x坐标 break; case 3: result.X += axMapControl.Width;//x为地图x坐标 result.Y += axMapControl.Height;//y为地图y坐标 break; case 4: result.Y += axMapControl.Height;//y为地图y坐标 break; default: break; } } catch (Exception ex) { LogAPI.Debug("获取屏幕坐标时发生异常!异常信息如下:"); LogAPI.Debug(ex); LogAPI.Debug("异常信息结束。"); } return result; } public void SetIsLoad(bool isLoad) { m_IsLoad = isLoad; } public bool GetIsLoad() { return m_IsLoad; } public void SaveProject() { try { EngineEditor editor = new EngineEditorClass(); #region 修改在编辑状态时,快捷键保存工程不提示信息;修改人:白明雅;修改时间:2018-09-04 if (editor.EditState == esriEngineEditState.esriEngineStateEditing) { MessageHelper.ShowTips("当前工程正处于编辑状态,保存之前请先结束编辑!"); return; } #endregion ProjectInfo ProInfo = (MapsManager.Instance.CurrProjectInfo as ProjectInfo); if (ProInfo == null) return; //保存地图文档 try { IDataCatalogService _DataCatalog = BundleRuntime.Instance.GetFirstOrDefaultService(); if (_DataCatalog == null || _DataCatalog.CurrentLayers == null) return; GetLayersState(); //Xml数据 string Str = SerializeAPI.SerializeToXML(_DataCatalog.CurrentLayers as LayerCfg); Byte[] bytearr = Encoding.Default.GetBytes(Str); string strBase64 = Convert.ToBase64String(bytearr); ProInfo.TempData = strBase64; //当前地图范围 ProInfo.MapExtent = new PluginServiceInterface.MapExtent(); if (!axMapControl.ActiveView.Extent.IsEmpty)//添加图形非空判断 王欢 2019-03-21 { ProInfo.MapExtent.XMax = axMapControl.ActiveView.Extent.XMax; ProInfo.MapExtent.YMax = axMapControl.ActiveView.Extent.YMax; ProInfo.MapExtent.XMin = axMapControl.ActiveView.Extent.XMin; ProInfo.MapExtent.YMin = axMapControl.ActiveView.Extent.YMin; } if (ProInfo.Save()) { //MessageHelper.ShowTips("保存成功!"); } } catch (Exception ex1) { LogAPI.Debug("在保存工程时发生异常,异常信息如下:"); LogAPI.Debug(ex1); LogAPI.Debug(" 异常信息结束"); MessageHelper.ShowError("保存失败!" + ex1.Message); } } catch (Exception ex) { LogAPI.Debug("保存工程时发生异常,异常信息如下:" + ex.Message); } } public void SaveProjectForNoEditor() { try { ProjectInfo ProInfo = (MapsManager.Instance.CurrProjectInfo as ProjectInfo); if (ProInfo == null) return; //保存地图文档 try { IDataCatalogService _DataCatalog = BundleRuntime.Instance.GetFirstOrDefaultService(); if (_DataCatalog == null || _DataCatalog.CurrentLayers == null) return; GetLayersState(); //Xml数据 string Str = SerializeAPI.SerializeToXML(_DataCatalog.CurrentLayers as LayerCfg); Byte[] bytearr = Encoding.Default.GetBytes(Str); string strBase64 = Convert.ToBase64String(bytearr); ProInfo.TempData = strBase64; //当前地图范围 ProInfo.MapExtent = new PluginServiceInterface.MapExtent(); if (!axMapControl.ActiveView.Extent.IsEmpty)//添加图形非空判断 王欢 2019-03-21 { ProInfo.MapExtent.XMax = axMapControl.ActiveView.Extent.XMax; ProInfo.MapExtent.YMax = axMapControl.ActiveView.Extent.YMax; ProInfo.MapExtent.XMin = axMapControl.ActiveView.Extent.XMin; ProInfo.MapExtent.YMin = axMapControl.ActiveView.Extent.YMin; } if (ProInfo.Save()) { //MessageHelper.ShowTips("保存成功!"); } } catch (Exception ex1) { LogAPI.Debug("在保存工程时发生异常,异常信息如下:"); LogAPI.Debug(ex1); LogAPI.Debug(" 异常信息结束"); MessageHelper.ShowError("保存失败!" + ex1.Message); } } catch (Exception ex) { LogAPI.Debug("保存工程时发生异常,异常信息如下:" + ex.Message); } } /// /// 保存图层状态(透明度-比例尺-样式) /// private void GetLayersState() { try { if (_DataCatalog == null) _DataCatalog = BundleRuntime.Instance.GetFirstOrDefaultService(); //随时保存-重新获取 ISystemCfg cfg2 = BundleRuntime.Instance.GetFirstOrDefaultService(); SystemCfg = cfg2.Load(); if (SystemCfg.JcLayerLoadCfg == null) { SystemCfg.JcLayerLoadCfg = new List(); } ProjectInfo projectInfo = MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo; if (projectInfo == null || _DataCatalog.CurrentLayers == null) return; //获取图层样式 LayerCfg layerInfo = _DataCatalog.CurrentLayers as LayerCfg; List list = layerInfo.GetAllItem(); if (list != null && list.Count != 0) { foreach (var item in list) { if (item.Data is ILayer layer) { if (layer is IFeatureLayer) { #region 图层是否可选 item.Selectable = (layer as IFeatureLayer).Selectable; #endregion #region 图层显示 item.Visible = layer.Visible; #endregion #region 透明度 if (layer is ILayerEffects mLayerEffects) item.Transparency = mLayerEffects.Transparency; #endregion #region 比例尺 LayerCfg layerCfg = SystemCfg.JcLayerLoadCfg.FirstOrDefault(x => x.LayerName == item.LayerName); if (layerCfg != null) { item.MinScale = layer.MinimumScale.ToInt(); item.MaxScale = layer.MaximumScale.ToInt();//.MaxScale; layerCfg.MinScale = item.MinScale; layerCfg.MaxScale = item.MaxScale; } #endregion #region 样式 Renderer randerer = SymbolConvert.Instance().GetRenderer((layer as IGeoFeatureLayer).Renderer); LabelingInfo labelingInfo = null; LabelStyleConvert styleConvert = new LabelStyleConvert(); List labelInfo = styleConvert.EsriLabelToCustomLabels((layer as IGeoFeatureLayer).AnnotationProperties); if (labelInfo != null && labelInfo.Count > 0) labelingInfo = labelInfo[0]; if (labelingInfo != null) { AdvancedDrawingInfo adi = new AdvancedDrawingInfo(); adi.DrawingInfo.Renderer = randerer; adi.DrawingInfo.LabelingInfo = labelInfo; item.Symbol = adi.ToJson(); } #endregion IGeoFeatureLayer pGeoFeatureLayer = layer as IGeoFeatureLayer; #region 标注-测试 if (pGeoFeatureLayer != null && pGeoFeatureLayer.DisplayAnnotation == true && item != null) { IAnnotateLayerPropertiesCollection m_AnnotateLayerPropertiesCollection = (layer as IGeoFeatureLayer).AnnotationProperties; if (m_AnnotateLayerPropertiesCollection != null) { IAnnotateLayerProperties annotateLayerProperties = null; IElementCollection elementCollection = null; IElementCollection elementCollection2 = null; #region 实体化 for (int i = 0; i < m_AnnotateLayerPropertiesCollection.Count; i++) { m_AnnotateLayerPropertiesCollection.QueryItem(i, out annotateLayerProperties, out elementCollection2, out elementCollection); if (annotateLayerProperties == null) continue; ILabelEngineLayerProperties labelEngineLayer = (annotateLayerProperties as IClone).Clone() as ILabelEngineLayerProperties; AdvancedAnnotationInfo annotationInfo = new AdvancedAnnotationInfo(); if (labelEngineLayer == null) continue; SimpleTextSymbol txtSymbol = AnnotationConvret.Instance().GetTextSymbol(labelEngineLayer.Symbol); if (txtSymbol != null) { annotationInfo.AnnotationInfos.Symbol = txtSymbol; annotationInfo.AnnotationInfos.Expression = labelEngineLayer.Expression; annotationInfo.AnnotationInfos.DisplayAnnotation = true; item.Annotation = annotationInfo.ToJson(); } } } #endregion } #endregion } } } SystemCfg.Save(); if (false)//测试数据提取 { string Str = SerializeAPI.SerializeToXML(_DataCatalog.CurrentLayers as LayerCfg); Byte[] bytearr = Encoding.Default.GetBytes(Str);//Encoding.UTF8.GetBytes(Str); using (Stream stream = new System.IO.FileStream(@"C:\Users\Administrator\Desktop\临时文档" + "\\" + "LatersSymbolToXML简单绘制2.xml", FileMode.Create, FileAccess.Write, FileShare.None)) { stream.Write(bytearr, 0, bytearr.Length); stream.Close(); MessageHelper.ShowTips("提取成功!"); } } } } catch (Exception ex) { LogAPI.Debug("UcMapControl.GetLayersState() 异常:" + ex.Message); LogAPI.Debug("UcMapControl.GetLayersState() 异常:" + ex.StackTrace); LogAPI.Debug("UcMapControl.GetLayersState() 异常:" + ex); throw ex; } } /// /// 图层标注设置 /// /// /// private void SetLayerAnnotation(ILayer layer, LayerCfg layerCfg) { try { if (string.IsNullOrWhiteSpace(layerCfg.Annotation)) return; AdvancedAnnotationInfo advanced = new AdvancedAnnotationInfo(); advanced = AdvancedAnnotationInfo.FromJson(layerCfg.Annotation); ITextSymbol pTextSymbol = AnnotationConvret.Instance().GetSimpleTextSymbol(advanced.AnnotationInfos.Symbol); IGeoFeatureLayer pGeoFeatureLayer = layer as IGeoFeatureLayer; pGeoFeatureLayer.DisplayAnnotation = advanced.AnnotationInfos.DisplayAnnotation;//开启标注图层内要素 IBasicOverposterLayerProperties pBasicOverposterLayerProprties = new BasicOverposterLayerProperties { FeatureType = advanced.AnnotationInfos.FeatureType }; ILabelEngineLayerProperties pLabelEngineLayerProperties = new LabelEngineLayerProperties() as ILabelEngineLayerProperties; pLabelEngineLayerProperties.Expression = advanced.AnnotationInfos.Expression; pLabelEngineLayerProperties.Symbol = pTextSymbol; pLabelEngineLayerProperties.BasicOverposterLayerProperties = pBasicOverposterLayerProprties; // 刷新地图 IAnnotateLayerProperties pAnnotateLayerProperties = pLabelEngineLayerProperties as IAnnotateLayerProperties; IAnnotateLayerPropertiesCollection pAnnotateLayerPropertiesCollection = pGeoFeatureLayer.AnnotationProperties; pAnnotateLayerPropertiesCollection.Clear(); pAnnotateLayerPropertiesCollection.Add(pAnnotateLayerProperties); axMapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewBackground, null, null); } catch (Exception ex) { LogAPI.Debug("图层标注设置异常:" + ex.Message); } } public List GetAllVisibleLayerInMap() { List allLayers = new List(); for (int i = 0; i < axMapControl.Map.LayerCount; i++) { ILayer layer = axMapControl.Map.get_Layer(i); if (layer is ICompositeLayer) { if (!layer.Visible) continue; allLayers.AddRange(GetAllVisibleLayerInGroupLayer(layer as ICompositeLayer)); } else { if (layer is T && layer.Visible) { if ((layer.MinimumScale == 0 || layer.MinimumScale > axMapControl.MapScale) && (layer.MaximumScale == 0 || layer.MaximumScale < axMapControl.MapScale)) allLayers.Add((T)layer); } } } return allLayers; } public void RefreshToolState() { if (!axMapControl.IsDisposed) RefreshToolState(axMapControl.CurrentTool); } public void SetCurrentTool(object tool) { if (tool is ITool) { axMapControl.CurrentTool = tool as ITool; RefreshToolState(tool); } } public ILayer GetGroupLayer(string strSearch) { return GetGroupLayer(axMapControl.Map, strSearch); } #endregion #region IKMap public object Hook => axMapControl.Object; public object MapCtrl => axMapControl; public ControlsSynchronizer CtlsSynchronizer { get { try { if (_CtrlSynchronizer == null) _CtrlSynchronizer = new ControlsSynchronizer(Hook as IMapControl3, null); } catch (Exception ex) { LogAPI.Debug(ex); } return _CtrlSynchronizer; } } public Control MapCtrlContainer => axMapControl.ContainingControl.ActiveControl; #endregion #region IDocumentView public string Header { get; set; } public bool IsOpened { get; set; } public bool AllowClose { get; set; } public bool IsFloat { get; set; } public bool IsActive { get; set; } public bool AllowFloat { get; set; } #endregion private void hoverButton1_Load(object sender, EventArgs e) { } private void hoverButton1_MouseDown(object sender, MouseEventArgs e) { popupCtrl.Show(); } #region 图片方位角 Dictionary dicPic = new Dictionary(); public void AddCameraPoint(object pCameraParams) { try { if (!(pCameraParams is List)) return; dicPic = new Dictionary(); currentEl = null; axMapControl.ActiveView.GraphicsContainer.Reset(); IElement CameraPointElm = null; // axMapControl.ActiveView.GraphicsContainer.Next(); while ((CameraPointElm = axMapControl.ActiveView.GraphicsContainer.Next()) != null) { if ((CameraPointElm as IElementProperties).Name == "CameraPoint") break; } if (CameraPointElm == null) { CameraPointElm = new GroupElementClass(); (CameraPointElm as IElementProperties).Name = "CameraPoint"; axMapControl.ActiveView.GraphicsContainer.AddElement(CameraPointElm, 1); } (CameraPointElm as IGroupElement).ClearElements();//.DeleteAllElements(); //if (pCameraParams != null) //{ List list = pCameraParams as List; foreach (AttachEntity item in list) { IPoint point = new PointClass() { X = item.X, Y = item.Y }; if (!dicPic.ContainsKey(item.FJMC)) { DrawAnglePoint(CameraPointElm as IGroupElement, point, item.Angle, item.FJMC, axMapControl, item.isCheck); dicPic.Add(item.FJMC, point); } } axMapControl.ActiveView.GraphicsContainer.Reset(); //} } catch (Exception ex) { LogAPI.Debug("方位角异常:" + ex.Message); MessageHelper.ShowError("方位角出现异常,请查看日志!"); } } /// /// 绘制带方向点 /// /// /// private void DrawAnglePoint(IGroupElement pGroupEle, IPoint point, double angle, string picName, object objmapcontrol, bool IsCheck) { try { PictureMarkerSymbolClass picMarkerSymbol = new PictureMarkerSymbolClass(); picMarkerSymbol.Angle = -angle; picMarkerSymbol.Size = 28; if (IsCheck) { picMarkerSymbol.CreateMarkerSymbolFromFile(esriIPictureType.esriIPicturePNG, Application.StartupPath + "\\Plugins\\KGIS.Plugin.MapView\\Resources\\近景.png"); } else { picMarkerSymbol.CreateMarkerSymbolFromFile(esriIPictureType.esriIPicturePNG, Application.StartupPath + "\\Plugins\\KGIS.Plugin.MapView\\Resources\\arrow_unselect.png"); } MarkerElementClass pMarkerAngleElement = new MarkerElementClass(); pMarkerAngleElement.Symbol = picMarkerSymbol; pMarkerAngleElement.Name = "ShowPicElement&" + picName; IElement pElement; pElement = pMarkerAngleElement as IElement; pElement.Geometry = point; pGroupEle.AddElement((IElement)pMarkerAngleElement); } catch (Exception ex) { LogAPI.Debug("绘制带方向点异常:" + ex); } } IElement currentEl = null; public void ChangedPointSymbol(string elementName, bool ischeck) { string elementNamePic = "ShowPicElement&" + elementName; axMapControl.ActiveView.GraphicsContainer.Reset(); IElement CameraPointElm = null; // axMapControl.ActiveView.GraphicsContainer.Next(); while ((CameraPointElm = axMapControl.ActiveView.GraphicsContainer.Next()) != null) { if ((CameraPointElm as IElementProperties).Name == "CameraPoint") break; } if (CameraPointElm == null) { CameraPointElm = new GroupElementClass(); (CameraPointElm as IElementProperties).Name = "CameraPoint"; } //(CameraPointElm as IGroupElement).Elements.Reset(); IEnumElement Elements = (CameraPointElm as IGroupElement).Elements; //Elements.Reset(); IElement el = Elements.Next(); //int num = (CameraPointElm as IGroupElement).ElementCount; if (el == null) { Elements.Reset(); el = Elements.Next(); } if (currentEl is IMarkerElement) { IMarkerElement elMarker = currentEl as IMarkerElement; if (elMarker.Symbol is IPictureMarkerSymbol) { IPictureMarkerSymbol picSymbol = elMarker.Symbol as IPictureMarkerSymbol; if (ischeck) { picSymbol.CreateMarkerSymbolFromFile(esriIPictureType.esriIPicturePNG, System.Windows.Forms.Application.StartupPath + "\\Plugins\\KGIS.Plugin.MapView\\Resources\\近景.png"); } else { picSymbol.CreateMarkerSymbolFromFile(esriIPictureType.esriIPicturePNG, System.Windows.Forms.Application.StartupPath + "\\Plugins\\KGIS.Plugin.MapView\\Resources\\arrow_unselect.png"); } elMarker.Symbol = picSymbol; } } while (el != null) { if (el == null) return; if (el is IMarkerElement) { IElementProperties elementPro = el as IElementProperties; if (!elementPro.Name.StartsWith("ShowPicElement")) continue; if (elementPro.Name == elementNamePic) { IMarkerElement elMarker = el as IMarkerElement; if (elMarker == null) continue; IPictureMarkerSymbol picSymbol = elMarker.Symbol as IPictureMarkerSymbol; if (picSymbol == null) continue; picSymbol.CreateMarkerSymbolFromFile(esriIPictureType.esriIPicturePNG, System.Windows.Forms.Application.StartupPath + "\\Plugins\\KGIS.Plugin.MapView\\Resources\\arrow_select.png"); elMarker.Symbol = picSymbol; currentEl = el; break; } } el = Elements.Next(); } axMapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); } #endregion public object GetAllEditOID() { try { IWorkspaceEdit2 workspaceEdit2 = (IWorkspaceEdit2)editor.EditWorkspace; IDataChangesEx dataChangesEx = workspaceEdit2.get_EditDataChanges(esriEditDataChangesType.esriEditDataChangesWithinSession); //获取所有变化的要素集 //String modifiedClass = null; //ESRI.ArcGIS.esriSystem.IEnumBSTR modifiedClasses = dataChangesEx.ModifiedClasses; //if (modifiedClasses == null) // return null; Dictionary> objids = new Dictionary>(); objids.Add("修改", new List()); objids.Add("新增", new List()); objids.Add("删除", new List()); //图层名称 //while ((modifiedClass = modifiedClasses.Next()) != null) //{ //获取当前要素类所有变化图形信息 IFIDSet fids = dataChangesEx.ChangedIDs["DLTBBG", esriDifferenceType.esriDifferenceTypeUpdateNoChange]; #region 参数 //准备输入参数 int featureOID = -1; #endregion fids.Next(out featureOID); while (featureOID != -1) { if (!objids["修改"].Contains(featureOID)) objids["修改"].Add(featureOID); fids.Next(out featureOID); } //获取删除图形信息 fids = dataChangesEx.ChangedIDs["DLTBBG", esriDifferenceType.esriDifferenceTypeDeleteNoChange]; fids.Next(out featureOID); while (featureOID != -1) { if (!objids["删除"].Contains(featureOID)) objids["删除"].Add(featureOID); fids.Next(out featureOID); } //获取插入图形信息 fids = dataChangesEx.ChangedIDs["DLTBBG", esriDifferenceType.esriDifferenceTypeInsert]; fids.Next(out featureOID); while (featureOID != -1) { if (!objids["新增"].Contains(featureOID)) objids["新增"].Add(featureOID); fids.Next(out featureOID); } System.Runtime.InteropServices.Marshal.FinalReleaseComObject(fids); //} return objids; } catch (Exception) { throw; } } #endregion } public class WorkCatalogPaths { public override string ToString() { return WorkCatalogPath; } /// /// 工作目录路径 /// public string WorkCatalogPath { get; set; } public string CODE { get; set; } public string DisplayName { get; set; } public DateTime UpdateTime { get; set; } } }