using Sunny.UI;
using SuperMap.Data;
using SuperMap.Layout;
using SuperMap.Mapping;
using SuperMap.UI;
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WeifenLuo.WinFormsUI.Docking;
using WWPipeLine.Commons;
namespace WWPipeLine.MapBasic
{
public class ComsStatic
{
//public static ComsStatic Instance { get => new ComsStatic(); }
private static ComsStatic m_Instance;
public static ComsStatic Instance
{
get
{
if (m_Instance == null)
m_Instance = new ComsStatic();
return m_Instance;
}
}
private static Workspace m_Workspace;
public void SetWorkspace(Workspace ws) { m_Workspace = ws; }
private static MapControl m_MapControl;
public void SetMapControl(MapControl mp) { m_MapControl = mp; }
private static DockPanel m_DockPanel;
public void SetDockPanel(DockPanel dp) { m_DockPanel = dp; }
private static IMessageInterface m_IMessageInterface;
public void SetIMessageInterface(IMessageInterface mi) { m_IMessageInterface = mi; }
public static IMessageInterface MessageInterface { get => m_IMessageInterface; }
#region 用户信息
public void SetUserID(int uid) { m_UserID = uid; }
private static int m_UserID;
public static int UserID { get => m_UserID; }
public void SetUserName(string uNick) { m_UserNick = uNick; }
private static string m_UserNick;
public static string UserNick { get => m_UserNick; }
public void SetLoginID(int uid) { m_LoginID = uid; }
private static int m_LoginID;
public static int LoginID { get => m_LoginID; }
#endregion
#region Workspace MapControl DatasetVector
///
/// 工作空间的地图索引值 配置在ini文件中WorkspaceMapIndex
///
public static Int32 WorkspaceMapIndex
{
get
{
string index = IniHelper.Read(IniHelper.KEY_WorkspaceMapIndex_PATH);
return StringToInt(index);
}
}
///
/// 工作空间的数据源索引值 配置在ini文件中WorkspaceDatasourceIndex
///
private static Int32 WorkspaceDatasourceIndex
{
get
{
string index = IniHelper.Read(IniHelper.KEY_WorkspaceDatasourceIndex_PATH);
return StringToInt(index);
}
}
public static Datasource Datasource { get => m_Workspace.Datasources[WorkspaceDatasourceIndex]; }
public static Workspace Workspace { get => m_Workspace; }
public static MapControl MapControl { get => m_MapControl; }
public static DockPanel DockPanel { get => m_DockPanel; }
///
/// 配置表
///
public static DatasetVector dvJSLK_PZ { get => Datasource.Datasets["JSLK_PZ"] as DatasetVector; }
///
/// 供水节点表
///
public static DatasetVector dvJSJDPT { get => Datasource.Datasets["JSJDPT"] as DatasetVector; }
///
/// 供水管线表
///
public static DatasetVector dvJSLK { get => Datasource.Datasets["JSLK"] as DatasetVector; }
public static DatasetVector dsGuanDian { get => Datasource.Datasets["GSGD"] as DatasetVector; }
public static DatasetVector dvFM
{
get
{
if (Datasource.Datasets.Contains("dvFM"))
Datasource.Datasets.Delete("dvFM");
return Datasource.Datasets.CreateAndAppendWithSmid("dvFM", dsGuanDian.Query(" fldm='阀门' ", CursorType.Static));
}
}
public static Layer LayerGuanXian
{
get
{
LayerGroup lg = m_MapControl.Map.Layers.FindLayer("LayerGroup") as LayerGroup;
if (lg.Count == 0) return null;
Layer lyr = null;
foreach (Layer lyrr in lg)
{
if (lyrr.Dataset == dvJSLK) { lyr = lyrr; break; }
}
return lyr;
}
}
//public static Layers MapLayers { get => m_MapControl.Map.Layers; }
///
/// 管点管线图层 LayerGroup
///
public static List MapLayers
{
get
{
List layerList = new List();
LayerGroup lg = m_MapControl.Map.Layers.FindLayer("LayerGroup") as LayerGroup;
if (lg.Count == 0) return null;
foreach (Layer lyrr in lg)
{
if (lyrr.Dataset == null || lyrr.Dataset.Datasource.Alias != Datasource.Alias) continue;
layerList.Add(lyrr);
}
return layerList;
}
}
///
/// 管点管线图层 + 用水单位图层
///
public static List MapLayersUsed
{
get
{
List layerList = MapLayers;
LayerGroup lg = m_MapControl.Map.Layers.FindLayer("LayerGroup#1") as LayerGroup;
foreach (Layer lyrr in lg)
{
if (lyrr.Dataset == null || lyrr.Dataset.Datasource.Alias != Datasource.Alias) continue;
if (!",unitpy,".ToLower().Contains(lyrr.Dataset.Name.ToLower())) continue;
layerList.Add(lyrr);
}
return layerList;
}
}
///
/// 当前数据集的所有图层
///
public static List MapLayersAll
{
get
{
List layerList = new List();
foreach (Layer lyr in m_MapControl.Map.Layers)
{
if (lyr.Name.ToLower().Contains("layergroup"))
{
LayerGroup lyrG = lyr as LayerGroup;
foreach (Layer lyrr in lyrG.Layers)
{
if (lyrr.Dataset.Datasource.Alias == Datasource.Alias)
layerList.Add(lyrr);
}
}
else if (lyr.Dataset.Datasource.Alias == Datasource.Alias)
{
layerList.Add(lyr);
}
}
return layerList;
}
}
public static DataTable getLayers()
{
DataTable dt = new DataTable { TableName = "LayersDataTable" };
dt.Columns.Add("LayerName"); dt.Columns.Add("LayerCaption"); dt.Columns.Add("LayerDatasetName");
DataRow dataRow;
foreach (Layer r in MapLayers)
{
dataRow = dt.NewRow();
dataRow[0] = r.Name;
dataRow[1] = r.Caption;
dataRow[2] = r.Dataset.Name;
dt.Rows.Add(dataRow);
}
return dt;
}
public static void SetLayersIsSelectableFalse(string layerName, bool isSelect)
{
foreach (Layer r in MapLayers)
{
if (r.Name == layerName || r.Caption == layerName || r.Dataset.Name == layerName)
r.IsSelectable = isSelect;
else
r.IsSelectable = !isSelect;
}
}
public static void SetLayersIsVisibleFalse(string layerName, bool isSelect)
{
foreach (Layer r in MapLayers)
{
if (r.Name == layerName || r.Caption == layerName || r.Dataset.Name == layerName)
r.IsVisible = isSelect;
else
r.IsVisible = !isSelect;
}
}
///
/// 依据TrackingLayer的Name清空
///
///
public static void TrackingLayerRemove(string tag)
{
int index = MapControl.Map.TrackingLayer.IndexOf(tag);
while (index != -1)
{
MapControl.Map.TrackingLayer.Remove(index);
index = MapControl.Map.TrackingLayer.IndexOf(tag);
}
}
///
/// 关闭当前主程序中除了Tag=MainControls的其他所有窗体
/// 默认4个主要窗体: 主窗体 工具栏 鹰眼 图层
///
public static void closeFormTagMainControls()
{
try
{
foreach (Form form in Application.OpenForms)
{
if (form.Tag?.ToString() != "MainControls" && form.Text?.ToString() != "工具栏")
{
form.Close(); break;
}
}
if (Application.OpenForms.Count > 6)
{
closeFormTagMainControls();
}
}
catch (Exception ex)
{
ComsStatic.ShowErrorLog(ex);
}
}
#endregion
#region SuperMap.Data相关操作
public static readonly string[] resultFieldsGX = new string[] { "fldm", "cz", "gj", "cd", "yl", "msfs", "dzms", "qsdw", "tcdw" };
public static readonly string[] resultFields = new string[] { "fldm", "fsw", "xh", "gg", "cz", "kj", "gj", "yl", "dmgc", "ms", "msfs", "dzms", "qsdw", "tcdw" };
public static Recordset QueryRecordset(DatasetVector dv, string sqlWhere, string[] resultFields = null, string[] groupBy = null, string[] orderBy = null)
{
QueryParameter para = new QueryParameter();
if (sqlWhere != null) para.AttributeFilter = sqlWhere;
if (resultFields != null) para.ResultFields = Commons.StringEx.setToLower(resultFields);
if (groupBy != null) para.GroupBy = Commons.StringEx.setToLower(groupBy);
if (orderBy != null) para.OrderBy = Commons.StringEx.setToLower(orderBy);
para.CursorType = CursorType.Static;
return dv.Query(para);
}
public static Recordset QueryRecordsetDynamic(DatasetVector dv, string sqlWhere, string[] resultFields = null, string[] groupBy = null, string[] orderBy = null)
{
QueryParameter para = new QueryParameter();
if (sqlWhere != null) para.AttributeFilter = sqlWhere;
if (resultFields != null) para.ResultFields = Commons.StringEx.setToLower(resultFields);
if (groupBy != null) para.GroupBy = Commons.StringEx.setToLower(groupBy);
if (orderBy != null) para.OrderBy = Commons.StringEx.setToLower(orderBy);
para.CursorType = CursorType.Dynamic;
return dv.Query(para);
}
public static DataTable QueryDataTable(DatasetVector dv, string sqlWhere, string[] resultFields = null, string[] groupBy = null, string[] orderBy = null)
{
QueryParameter para = new QueryParameter();
if (sqlWhere != null) para.AttributeFilter = sqlWhere;
if (resultFields != null) para.ResultFields = Commons.StringEx.setToLower(resultFields);
if (groupBy != null) para.GroupBy = Commons.StringEx.setToLower(groupBy);
if (orderBy != null) para.OrderBy = Commons.StringEx.setToLower(orderBy);
para.CursorType = CursorType.Static;
Recordset rd = dv.Query(para);
return RecordsetToDataTable(rd, dv.Name);
}
public static List