using Sunny.UI;
using SuperMap.Data;
using SuperMap.Mapping;
using SuperMap.UI;
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WeifenLuo.WinFormsUI.Docking;
namespace WWPipeLine.MapBasic
{
public class ComsStatic
{
//private static ComsStatic m_Instance;
public static ComsStatic Instance { get => new ComsStatic(); }
//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; }
#region Workspace MapControl DatasetVector
///
/// 当前工作空间的地图索引值
/// 0:DaAnPostgres 包括供水和底图
///
public static Int32 WorkspaceMapIndex = 0;
///
/// 当前工作空间的数据源索引值
/// 0:MapWorld_vec 1:MapWorld_cva 2:DaAnPostgres
///
public static Datasource Datasource { get => m_MapControl.Map.Workspace.Datasources[2]; }
public static Workspace Workspace { get => m_MapControl.Map.Workspace; }
public static MapControl MapControl { get => m_MapControl; }
public static IMessageInterface MessageInterface { get => m_IMessageInterface; }
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 dvNetwork
{
get => Datasource.Datasets["CL_PostGreSQL_Network"] as DatasetVector;
}
public static Layers MapLayers { get => m_MapControl.Map.Layers; }
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)
{
if (r.Caption.Contains("矢量")) continue;
dataRow = dt.NewRow();
dataRow[0] = r.Name;
dataRow[1] = r.Caption;
dataRow[2] = r.Dataset.Name;
dt.Rows.Add(dataRow);
}
return dt;
}
/////
///// 删除除2个底图外的图层
/////
//public static void CreateLayers()
//{
// if (m_MapControl.Map.Layers.Count > 2)
// m_MapControl.Map.Layers.RemoveRange(0, m_MapControl.Map.Layers.Count - 2);
// LayerSettingVector layerSetting;
// GeoStyle style;
// Layer lyr = null;
// foreach (LayerEx layerEx in layerExs)
// {
// Dataset ds = Datasource.Datasets[layerEx.Dataset];
// if (ds is null) continue;
// layerSetting = new LayerSettingVector();
// style = new GeoStyle();
// style.LineColor = layerEx.LineColor;
// style.LineWidth = layerEx.LineWidth;
// layerSetting.Style = style;
// lyr = m_MapControl.Map.Layers.Add(ds, layerSetting, true);
// lyr.Caption = layerEx.Caption;
// }
//}
///
/// 设置所有图层为不可编辑状态
///
public static void SetLayerIsEditableFalse()
{
foreach (Layer r in MapLayers)
{
r.IsEditable = false;
}
}
public static void SetLayerIsEditableFalse(string layerName, bool isEditable)
{
foreach (Layer r in MapLayers)
{
if (r.Name == layerName || r.Caption == layerName || r.Dataset.Name == layerName)
r.IsEditable = isEditable;
else
r.IsEditable = !isEditable;
}
}
///
/// 设置图层是否可选择
///
///
///
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;
}
}
///
/// 依据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()
{
foreach (Form form in Application.OpenForms)
{
if (form.Tag?.ToString() != "MainControls")
{
form.Close(); break;
}
}
if (Application.OpenForms.Count > 4)
{
closeFormTagMainControls();
}
}
#endregion
#region SuperMap.Data相关操作
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 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 TongJiFieldGroupCount(DatasetVector dv, string[] strField)
{
Recordset rd = null;
List dts = new List();
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(CheckedListBox clb, string field)
{
StringBuilder sb = new StringBuilder();
if (clb.CheckedItems.Count > 0)
{
sb.Append(" AND (1=2 ");
foreach (string str in clb.CheckedItems)
{
if (str == "未知")
sb.AppendFormat(" OR {0} is null ", field);
else
sb.AppendFormat(" OR {0}='{1}'", field, str);
}
sb.Append(" ) ");
}
return sb.ToString();
}
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)
{
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)
{
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 getGuanXianPeiZhi(string pzlx)
{
DatasetVector dv = ComsStatic.dvJSLK_PZ;
Dictionary dic = new Dictionary();
Recordset _rd = dv.Query(string.Format(" gxpzlx='{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;
}
#region 在当前的DatasetVector中,获取指定列名的最大值和最小值
///
/// 在当前的DatasetVector中,获取指定列名的最大值
///
///
///
public static double GetMaxValue(DatasetVector dv, string fieldName)
{
var val = MinMaxValue(dv, fieldName, 1);
if (val == null) return double.NaN;
else return double.Parse(val.ToString());
}
///
/// 在当前的DatasetVector中,获取指定列名的最小值
///
///
///
public static double GetMinValue(DatasetVector dv, string fieldName)
{
var val = MinMaxValue(dv, fieldName, -1);
if (val == null) return double.NaN;
else return double.Parse(val.ToString());
}
///
/// 在当前的DatasetVector中,获取指定列名的最大值和最小值
///
///
///
public static double[] GetMinMaxValue(DatasetVector dv, string fieldName)
{
var val = MinMaxValue(dv, fieldName, 0);
if (val == null) return new double[] { };
else return (double[])val;
}
///
/// 在当前的DatasetVector中,获取指定列名的最大值、最小值
///
/// 列名
/// min = 0,获取最小值和最大值;-1时获取最小值,1时获取最大值
///
private static object MinMaxValue(DatasetVector dv, string fieldName, int minMax = 0)
{
object result = null;
if (minMax == 1)// 最大值
{
result = dv.Statistic(fieldName, StatisticMode.Max);
}
else if (minMax == -1)//最小值
{
result = dv.Statistic(fieldName, StatisticMode.Min);
}
else //最大值和最小值
{
result = new double[] { dv.Statistic(fieldName, StatisticMode.Max), dv.Statistic(fieldName, StatisticMode.Min) };
}
return result;
}
#endregion
#endregion
#region ShowUIMessageTip界面提示信息
public static void ShowUIMessageTipOKorError(bool _result, string msg = "")
{
if (_result)
{
ShowOKLog(msg + " 操作成功!");
}
else
{
ShowErrorLog(msg + " 操作失败!");
}
}
public static void ShowErrorLog(string msg)
{
Commons.LogHelper.Error(msg);
Sunny.UI.UIMessageTip.ShowError(msg, 2000, false, new Point(800, 400), true);
}
public static void ShowOKLog(string msg)
{
Commons.LogHelper.Info(msg);
Sunny.UI.UIMessageTip.ShowOk(msg, 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;
}
public static int StringToInt(object str)
{
int result = 0;
int.TryParse(str.ToString(), out result);
return result;
}
public static string GetStrAddChar(object str, char ch)
{
return ch + str.ToString() + ch;
}
#endregion
#region SummyUI的控件设置和数据绑定
public static void setDataGridView(UIDataGridView dgv, DataTable dt = 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;
dgv.RowPostPaint += Dgv_RowPostPaint;
if (dt != null)
{
dgv.DataSource = dt;
for (int i = 0; i < dgv.Columns.Count; i++)
{
dgv.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
dgv.Columns[i].HeaderText = dt.Columns[i].Caption;
string hideColums = ",enabled,shape_length,objectid,tcdw,cqbh,gcbh,zcbh,ancillaryrole,rotateangle,tfh,".ToUpper();
bool isVisible = hideColums.Contains("," + dgv.Columns[i].Name.ToUpper() + ",") ? true : false;
if ((dgv.Columns[i].Name.ToUpper().StartsWith("SM") && dgv.Columns[i].Name.ToUpper() != "SMID") || isVisible)//不显示SM开头的列 排除SMID显示
{
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 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 void AddUICheckBox(Control parentControl, Dictionary keyValuePairs)
{
UICheckBox uiCheckBox;
foreach (string key in keyValuePairs.Keys)
{
uiCheckBox = new UICheckBox() { Name = key, Text = keyValuePairs[key], Location = new Point(20, 20 + parentControl.Controls.Count * 28), Style = Sunny.UI.UIStyle.Gray };
parentControl.Controls.Add(uiCheckBox);
}
}
///
/// 设置CheckedListBox的选择状态
///
///
/// 1全选 2反选 3全不选
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;
}
}
#endregion
#region 其他计算操作
///
/// 通过起点的坐标和高程、终点的坐标和高程,计算线上交点的高程
///
/// 起点坐标
/// 起点高程
/// 终点坐标
/// 终点高程
/// 线上的交点坐标
///
public static double getPointHeight(Point2D gx_start, double gx_start_gc, Point2D gx_end, double gx_end_gc, Point2D JiaoDian)
{
if (!Geometrist.IsPointOnLine(JiaoDian, gx_start, gx_end, false))
return 0.0;
double JiaoDian_gc = 0.0D;
if (gx_start_gc == gx_end_gc)
{
JiaoDian_gc = gx_start_gc;
}
else
{
if (gx_start_gc < gx_end_gc)//确保起点高程 大于 终点高程
{
double temp = gx_start_gc;
gx_start_gc = gx_end_gc;
gx_end_gc = temp;
Point2D temPoint = gx_start;
gx_start = gx_end;
gx_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)));
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)));
if (JiaoDian_gc == double.PositiveInfinity || JiaoDian_gc == double.NegativeInfinity)
{
JiaoDian_gc = gx_end_gc;
}
}
return Math.Round(JiaoDian_gc, 2);
}
///
/// 返回Double数组的最大值或者最小值
///
///
/// True表示最大值,false表示最小值
///
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;
}
#endregion
#region 管网标注的配置
///
/// GeoStyle LineColor = Color.Brown, LineWidth = 0.5
///
public static GeoStyle geoStyle_Brown_05mm = new GeoStyle() { LineColor = Color.Brown, LineWidth = 0.5 };
///
/// TextStyle ForeColor = Color.Brown, IsSizeFixed = true, FontHeight = 6, Alignment = TextAlignment.BottomLeft
///
public static TextStyle textStyle_Brown_6mm_BottomLeft = new TextStyle { ForeColor = Color.Brown, IsSizeFixed = true, FontHeight = 6, Alignment = TextAlignment.BottomLeft };
///
/// 红色线条 宽度1mm 背景透明度10
///
public static GeoStyle geoStyle_Red_1mm_OpaqueRate = new GeoStyle { LineColor = Color.Red, LineWidth = 1, FillBackOpaque = false, FillOpaqueRate = 10 };
#endregion
}
public class LayerEx
{
public static LayerEx[] layerExs = new LayerEx[]{
new LayerEx{ Index = 9, Caption = "供水管线", Dataset = "JSLK", LineWidth = 1, LineColor = Color.FromArgb(84, 141, 212) },
new LayerEx{ Index = 8, Caption = "供水水表", Dataset = "JSSBPT", LineWidth = 2.4, LineColor = Color.FromArgb(206, 137, 102) },
new LayerEx{ Index = 7, Caption = "供水阀门", Dataset = "JSFMPT", LineWidth = 2.4, LineColor = Color.FromArgb(0, 160, 233) },
new LayerEx{ Index = 6, Caption = "供水节点", Dataset = "JSJDPT", LineWidth = 2.4, LineColor = Color.FromArgb(127, 194, 105) }
};
public LayerEx() { }
private string caption;
private string name;
private string dataset;
private int opaqueRate = 0;
private double maxVisibleScale = 0;
private double minVisibleScale = 0;
private bool isEditable = true;
private bool isVisible = true;
private int index;
private Color lineColor = Color.FromArgb(0, 0, 0);
private double lineWidth;
public string Caption { get => caption; set => caption = value; }
public string Name { get => name; set => name = value; }
public string Dataset { get => dataset; set => dataset = value; }
public int OpaqueRate { get => opaqueRate; set => opaqueRate = value; }
public double MaxVisibleScale { get => maxVisibleScale; set => maxVisibleScale = value; }
public double MinVisibleScale { get => minVisibleScale; set => minVisibleScale = value; }
public bool IsEditable { get => isEditable; set => isEditable = value; }
public bool IsVisible { get => isVisible; set => isVisible = value; }
public int Index { get => index; set => index = value; }
public double LineWidth { get => lineWidth; set => lineWidth = value; }
public Color LineColor { get => lineColor; set => lineColor = value; }
}
}