1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099 |
- 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
- /// <summary>
- /// 工作空间的地图索引值 配置在ini文件中WorkspaceMapIndex
- /// </summary>
- public static Int32 WorkspaceMapIndex
- {
- get
- {
- string index = IniHelper.Read(IniHelper.KEY_WorkspaceMapIndex_PATH);
- return StringToInt(index);
- }
- }
- /// <summary>
- /// 工作空间的数据源索引值 配置在ini文件中WorkspaceDatasourceIndex
- /// </summary>
- 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; }
- /// <summary>
- /// 配置表
- /// </summary>
- public static DatasetVector dvJSLK_PZ { get => Datasource.Datasets["JSLK_PZ"] as DatasetVector; }
- /// <summary>
- /// 供水节点表
- /// </summary>
- public static DatasetVector dvJSJDPT { get => Datasource.Datasets["JSJDPT"] as DatasetVector; }
- /// <summary>
- /// 供水管线表
- /// </summary>
- 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; }
- /// <summary>
- /// 管点管线图层 LayerGroup
- /// </summary>
- public static List<Layer> MapLayers
- {
- get
- {
- List<Layer> layerList = new List<Layer>();
- 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;
- }
- }
- /// <summary>
- /// 管点管线图层 + 用水单位图层
- /// </summary>
- public static List<Layer> MapLayersUsed
- {
- get
- {
- List<Layer> 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;
- }
- }
- /// <summary>
- /// 当前数据集的所有图层
- /// </summary>
- public static List<Layer> MapLayersAll
- {
- get
- {
- List<Layer> layerList = new List<Layer>();
- 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;
- }
- }
- /// <summary>
- /// 依据TrackingLayer的Name清空
- /// </summary>
- /// <param name="tag"></param>
- 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);
- }
- }
- /// <summary>
- /// 关闭当前主程序中除了Tag=MainControls的其他所有窗体
- /// <para>默认4个主要窗体: 主窗体 工具栏 鹰眼 图层</para>
- /// </summary>
- 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<object> QueryFieldsValueList(DatasetVector dv, string sqlWhere, string resultFields, string[] groupBy = null, string[] orderBy = null)
- {
- Recordset rd = QueryRecordset(dv, sqlWhere, new string[] { resultFields }, groupBy, orderBy);
- List<object> result = new List<object>();
- rd.MoveFirst();
- if (!rd.IsEOF)
- {
- result.Add(rd.GetFieldValue(resultFields));
- rd.MoveNext();
- }
- return result;
- }
- public static DataTable RecordsetToDataTable(Recordset recordset, string tableName = null)
- {
- if (string.IsNullOrEmpty(tableName)) tableName = recordset.Dataset.Name;
- DataTable dt = new DataTable { TableName = tableName };
- FieldInfos fieldInfos = recordset.GetFieldInfos();
- Int32 count = fieldInfos.Count;
- DataColumn dataColumn;
- for (Int32 i = 0; i < count; i++)
- {
- dataColumn = new DataColumn { ColumnName = fieldInfos[i].Name, Caption = fieldInfos[i].Caption };
- dt.Columns.Add(dataColumn);
- }
- recordset.MoveFirst();
- Int32 length = recordset.RecordCount;
- DataRow dr;
- for (int i = 0; i < length; i++)
- {
- dr = dt.NewRow();
- var actIndex = 0;
- for (Int32 j = 0; j < count; j++)
- {
- var objValue = recordset.GetFieldValue(j);
- string value = objValue?.ToString();
- dr[actIndex++] = value;
- }
- dt.Rows.Add(dr);
- recordset.MoveNext();
- }
- return dt;
- }
- public static List<DataTable> TongJiFieldGroupCount(DatasetVector dv, string[] strField)
- {
- Recordset rd = null;
- List<DataTable> dts = new List<DataTable>();
- DataTable dt;
- DataRow dr;
- string fieldValue = string.Empty;
- foreach (string field in strField)
- {
- string[] ck = new string[] { field };
- rd = ComsStatic.QueryRecordset(dv, null, ck, ck, ck);
- dt = new DataTable(); dt.Columns.Add("类别"); dt.Columns.Add("数量");
- if (!HasField(dv, field)) continue;
- dt.TableName = rd.GetFieldInfos()[field].Caption;
- if (rd.RecordCount == 0)//该字段所有值均为null 不能GroupBy
- {
- dr = dt.NewRow();
- dr["类别"] = "未知"; dr["数量"] = dv.RecordCount;
- dt.Rows.Add(dr);
- }
- else
- {
- rd.MoveFirst();
- while (!rd.IsEOF)
- {
- dr = dt.NewRow();
- fieldValue = rd.GetFieldValue(field)?.ToString();
- if (string.IsNullOrEmpty(fieldValue))
- {
- dr["类别"] = "未知";
- dr["数量"] = dv.Query(string.Format("{0} is null", field), CursorType.Static).RecordCount;
- }
- else
- {
- dr["类别"] = fieldValue;
- dr["数量"] = dv.Query(string.Format("{0}='{1}'", field, fieldValue), CursorType.Static).RecordCount;
- }
- dt.Rows.Add(dr);
- rd.MoveNext();
- }
- }
- dr = dt.NewRow();
- dr["类别"] = dt.TableName + "总量"; dr["数量"] = dv.RecordCount;
- dt.Rows.Add(dr);
- dts.Add(dt);
- }
- ComsStatic.RecordsetDispose(rd);
- return dts;
- }
- public static string getSqlCheckListBox(Dictionary<string, CheckedListBox> dic)
- {
- StringBuilder sb = new StringBuilder(" 1=1 ");
- foreach (string key in dic.Keys)
- {
- if (dic[key].CheckedItems.Count > 0)
- {
- sb.Append(" AND (1=2 ");
- foreach (string clbItem in dic[key].CheckedItems)
- {
- if (clbItem == "未知")
- sb.AppendFormat(" OR {0} is null ", key);
- else
- sb.AppendFormat(" OR {0}='{1}' ", key, clbItem);
- }
- sb.Append(" ) ");
- }
- }
- return sb.ToString();
- }
- /// <summary>
- /// 获取DatasetVector的FieldInfos数组 不包含系统字段
- /// </summary>
- /// <param name="dv"></param>
- /// <returns></returns>
- public static string[] GetFieldInfos(DatasetVector dv)
- {
- List<string> listStr = new List<string>();
- foreach (FieldInfo f in dv.FieldInfos)
- {
- if (f.IsSystemField) continue;
- listStr.Add(f.Name);
- }
- return listStr.ToArray();
- }
- public static bool HasField(DatasetVector m_DatasetVector, string _field)
- {
- bool hasField = false;
- FieldInfos fieldInfos = m_DatasetVector.FieldInfos;
- for (int i = 0; i < fieldInfos.Count; i++)
- {
- if (fieldInfos[i].Name.ToLower() == _field.ToLower())
- {
- hasField = true; break;
- }
- }
- return hasField;
- }
- public static bool HasField(Recordset m_Recordset, string _field)
- {
- bool hasField = false;
- FieldInfos fieldInfos = m_Recordset.GetFieldInfos();
- for (int i = 0; i < fieldInfos.Count; i++)
- {
- if (fieldInfos[i].Name.ToLower() == _field.ToLower())
- {
- hasField = true; break;
- }
- }
- return hasField;
- }
- public static void RecordsetDispose(Recordset rd)
- {
- if (rd != null) { rd.Close(); rd.Dispose(); }
- }
- public static void EditHistoryUndo(EditHistory eh)
- {
- while (eh.CanUndo) { eh.Undo(); }
- eh.Clear(); eh.Dispose();
- }
- public static DataTable GetJSLKbyJSJDPT(DataTable dt)
- {
- #region 构造 管线的起始管点和终点管点 信息
- DataColumn dataColumn;
- dataColumn = new DataColumn { ColumnName = "qdsmid", Caption = "起点SmID" }; dt.Columns.Add(dataColumn);
- dataColumn = new DataColumn { ColumnName = "qdsmx", Caption = "起点X坐标" }; dt.Columns.Add(dataColumn);
- dataColumn = new DataColumn { ColumnName = "qdsmy", Caption = "起点Y坐标" }; dt.Columns.Add(dataColumn);
- dataColumn = new DataColumn { ColumnName = "qddmgc", Caption = "起点地面高程" }; dt.Columns.Add(dataColumn);
- dataColumn = new DataColumn { ColumnName = "qdgdms", Caption = "起点埋深" }; dt.Columns.Add(dataColumn);
- dataColumn = new DataColumn { ColumnName = "qdgc", Caption = "起点高程" }; dt.Columns.Add(dataColumn);
- dataColumn = new DataColumn { ColumnName = "zdsmid", Caption = "终点SmID" }; dt.Columns.Add(dataColumn);
- dataColumn = new DataColumn { ColumnName = "zdsmx", Caption = "终点X坐标" }; dt.Columns.Add(dataColumn);
- dataColumn = new DataColumn { ColumnName = "zdsmy", Caption = "终点Y坐标" }; dt.Columns.Add(dataColumn);
- dataColumn = new DataColumn { ColumnName = "zddmgc", Caption = "终点地面高程" }; dt.Columns.Add(dataColumn);
- dataColumn = new DataColumn { ColumnName = "zdgdms", Caption = "终点埋深" }; dt.Columns.Add(dataColumn);
- dataColumn = new DataColumn { ColumnName = "zdgc", Caption = "终点高程" }; dt.Columns.Add(dataColumn);
- #endregion
- DataTable dtJSJDPT;
- foreach (DataRow dr in dt.Rows)
- {
- dtJSJDPT = QueryDataTable(dvJSJDPT, string.Format(" bsm='{0}' ", dr["qsdh"]));
- if (dtJSJDPT.Rows.Count == 1)
- {
- dr["qdsmid"] = dtJSJDPT.Rows[0]["smid"]; dr["qdsmx"] = dtJSJDPT.Rows[0]["x"]; dr["qdsmy"] = dtJSJDPT.Rows[0]["y"];
- dr["qddmgc"] = dtJSJDPT.Rows[0]["dmgc"]; dr["qdgdms"] = dtJSJDPT.Rows[0]["ms"];
- //dr["qdgc"] = Math.Round(double.Parse(dtJSJDPT.Rows[0]["dmgc"]?.ToString()) - double.Parse(dtJSJDPT.Rows[0]["ms"]?.ToString()), 2);
- dr["qdgc"] = StringToDouble(dtJSJDPT.Rows[0]["dmgc"], 2) - StringToDouble(dtJSJDPT.Rows[0]["ms"], 2);
- }
- dtJSJDPT = QueryDataTable(dvJSJDPT, string.Format(" bsm='{0}' ", dr["zddh"]));
- if (dtJSJDPT.Rows.Count == 1)
- {
- dr["zdsmid"] = dtJSJDPT.Rows[0]["smid"]; dr["zdsmx"] = dtJSJDPT.Rows[0]["x"]; dr["zdsmy"] = dtJSJDPT.Rows[0]["y"];
- dr["zddmgc"] = dtJSJDPT.Rows[0]["dmgc"]; dr["zdgdms"] = dtJSJDPT.Rows[0]["ms"];
- //dr["zdgc"] = Math.Round(double.Parse(dtJSJDPT.Rows[0]["dmgc"]?.ToString()) - double.Parse(dtJSJDPT.Rows[0]["ms"]?.ToString()), 2);
- dr["zdgc"] = StringToDouble(dtJSJDPT.Rows[0]["dmgc"], 2) - StringToDouble(dtJSJDPT.Rows[0]["ms"], 2);
- }
- }
- return dt;
- }
- public static Dictionary<string, object> getGuanXianPeiZhi(string pzlx)
- {
- DatasetVector dv = ComsStatic.dvJSLK_PZ;
- Dictionary<string, object> dic = new Dictionary<string, object>();
- Recordset _rd = dv.Query(string.Format(" pzlx='{0}' ", pzlx), CursorType.Static);
- if (_rd.RecordCount == 0) return dic;
- _rd.MoveFirst();
- while (!_rd.IsEOF)
- {
- string gxcz = _rd.GetFieldValue("gxcz").ToString();
- dic.Add(gxcz + "_gxyjnx", _rd.GetFieldValue("gxyjnx"));
- dic.Add(gxcz + "_gxbznx", _rd.GetFieldValue("gxbznx"));
- dic.Add(gxcz + "_gxms", _rd.GetFieldValue("gxms"));
- _rd.MoveNext();
- }
- return dic;
- }
- public static double GetMaxValue(DatasetVector dv, string fieldName)
- {
- return dv.Statistic(fieldName, StatisticMode.Max);
- }
- public static int GetMaxValueInt(DatasetVector dv, string fieldName)
- {
- return StringToInt(dv.Statistic(fieldName, StatisticMode.Max));
- }
- public static object GetOnlyValueByField(DatasetVector dv, string sqlWhere, string field)
- {
- Recordset rd = dv.Query(sqlWhere, CursorType.Static);
- if (rd is null || rd.RecordCount != 1) return null;
- return rd.GetFieldValue(field);
- }
- /// <summary>
- /// 在当前的DatasetVector中,获取指定列名的最小值
- /// </summary>
- /// <param name="fieldName"></param>
- /// <returns></returns>
- public static double GetMinValue(DatasetVector dv, string fieldName)
- {
- return dv.Statistic(fieldName, StatisticMode.Min);
- }
- #endregion
- #region ShowUIMessageTip界面提示信息
- public static void ShowUIMessageTipOKorError(bool _result, string msg, string logMsg = "")
- {
- if (_result)
- {
- ShowOKLog(msg + "操作成功!", logMsg);
- }
- else
- {
- ShowErrorLog(msg + "操作失败!", logMsg);
- }
- }
- public static void ShowErrorLog(object msg, string logMsg = "")
- {
- LogHelper.Error(string.Format("{0}.{1}", msg, logMsg));
- UIMessageTip.ShowError(msg.ToString(), 2000, false, new Point(800, 400), true);
- }
- public static void ShowOK(string msg)
- {
- UIMessageTip.ShowOk(msg, 2000, false, new Point(800, 400), true);
- }
- public static void ShowOKLog(object msg, string logMsg = "")
- {
- pgAddLoginm(string.Format("{0}.{1}", msg, logMsg));
- LogHelper.Info(string.Format("{0}.{1}", msg, logMsg));
- UIMessageTip.ShowOk(msg.ToString(), 2000, false, new Point(800, 400), true);
- }
- #endregion
- #region String操作
- public static double StringToDouble(object str, int dleng = -1)
- {
- if (str is null) return 0;
- double result = 0.0D;
- double.TryParse(str.ToString(), out result);
- if (dleng != -1)
- {
- result = Math.Round(result, dleng);
- }
- return result;
- }
- /// <summary>
- /// Object转Int Ojbect=null或者转换失败时返回0;
- /// </summary>
- /// <param name="str"></param>
- /// <returns></returns>
- public static int StringToInt(object str)
- {
- if (str is null) return 0;
- Int32 result = 0;
- Int32.TryParse(str.ToString(), out result);
- return result;
- }
- public static Int16 StringToInt16(object str)
- {
- if (str is null) return 0;
- Int16 result = 0;
- Int16.TryParse(str.ToString(), out result);
- return result;
- }
- public static float StringToFloat(object str)
- {
- if (str is null) return 0.0F;
- float result = 0.0F;
- float.TryParse(str.ToString(), out result);
- return result;
- }
- public static string GetStrAddChar(object str, char ch)
- {
- return ch + str.ToString() + ch;
- }
- public static string getMd5Hash(string input, string key)
- {
- MD5 md5Hasher = MD5.Create();
- string str = input + key;
- byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(str));
- StringBuilder sBuilder = new StringBuilder();
- for (int i = 0; i < data.Length; i++)
- {
- sBuilder.Append(data[i].ToString("x2"));
- }
- return sBuilder.ToString();
- }
- #endregion
- #region SummyUI的控件设置和数据绑定
- public static readonly UIStyle uiStyleCom = UIStyle.Blue; //R 80 G 160 B 255
- public static readonly string HideEnableTag = ",smid,smx,smy,smkey,smsdriw,smsdrin,smsdrie,smsdris,smgranule,SmGeometry,smlength,smtopoerror,smlibtileid,smperimeter,smarea,smnodeid,smuserid,objectid,bsm,wth,tfh,dmt,x,y,dinggc,digc,cqbh,tsdh,ssbh,ROTATEANGLE,lrrq,enabled,zcbh,qdms,zdms,shape_length,shape_area,lx,qsdh,zddh,fmlx,sblx,sbsl,sbdz,qdsmid,qdsmx,qdsmy,zdsmid,zdsmx,zdsmy,".ToLower();
- public static void setUIDataGridView(UIDataGridView dgv, DataTable dt = null, string showTag = null, string hideTag = null)
- {
- dgv.Dock = DockStyle.Fill;
- dgv.ShowEditingIcon = false;
- dgv.ShowCellToolTips = false;
- dgv.AllowUserToAddRows = false;
- dgv.AllowUserToResizeRows = false;
- dgv.AllowUserToDeleteRows = false;
- dgv.AllowUserToOrderColumns = false;
- dgv.ReadOnly = true;
- dgv.MultiSelect = false;
- dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
- dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
- dgv.Style = UIStyle.Gray;// ComsStatic.uiStyleCom;
- //dgv.RowPostPaint += Dgv_RowPostPaint;
- if (dt != null)
- {
- dgv.DataSource = dt;
- if (showTag != null)
- {
- string[] strShow = showTag.ToLower().Split(',');
- int indexStr = 0;
- for (int i = 0; i < dgv.Columns.Count; i++)
- {
- dgv.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
- dgv.Columns[i].HeaderText = dt.Columns[i].Caption;
- indexStr = strShow.ToList().IndexOf(dgv.Columns[i].Name.ToLower());
- if (indexStr > -1)
- dgv.Columns[i].DisplayIndex = indexStr;
- else
- dgv.Columns[i].Visible = false;
- }
- return;
- }
- if (string.IsNullOrEmpty(hideTag))
- {
- for (int i = 0; i < dgv.Columns.Count; i++)
- {
- dgv.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
- dgv.Columns[i].HeaderText = dt.Columns[i].Caption;
- if (HideEnableTag.Contains("," + dgv.Columns[i].Name.ToLower() + ","))
- {
- dgv.Columns[i].Visible = false;
- }
- }
- }
- else
- {
- for (int i = 0; i < dgv.Columns.Count; i++)
- {
- dgv.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
- dgv.Columns[i].HeaderText = dt.Columns[i].Caption;
- if (HideEnableTag.Contains("," + dgv.Columns[i].Name.ToLower() + ",") || hideTag.ToLower().Contains("," + dgv.Columns[i].Name.ToLower() + ","))
- {
- dgv.Columns[i].Visible = false;
- }
- }
- }
- }
- }
- private static void Dgv_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
- {
- var dgv = sender as DataGridView;
- Rectangle rect = new Rectangle(e.RowBounds.Location.X, e.RowBounds.Location.Y, dgv.RowHeadersWidth - 4, e.RowBounds.Height);
- TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(), dgv.RowHeadersDefaultCellStyle.Font, rect, dgv.RowHeadersDefaultCellStyle.ForeColor, TextFormatFlags.VerticalCenter | TextFormatFlags.Right);
- }
- public static void BindUICombox(UIComboBox cbx)
- {
- foreach (Layer lyr in ComsStatic.MapLayers)
- {
- cbx.Items.Add(new DoListItem(lyr.Dataset.Name, lyr.Caption));
- }
- cbx.SelectedIndex = 0;
- }
- public static void BindDataTableOnCheckedListBox(DatasetVector _dv, CheckedListBox _cbg, string _ziduan)
- {
- Recordset rd = QueryRecordset(_dv, null, new string[] { _ziduan }, new string[] { _ziduan }, new string[] { _ziduan });
- rd.MoveFirst();
- string fieldValue = string.Empty;
- _cbg.Items.Clear();
- while (!rd.IsEOF)
- {
- fieldValue = rd.GetFieldValue(_ziduan)?.ToString();
- if (string.IsNullOrEmpty(fieldValue))
- _cbg.Items.Add("未知");
- else
- _cbg.Items.Add(fieldValue);
- rd.MoveNext();
- }
- }
- public static void BindDataTableOnComboBox(DatasetVector _dv, UIComboBox _cbg, string _ziduan)
- {
- Recordset rd = QueryRecordset(_dv, null, new string[] { _ziduan }, new string[] { _ziduan }, new string[] { _ziduan });
- rd.MoveFirst();
- _cbg.Items.Clear();
- string fieldValue = string.Empty;
- while (!rd.IsEOF)
- {
- fieldValue = rd.GetFieldValue(_ziduan)?.ToString();
- if (string.IsNullOrEmpty(fieldValue))
- _cbg.Items.Add("未知");
- else
- _cbg.Items.Add(fieldValue);
- rd.MoveNext();
- }
- }
- public static DataTable getPaperSize()
- {
- DataTable dt = new DataTable { TableName = "PaperSizeTable" };
- dt.Columns.Add("sizekey"); dt.Columns.Add("sizedesc");
- dt.Rows.Add("A4", "A4 210x297mm");
- dt.Rows.Add("A3", "A3 297x420mm");
- dt.Rows.Add("ISOA2", "标准纸面大小(A2)");
- dt.Rows.Add("ISOA1", "标准纸面大小(A1)");
- dt.Rows.Add("ISOA0", "标准纸面大小(A0)");
- return dt;
- }
- public static PaperSize getPaperSize(string size)
- {
- PaperSize ps = PaperSize.A4;
- switch (size)
- {
- case "A4": ps = PaperSize.A4; break;
- case "A3": ps = PaperSize.A3; break;
- case "ISOA2": ps = PaperSize.ISOA2; break;
- case "ISOA1": ps = PaperSize.ISOA1; break;
- case "ISOA0": ps = PaperSize.ISOA0; break;
- default: break;
- }
- return ps;
- }
- /// <summary>
- /// 设置CheckedListBox的选择状态 1全选 2反选 3全不选
- /// </summary>
- /// <param name="clb"></param>
- /// <param name="doState">1全选 2反选 3全不选</param>
- public static void CheckListBoxDo(CheckedListBox clb, int doState)
- {
- switch (doState)
- {
- case 1://全选
- for (int i = 0; i < clb.Items.Count; i++)
- {
- clb.SetItemChecked(i, true);
- }
- break;
- case 2://反选
- for (int i = 0; i < clb.Items.Count; i++)
- {
- bool ck = clb.GetItemChecked(i);
- clb.SetItemChecked(i, !ck);
- }
- break;
- case 3://全不选
- for (int i = 0; i < clb.Items.Count; i++)
- {
- clb.SetItemChecked(i, false);
- }
- break;
- default:
- break;
- }
- }
- private static ToolTip toolTips = new ToolTip();
- public static void CheckedListBox_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
- {
- CheckedListBox clb = sender as CheckedListBox;
- int index = clb.IndexFromPoint(e.X, e.Y);
- //if (index != -1)
- if (index != -1 && toolTips.GetToolTip(clb) != clb.Items[index].ToString())
- {
- toolTips.SetToolTip(clb, clb.Items[index].ToString());
- }
- }
- public static void UIListBox_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
- {
- UIListBox clb = sender as UIListBox;
- int index = clb.IndexFromPoint(e.X, e.Y);
- if (index != -1 && toolTips.GetToolTip(clb) != clb.Items[index].ToString())
- {
- toolTips.SetToolTip(clb, clb.Items[index].ToString());
- }
- }
- #endregion
- #region 其他计算操作
- /// <summary>
- /// 通过起点的坐标和数值、终点的坐标和数值,计算线上交点的数值
- /// </summary>
- /// <param name="gx_start">起点坐标</param>
- /// <param name="gx_start_gc">起点数值</param>
- /// <param name="gx_end">终点坐标</param>
- /// <param name="gx_end_gc">终点数值</param>
- /// <param name="JiaoDian">线上的交点坐标</param>
- /// <returns>交点数值</returns>
- public static double getPointHeight(Point2D start, double startValue, Point2D end, double endValue, Point2D JiaoDian)
- {
- if (!Geometrist.IsPointOnLine(JiaoDian, start, end, false)) return 0.0;
- if (startValue == endValue) return Math.Round(startValue, 2);
- double JiaoDianValue = 0.0D;
- if (startValue < endValue)//确保起点数据 大于 终点数据
- {
- double temp = startValue;
- startValue = endValue;
- endValue = temp;
- Point2D temPoint = start;
- start = end;
- end = temPoint;
- }
- // 参考链接 https://zhuanlan.zhihu.com/p/43660758 下面的公式可以用,是正式的,这里备份一下
- //JiaoDian_gc = gx_end_gc + (gx_start_gc - gx_end_gc) * (Math.Sqrt(Math.Pow((JiaoDian.X - gx_end.X), 2.0) + Math.Pow((JiaoDian.Y - gx_end.Y), 2.0))) / (Math.Sqrt(Math.Pow((gx_start.X - gx_end.X), 2.0) + Math.Pow((gx_start.Y - gx_end.Y), 2.0)));
- JiaoDianValue = endValue + (startValue - endValue) * (Math.Sqrt(Math.Pow((JiaoDian.X - end.X), 2.0) + Math.Pow((JiaoDian.Y - end.Y), 2.0))) / (Math.Sqrt(Math.Pow((start.X - end.X), 2.0) + Math.Pow((start.Y - end.Y), 2.0)));
- if (JiaoDianValue == double.PositiveInfinity || JiaoDianValue == double.NegativeInfinity)
- {
- JiaoDianValue = endValue;
- }
- return Math.Round(JiaoDianValue, 2);
- }
- /// <summary>
- /// 返回Double数组的最大值或者最小值
- /// </summary>
- /// <param name="dblist"></param>
- /// <param name="isMax">True表示最大值,false表示最小值</param>
- /// <returns></returns>
- public static double getMaxMin(double[] dblist, bool isMax)
- {
- double finalValue = dblist[0];
- if (isMax)//最大值
- {
- for (int i = 0; i < dblist.Length; i++)
- {
- if (finalValue < dblist[i])
- finalValue = dblist[i];
- }
- }
- else
- {
- for (int i = 0; i < dblist.Length; i++)
- {
- if (finalValue > dblist[i])
- finalValue = dblist[i];
- }
- }
- return finalValue;
- }
- /// <summary>
- /// 将逗号分隔的csv格式文件,转换为DataTable
- /// </summary>
- /// <param name="filePath">csv文件路径</param>
- /// <param name="FirstField">首行是否是标题行</param>
- /// <returns></returns>
- public static DataTable CSVToDataTable(string filePath, bool FirstField)
- {
- DataTable table = new DataTable();
- bool isField = true;
- using (StreamReader reader = new StreamReader(filePath, Encoding.GetEncoding("gb2312"), false))
- {
- string line = string.Empty;
- while (reader.Peek() > 0)
- {
- line = reader.ReadLine();
- if (string.IsNullOrEmpty(line) || line.Split(',').Length == 0) continue;
- string[] split = line.Split(',');
- if (isField)
- {
- isField = false;
- if (FirstField)//首行是标题
- {
- foreach (string str in split) table.Columns.Add(str);
- continue;
- }
- else
- {
- for (int i = 0; i < split.Length; i++) table.Columns.Add("列" + i.ToString());
- }
- }
- DataRow newRow = table.NewRow();
- for (int j = 0; j < split.Length; j++)
- {
- newRow[j] = split[j].Trim('"');
- }
- table.Rows.Add(newRow);
- }
- return table;
- }
- }
- #endregion
- #region postgresSql
- /// <summary>
- /// 获取本机所有IPV4地址列表
- /// </summary>
- /// <returns>本机所有IPV4地址列表,以分号分隔</returns>
- public static string GetSelfIpv4List()
- {
- StringBuilder ips = new StringBuilder();
- try
- {
- IPHostEntry IpEntry = Dns.GetHostEntry(Dns.GetHostName());
- foreach (IPAddress ipa in IpEntry.AddressList)
- {
- if (ipa.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
- { ips.AppendFormat("{0};", ipa.ToString()); break; }
- }
- }
- catch { }
- return ips.ToString();
- }
- public static string GetSql(string select, List<string> wheres, string orderby = null, string groupby = null)
- {
- StringBuilder sb = new StringBuilder(select);
- if (wheres.Count > 0)
- {
- sb.Append(" where " + string.Join(" and ", wheres.ToArray()));
- }
- if (!string.IsNullOrEmpty(orderby)) sb.Append(orderby);
- if (!string.IsNullOrEmpty(groupby)) sb.Append(groupby);
- return sb.ToString();
- }
- public static void pgAddLogin(string n, string p, string c)
- {
- string sql = string.Format(" INSERT INTO userlogin(lgName,lgtime,lgIP,lgCup)VALUES('{0}','{1}','{2}','{3}') returning id;", n, DateTime.Now.ToLocalTime(), p, c);
- object obj = new NpgsqlHelper().ExecuteScalar(sql);
- ComsStatic.Instance.SetLoginID(StringToInt(obj));
- }
- public static void pgAddLoginm(string n)
- {
- if (ComsStatic.LoginID == 0) return;
- string sql = string.Format(" INSERT INTO userloginm(lgid,czms,cztime)VALUES('{0}','{1}','{2}') returning id;", ComsStatic.LoginID, n, DateTime.Now.ToLocalTime());
- new NpgsqlHelper().ExecuteScalar(sql);
- }
- #endregion
- #region 管网标注的配置
- /// <summary>
- ///线样式 LineColor = Color.Brown, LineWidth = 0.5
- /// </summary>
- public static GeoStyle geoStyle_Brown_05mm = new GeoStyle() { LineColor = Color.Brown, LineWidth = 0.5 };
- /// <summary>
- ///点样式 LineColor = Color.Red, MarkerSize = new Size2D(5, 5)
- /// </summary>
- public static GeoStyle geoStyle_Red_Mark5mm = new GeoStyle { LineColor = Color.Red, MarkerSize = new Size2D(5, 5) };
- /// <summary>
- /// 标注样式 ForeColor = Color.Brown, IsSizeFixed = true, FontHeight = 6, Alignment = TextAlignment.BottomLeft
- /// </summary>
- public static TextStyle textStyle_Brown_6mm_BottomLeft = new TextStyle { ForeColor = Color.Brown, IsSizeFixed = true, FontHeight = 6, Alignment = TextAlignment.BottomLeft };
- /// <summary>
- ///边框线样式 LineColor = Color.Red, LineWidth = 1, FillOpaqueRate = 10
- /// </summary>
- public static GeoStyle geoStyle_Red_1mm_OpaqueRate = new GeoStyle { LineColor = Color.Red, LineWidth = 1, FillOpaqueRate = 10 };
- /// <summary>
- /// 获取标注风格配置的TextStyle
- /// </summary>
- /// <returns></returns>
- public static TextStyle BiaoZhuFengGe()
- {
- QueryParameter queryParameter = new QueryParameter
- {
- AttributeFilter = " pzlx='标注风格配置' and pzKey='TextStyleKey' ",
- ResultFields = new string[] { "pzValue" },
- CursorType = CursorType.Static
- };
- Recordset _rd = ComsStatic.dvJSLK_PZ.Query(queryParameter);
- if (_rd.RecordCount != 1) return textStyle_Brown_6mm_BottomLeft;
- TextStyle ts = new TextStyle();
- bool fromResult = ts.FromXML(_rd.GetFieldValue("pzValue").ToString());
- if (!fromResult) return textStyle_Brown_6mm_BottomLeft;
- return ts;
- }
- #endregion
- }
- public class DoListItem
- {
- private string _key = string.Empty;
- private string _value = string.Empty;
- public DoListItem(string pKey, string pValue) { _key = pKey; _value = pValue; }
- public override string ToString() { return _value; }
- public string Key { get => _key; set => _key = value; }
- public string Value { get => _value; set => _value = value; }
- }
- public class DoTrackingPoint
- {
- private Timer timer = new Timer() { Enabled = false, Interval = 300 };
- private int Timertag = 1;
- private GeoPoint markPoint = null;
- public void Doing(double x, double y)
- {
- timer.Tick += Timer_Tick;
- Point2D p2d = new Point2D(x, y);
- ComsStatic.MapControl.Map.Center = p2d;
- ComsStatic.MapControl.Map.Refresh();
- markPoint = new GeoPoint(p2d);
- markPoint.Style = new GeoStyle() { MarkerSize = new Size2D(5, 5), LineColor = Color.Red };
- timer.Enabled = true; timer.Start();
- }
- private void Timer_Tick(object sender, EventArgs e)
- {
- if (Timertag == 6)
- {
- timer.Stop();
- timer.Enabled = false;
- Timertag = 1;
- int index = ComsStatic.MapControl.Map.TrackingLayer.IndexOf("DoInterestPoint");
- if (index > -1) ComsStatic.MapControl.Map.TrackingLayer.Remove(index);
- ComsStatic.MapControl.Map.RefreshTrackingLayer();
- return;
- }
- else if (Timertag % 2 == 1 && markPoint != null)
- {
- ComsStatic.MapControl.Map.TrackingLayer.Add(markPoint, "DoInterestPoint");
- }
- else //if (Timertag % 2 == 0)
- {
- int index = ComsStatic.MapControl.Map.TrackingLayer.IndexOf("DoInterestPoint");
- if (index > -1) ComsStatic.MapControl.Map.TrackingLayer.Remove(index);
- }
- Timertag++;
- ComsStatic.MapControl.Map.RefreshTrackingLayer();
- }
- }
- }
|