You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4220 lines
203 KiB
4220 lines
203 KiB
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; } |
|
/// <summary> |
|
/// 工作目录服务接口 |
|
/// </summary> |
|
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<int> Listobjid_update = new List<int>(); |
|
List<int> Listobjid_insert = new List<int>(); |
|
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 { } |
|
} |
|
}; |
|
} |
|
/// <summary> |
|
/// 根据区划代码获取县级名称 |
|
/// </summary> |
|
/// <param name="Codes"></param> |
|
/// <returns></returns> |
|
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<IUcZYQMagrHelper>(); |
|
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<IDataCheckHelper>(); |
|
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<IMapService>(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<T> GetAllLayerInGroupLayer<T>(ICompositeLayer groupLayer) |
|
{ |
|
List<T> allLayers = new List<T>(); |
|
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<T> list = GetAllLayerInGroupLayer<T>(layer as ICompositeLayer); |
|
allLayers.AddRange(list); |
|
} |
|
else |
|
{ |
|
if (layer is T) |
|
{ |
|
allLayers.Add((T)layer); |
|
} |
|
} |
|
} |
|
} |
|
return allLayers; |
|
} |
|
public List<T> GetAllVisibleLayerInGroupLayer<T>(ICompositeLayer groupLayer) |
|
{ |
|
List<T> allLayers = new List<T>(); |
|
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<T>(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; |
|
} |
|
|
|
|
|
/// <summary> 创建菜单项 |
|
/// </summary> |
|
/// <param name="itemEntity"></param> |
|
/// <returns></returns> |
|
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<Keys>(itemEntity.ShortcutKeys.Replace("Shift+", "")); |
|
item.ItemShortcut = new BarShortcut(Keys.Shift, key); |
|
} |
|
else |
|
{ |
|
Shortcut shortcut = GetObj<Shortcut>(itemEntity.ShortcutKeys.Replace("+", "").Trim()); |
|
BarShortcut ishortcut = new BarShortcut(shortcut); |
|
item.ItemShortcut = ishortcut; |
|
} |
|
} |
|
else |
|
{ |
|
Keys key = GetObj<Keys>(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<T>(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("异常信息结束"); |
|
} |
|
} |
|
|
|
/// <summary> 创建菜单项 |
|
/// </summary> |
|
/// <param name="itemType">菜单项类型</param> |
|
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<IFeature> 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); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 设置数据目录图层样式 |
|
/// </summary> |
|
/// <param name="layer"></param> |
|
/// <param name="element"></param> |
|
/// <returns></returns> |
|
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<IWorkCatalog>(); |
|
} |
|
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("异常信息结束"); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 初始化单图斑建库工程模板 |
|
/// </summary> |
|
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<LayerCfg>(strMxdPath); |
|
StrLayerInfo.LayerName = pro.ProjName; |
|
SetLayerCfgPath(StrLayerInfo, pro); |
|
Byte[] bytearr = Encoding.Default.GetBytes(SerializeAPI.SerializeToXML<LayerCfg>(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<ISystemCfg>(); |
|
SystemCfg = cfg2.Load(); |
|
if (SystemCfg.BGLayerLoadCfg == null) |
|
{ |
|
SystemCfg.BGLayerLoadCfg = new List<LayerCfg>(); |
|
} |
|
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 |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 设置默认数据库模板图层路径 |
|
/// </summary> |
|
/// <param name="StrLayerInfo"></param> |
|
/// <param name="pro"></param> |
|
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); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 文件夹复制 |
|
/// </summary> |
|
/// <param name="sourceDir">原文件夹</param> |
|
/// <param name="targetDirPath">目标目录</param> |
|
/// <returns>是否成功复制</returns> |
|
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<MenuPageEntity> pageDatas) |
|
{ |
|
try |
|
{ |
|
if (barManager1 == null) return; |
|
barManager1.BeginUpdate(); |
|
if (_CmdManager == null) |
|
{ |
|
_CmdManager = BundleRuntime.Instance.GetFirstOrDefaultService<ICommandManager>(); |
|
} |
|
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<LayerCfg> 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<LayerCfg> 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<ILayer, ILayer> GetAllLayerInGroupLayer(ICompositeLayer groupLayer, ILayer parentLayer) |
|
{ |
|
Dictionary<ILayer, ILayer> allLayers = new Dictionary<ILayer, ILayer>(); |
|
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<ILayer, ILayer> 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<ILayer, ILayer> GetChildLayerInGroupLayer(ICompositeLayer groupLayer, ILayer parentLayer) |
|
{ |
|
Dictionary<ILayer, ILayer> allLayers = new Dictionary<ILayer, ILayer>(); |
|
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 |
|
|
|
/// <summary> |
|
/// 获取模版数据库要素类 |
|
/// </summary> |
|
/// <param name="layerCfg"></param> |
|
/// <returns></returns> |
|
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<IDataCatalogService>(); |
|
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<LayerCfg>(LayerCfgd); |
|
//string strMxdPath = @"C:\Users\Administrator\Desktop\临时文档\新建文件夹\LatersSymbolToXML.xml"; |
|
//LayerCfg layerInfo = SerializeAPI.DeserializeToObject2<LayerCfg>(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<ISystemCfg>(); |
|
SystemCfg = cfg2.Load(); |
|
if (SystemCfg.JcLayerLoadCfg == null) |
|
{ |
|
SystemCfg.JcLayerLoadCfg = new List<LayerCfg>(); |
|
} |
|
|
|
//重新加载大数据影像 |
|
#region 大数据影像 |
|
LayerCfg tempSJYX = layerInfo.Layers.FirstOrDefault(a => a.LayerName == "影像底图"); |
|
LayerCfg tempSJYXWMTSLayer = null; |
|
List<LayerCfg> 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<ImageSlicing> keyAndValues = UserLoginHelper.GetAllYXGroupLayer(); |
|
if (keyAndValues != null && keyAndValues.Count > 0) |
|
{ |
|
IGroupLayer groupLayer = Kingo.KMapSDK.Common.CommonAPI.GetGroupLayerByName<IGroupLayer>(MapsManager.Instance.MapService.getAxMapControl().Map, Kingo.KMapSDK.Common.GlobalConfig.Instance.GroupName); |
|
IDataCatalogService _DataCatalog = BundleRuntime.Instance.GetFirstOrDefaultService<IDataCatalogService>(); |
|
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<ILayer, ILayer> layers = new Dictionary<ILayer, ILayer>(); |
|
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<LayerCfg>(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<IMap>(); |
|
} |
|
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; |
|
} |
|
} |
|
|
|
/// <summary> |
|
///为文件夹添加users,everyone,Administrator用户组的完全控制权限 |
|
/// </summary> |
|
/// <param name="dirPath"></param> |
|
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); |
|
} |
|
|
|
/// <summary> |
|
/// 修改文件的可读写 |
|
/// </summary> |
|
/// <param name="T_Path"></param> |
|
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); |
|
} |
|
} |
|
/// <summary> |
|
/// 根据工程文件路径获取工作目录路径 |
|
/// </summary> |
|
/// <param name="pPrjFile"></param> |
|
/// <returns></returns> |
|
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); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 根据名称获取当前工程中的图层 |
|
/// </summary> |
|
/// <param name="pName"></param> |
|
/// <returns></returns> |
|
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; |
|
} |
|
|
|
/// <summary> |
|
/// 通过图层名称获取图层 |
|
/// </summary> |
|
/// <param name="pName">图层名称</param> |
|
/// <returns></returns> |
|
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<IFeature> 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<IFeature>(); |
|
//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; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 获取特定样式的图形元素 |
|
/// </summary> |
|
/// <param name="geoDraw"></param> |
|
/// <param name="R"></param> |
|
/// <param name="G"></param> |
|
/// <param name="B"></param> |
|
/// <returns></returns> |
|
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); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 清除选中的要素 |
|
/// </summary> |
|
/// <param name="mapControl"></param> |
|
/// <param name="layerName"></param> |
|
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<T> GetAllLayerInMap<T>() |
|
{ |
|
try |
|
{ |
|
List<T> allLayers = new List<T>(); |
|
for (int i = 0; i < axMapControl.Map.LayerCount; i++) |
|
{ |
|
ILayer layer = axMapControl.Map.get_Layer(i); |
|
if (layer is ICompositeLayer) |
|
{ |
|
List<T> list = GetAllLayerInGroupLayer<T>(layer as ICompositeLayer); |
|
allLayers.AddRange(list); |
|
} |
|
else |
|
{ |
|
if (layer is T) |
|
{ |
|
allLayers.Add((T)layer); |
|
} |
|
} |
|
} |
|
return allLayers; |
|
} |
|
catch (Exception ex) |
|
{ |
|
throw ex; |
|
} |
|
} |
|
public List<IGroupLayer> GetAllRasterGroupLayerInMap<T>() |
|
{ |
|
try |
|
{ |
|
List<IGroupLayer> allLayers = new List<IGroupLayer>(); |
|
for (int i = 0; i < axMapControl.Map.LayerCount; i++) |
|
{ |
|
ILayer layer = axMapControl.Map.get_Layer(i); |
|
if (layer is ICompositeLayer) |
|
{ |
|
List<T> list = GetAllLayerInGroupLayer<T>(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<T> GetAllDisplayLayerInMap<T>() |
|
{ |
|
List<T> allLayers = new List<T>(); |
|
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<T>(layer as ICompositeLayer)); |
|
} |
|
else |
|
{ |
|
if (layer is T) |
|
{ |
|
if (layer.Visible) |
|
{ |
|
allLayers.Add((T)layer); |
|
} |
|
|
|
} |
|
} |
|
} |
|
return allLayers; |
|
} |
|
public List<T> GetAllDisplayLayerInGroupLayer<T>(ICompositeLayer pCompLayer) |
|
{ |
|
List<T> allLayers = new List<T>(); |
|
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<T>(pCompLayer.get_Layer(j) as ICompositeLayer)); |
|
} |
|
} |
|
return allLayers; |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex); |
|
} |
|
return allLayers; |
|
} |
|
/// <summary> |
|
/// 根据索引获得地图上显示的图层 |
|
/// </summary> |
|
/// <param name="pMap">地图</param> |
|
/// <param name="index">索引</param> |
|
/// <returns>检索到的图层</returns> |
|
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); |
|
} |
|
} |
|
/// <summary> |
|
/// 获取当前地图控件在屏幕上的位置 |
|
/// </summary> |
|
/// <returns></returns> |
|
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<IDataCatalogService>(); |
|
if (_DataCatalog == null || _DataCatalog.CurrentLayers == null) return; |
|
GetLayersState(); |
|
//Xml数据 |
|
string Str = SerializeAPI.SerializeToXML<LayerCfg>(_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<IDataCatalogService>(); |
|
if (_DataCatalog == null || _DataCatalog.CurrentLayers == null) return; |
|
GetLayersState(); |
|
//Xml数据 |
|
string Str = SerializeAPI.SerializeToXML<LayerCfg>(_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); |
|
} |
|
} |
|
/// <summary> |
|
/// 保存图层状态(透明度-比例尺-样式) |
|
/// </summary> |
|
private void GetLayersState() |
|
{ |
|
try |
|
{ |
|
if (_DataCatalog == null) |
|
_DataCatalog = BundleRuntime.Instance.GetFirstOrDefaultService<IDataCatalogService>(); |
|
//随时保存-重新获取 |
|
ISystemCfg cfg2 = BundleRuntime.Instance.GetFirstOrDefaultService<ISystemCfg>(); |
|
SystemCfg = cfg2.Load(); |
|
if (SystemCfg.JcLayerLoadCfg == null) |
|
{ |
|
SystemCfg.JcLayerLoadCfg = new List<LayerCfg>(); |
|
} |
|
ProjectInfo projectInfo = MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo; |
|
if (projectInfo == null || _DataCatalog.CurrentLayers == null) return; |
|
|
|
//获取图层样式 |
|
LayerCfg layerInfo = _DataCatalog.CurrentLayers as LayerCfg; |
|
List<LayerCfg> 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<LabelingInfo> 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<LayerCfg>(_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; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 图层标注设置 |
|
/// </summary> |
|
/// <param name="layer"></param> |
|
/// <param name="layerCfg"></param> |
|
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<T> GetAllVisibleLayerInMap<T>() |
|
{ |
|
List<T> allLayers = new List<T>(); |
|
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<T>(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<string, ESRI.ArcGIS.Geometry.IPoint> dicPic = new Dictionary<string, ESRI.ArcGIS.Geometry.IPoint>(); |
|
public void AddCameraPoint(object pCameraParams) |
|
{ |
|
try |
|
{ |
|
if (!(pCameraParams is List<AttachEntity>)) return; |
|
dicPic = new Dictionary<string, IPoint>(); |
|
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<AttachEntity> list = pCameraParams as List<AttachEntity>; |
|
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("方位角出现异常,请查看日志!"); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 绘制带方向点 |
|
/// </summary> |
|
/// <param name="pt"></param> |
|
/// <param name="angle"></param> |
|
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<string, List<int>> objids = new Dictionary<string, List<int>>(); |
|
objids.Add("修改", new List<int>()); |
|
objids.Add("新增", new List<int>()); |
|
objids.Add("删除", new List<int>()); |
|
//图层名称 |
|
//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; } |
|
/// <summary> |
|
/// 工作目录路径 |
|
/// </summary> |
|
public string WorkCatalogPath { get; set; } |
|
public string CODE { get; set; } |
|
public string DisplayName { get; set; } |
|
public DateTime UpdateTime { get; set; } |
|
} |
|
}
|
|
|