| | |
| | | using System.Configuration; |
| | | using System.Data.Common; |
| | | using System.Diagnostics; |
| | | using System.Drawing; |
| | | using System.IO; |
| | | using System.Linq; |
| | | using System.Net; |
| | | using System.Net.Sockets; |
| | | using System.Reflection; |
| | | using System.Runtime.InteropServices; |
| | | using System.Runtime.Serialization; |
| | | using System.Runtime.Serialization.Formatters.Binary; |
| | | using System.Security.AccessControl; |
| | | using System.Security.Principal; |
| | | using System.Web; |
| | | using System.Web.WebSockets; |
| | | |
| | | namespace ExportMap.cs |
| | | { |
| | |
| | | /// 基础目录 |
| | | /// </summary> |
| | | public static readonly string BaseDir = AppDomain.CurrentDomain.BaseDirectory; |
| | | |
| | | /// <summary> |
| | | /// 获取令牌 |
| | | /// </summary> |
| | | public static string Token |
| | | { |
| | | get |
| | | { |
| | | return "c36e4f94-dfde-401e-9967-2c4a449f1300"; |
| | | } |
| | | } |
| | | |
| | | private static string tempDir; |
| | | |
| | |
| | | { |
| | | if (null == _dbHelper) |
| | | { |
| | | _dbHelper = new PostgreHelper(DbEnum.langfang); |
| | | _dbHelper = new PostgreHelper(); |
| | | } |
| | | |
| | | return _dbHelper; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取Py初始化参数 |
| | | /// </summary> |
| | | public static string[] PyInitArgs |
| | | { |
| | | get |
| | | { |
| | | string args = GetSetting("pyInitArgs"); |
| | | |
| | | return args.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 创建目录 |
| | | /// 创建目录 * |
| | | /// </summary> |
| | | public static void CreateDirectory(string dir) |
| | | { |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 克隆对象 |
| | | /// 克隆对象 * |
| | | /// </summary> |
| | | public static T Clone<T>(T source) where T : new() |
| | | { |
| | |
| | | /// <summary> |
| | | /// 执行CMD |
| | | /// </summary> |
| | | /// <param name="task">任务</param> |
| | | /// <param name="cmd">命令行</param> |
| | | /// <param name="isPy">是否为QGIS Py脚本</param> |
| | | /// <param name="isOut">是否输出错误</param> |
| | | /// <returns>执行结果或出错信息</returns> |
| | | public static string ExecCmd(string cmd, bool isPy = false, bool isOut = false) |
| | | public static string ExecCmd(SysTask task, string cmd, bool isPy = false, bool isOut = false) |
| | | { |
| | | List<string> list = new List<string>(); |
| | | if (isPy) |
| | | { |
| | | list.Add("cd \"C:\\Program Files\\QGIS 3.16\\apps\\Python37\""); |
| | | list.Add("\"C:\\Program Files\\QGIS 3.16\\bin\\qgis_process-qgis-ltr.bat\""); |
| | | //list.Add("cd \"C:\\Program Files\\QGIS 3.16\\apps\\Python37\""); |
| | | //list.Add("\"C:\\Program Files\\QGIS 3.16\\bin\\qgis_process-qgis-ltr.bat\""); |
| | | list.AddRange(PyInitArgs); |
| | | //list.Add("\"C:\\Program Files\\QGIS 3.16\\bin\\python-qgis-ltr.bat\""); |
| | | //list.Add("exit()"); |
| | | } |
| | | list.Add(cmd); |
| | | |
| | | string str = ExecCmd(list, isOut); |
| | | string str = ExecCmd(task, list, isOut); |
| | | |
| | | return str; |
| | | } |
| | |
| | | /// <summary> |
| | | /// 执行CMD |
| | | /// </summary> |
| | | /// <param name="task">任务</param> |
| | | /// <param name="list">命令集合</param> |
| | | /// <param name="isOut">是否输出错误</param> |
| | | /// <returns>执行结果或出错信息</returns> |
| | | public static string ExecCmd(List<string> list, bool isOut = false) |
| | | public static string ExecCmd(SysTask task, List<string> list, bool isOut = false) |
| | | { |
| | | string str = null; |
| | | string str; |
| | | try |
| | | { |
| | | Process p = new Process(); |
| | |
| | | p.StartInfo.CreateNoWindow = true; |
| | | //p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; |
| | | p.StartInfo.RedirectStandardInput = true; |
| | | p.StartInfo.RedirectStandardOutput = true; |
| | | p.StartInfo.RedirectStandardOutput = isOut; |
| | | p.StartInfo.RedirectStandardError = true; |
| | | p.Start(); |
| | | |
| | | task.pid = p.Id; |
| | | task.id = TaskDBHelper.Insert(task); |
| | | |
| | | StreamWriter si = p.StandardInput; // 标准输入流 |
| | | StreamReader so = isOut ? p.StandardOutput : null; // 标准输出流 |
| | |
| | | str = se.ReadToEnd(); |
| | | |
| | | //if (!string.IsNullOrEmpty(info)) LogOut.Debug(info); |
| | | if (!string.IsNullOrEmpty(str)) LogOut.Error(str); |
| | | if (!string.IsNullOrEmpty(str) && !str.Contains("@jit(cache=True, nogil=True)")) LogOut.Error(str); |
| | | if (p.HasExited == false) p.Kill(); |
| | | |
| | | task = TaskDBHelper.SelectById(task.id); |
| | | if (null != task && task.status < 2) |
| | | { |
| | | task.status = 2; |
| | | TaskDBHelper.Update(task); |
| | | } |
| | | |
| | | if (null != so) so.Close(); |
| | | se.Close(); |
| | | //so.Close(); |
| | | si.Close(); |
| | | p.Close(); |
| | | } |
| | |
| | | { |
| | | LogOut.Error(ex.Message + "\r\n" + ex.StackTrace); |
| | | str = ex.Message; |
| | | task = TaskDBHelper.SelectById(task.id); |
| | | if (null != task && task.status < 2) |
| | | { |
| | | task.err = ex.Message; |
| | | task.status = 4; |
| | | TaskDBHelper.Update(task); |
| | | } |
| | | } |
| | | |
| | | return str; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 执行命令 |
| | | /// </summary> |
| | | /// <param name="list">命令集合</param> |
| | | public static string ExecCmd(List<string> list) |
| | | { |
| | | string str = null; |
| | | Process p = null; |
| | | try |
| | | { |
| | | p = new Process(); |
| | | p.StartInfo.FileName = "cmd.exe"; |
| | | p.StartInfo.UseShellExecute = false; |
| | | p.StartInfo.CreateNoWindow = true; |
| | | p.StartInfo.RedirectStandardInput = true; |
| | | p.StartInfo.RedirectStandardOutput = true; |
| | | p.StartInfo.RedirectStandardError = true; |
| | | p.Start(); |
| | | |
| | | StreamWriter si = p.StandardInput; |
| | | StreamReader se = p.StandardError; |
| | | |
| | | LogOut.Info("cmd = " + string.Join(",", list)); |
| | | si.AutoFlush = true; |
| | | foreach (string cmd in list) |
| | | { |
| | | si.WriteLine(cmd); |
| | | } |
| | | si.WriteLine("exit"); |
| | | |
| | | str = se.ReadToEnd(); |
| | | se.Close(); |
| | | si.Close(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogOut.Error(ex.Message + "\r\n" + ex.StackTrace); |
| | | str = ex.Message; |
| | | } |
| | | finally |
| | | { |
| | | if (p != null) |
| | | { |
| | | p.Close(); |
| | | } |
| | | } |
| | | return str; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 执行命令 |
| | | /// </summary> |
| | | public static string ExecCmd(List<string> list, ref string rs) |
| | | { |
| | | string str = null; |
| | | Process p = null; |
| | | try |
| | | { |
| | | p = new Process(); |
| | | p.StartInfo.FileName = "cmd.exe"; |
| | | p.StartInfo.UseShellExecute = false; |
| | | p.StartInfo.CreateNoWindow = true; |
| | | p.StartInfo.RedirectStandardInput = true; |
| | | p.StartInfo.RedirectStandardOutput = true; |
| | | p.StartInfo.RedirectStandardError = true; |
| | | p.Start(); |
| | | |
| | | StreamWriter si = p.StandardInput; |
| | | StreamReader so = p.StandardOutput; |
| | | StreamReader se = p.StandardError; |
| | | |
| | | LogOut.Info("cmd = " + string.Join(",", list)); |
| | | si.AutoFlush = true; |
| | | foreach (string cmd in list) |
| | | { |
| | | si.WriteLine(cmd); |
| | | } |
| | | si.WriteLine("exit"); |
| | | |
| | | rs = so.ReadToEnd(); |
| | | str = se.ReadToEnd(); |
| | | |
| | | se.Close(); |
| | | so.Close(); |
| | | si.Close(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogOut.Error(ex.Message + "\r\n" + ex.StackTrace); |
| | | str = ex.Message; |
| | | } |
| | | finally |
| | | { |
| | | if (p != null) |
| | | { |
| | | p.Close(); |
| | | } |
| | | } |
| | | return str; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 执行命令 |
| | | /// </summary> |
| | | /// <param name="list">命令集合</param> |
| | | public static string ExecExe(string exe, string args, bool noWin = true) |
| | | { |
| | | string str = null; |
| | | Process p = null; |
| | | try |
| | | { |
| | | p = new Process(); |
| | | p.StartInfo.FileName = exe; |
| | | p.StartInfo.UseShellExecute = false; |
| | | p.StartInfo.CreateNoWindow = noWin; |
| | | p.StartInfo.RedirectStandardInput = true; |
| | | p.StartInfo.RedirectStandardOutput = true; |
| | | p.StartInfo.RedirectStandardError = true; |
| | | if (!string.IsNullOrEmpty(args)) p.StartInfo.Arguments = args; |
| | | |
| | | p.Start(); |
| | | p.WaitForExit(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogOut.Error(ex.Message + "\r\n" + ex.StackTrace); |
| | | str = ex.Message; |
| | | } |
| | | finally |
| | | { |
| | | if (p != null) |
| | | { |
| | | p.Close(); |
| | | } |
| | | } |
| | | return str; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取EPSG代码 |
| | | /// </summary> |
| | | public static string GetEPSG(string file) |
| | | { |
| | | string gdalPath = GetSetting("gdalPath"); |
| | | string cmd = string.Format("{0}\\gdalsrsinfo.exe \"{1}\" -o epsg", gdalPath, file); |
| | | |
| | | string rs = null; |
| | | string ostr = ExecCmd(new List<string> { cmd }, ref rs); |
| | | if (string.IsNullOrEmpty(rs)) return null; |
| | | |
| | | string[] strs = rs.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); |
| | | foreach (string str in strs) |
| | | { |
| | | if (str.Contains("EPSG:")) |
| | | { |
| | | return str; |
| | | } |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 设置单体模型参数 |
| | | /// </summary> |
| | | public static void SetIsModel(XYZArgs args, List<SysMeta> list) |
| | |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取本机IP |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public static string GetLocalIP() |
| | | { |
| | | var host = Dns.GetHostEntry(Dns.GetHostName()); |
| | | foreach (var ip in host.AddressList) |
| | | { |
| | | if (ip.AddressFamily == AddressFamily.InterNetwork) |
| | | { |
| | | return ip.ToString(); |
| | | } |
| | | } |
| | | |
| | | return GetSetting("localIP"); |
| | | } |
| | | |
| | | [DllImport("ReadLas.dll")] |
| | | public extern static int get_las_cs(string file_name); |
| | | } |