From a67a20d4be54f2a5943f16c187febbe59403456c Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期三, 20 九月 2023 17:52:28 +0800 Subject: [PATCH] 获取las坐标JSON --- ExportMap/cs/PyLasUtils.cs | 80 +++++++++++++++++++++++++++++++++++++++- 1 files changed, 78 insertions(+), 2 deletions(-) diff --git a/ExportMap/cs/PyLasUtils.cs b/ExportMap/cs/PyLasUtils.cs index 8ba8eab..00097b3 100644 --- a/ExportMap/cs/PyLasUtils.cs +++ b/ExportMap/cs/PyLasUtils.cs @@ -40,7 +40,6 @@ if (null == list || list.Count == 0) return null; string pyPath = Tools.GetSetting("pythonFolder"); - string tilerPath = Tools.GetSetting("tilerPath"); string uploadFolder = Tools.GetSetting("uploadFolder"); List<int> ids = new List<int>(); @@ -108,7 +107,7 @@ } /// <summary> - /// 鍧愭爣杞崲 + /// 鍧愭爣杞崲 * /// </summary> public static void CsTransform(string epsg, double x, double y, double z = 0) { @@ -123,5 +122,82 @@ //return rs; } + + /// <summary> + /// 鑾峰彇las鍧愭爣JSON + /// </summary> + public static string GetLasGeomJSON(string lasFile, int id) + { + try + { + string cmd = string.Format("\"{0}\\lasinfo.exe\" \"{1}\"", Tools.GetSetting("tilerPath"), lasFile); + string rs = Tools.ExecCmd(new List<string> { cmd }); + if (string.IsNullOrEmpty(rs)) return null; + + string[] strs = rs.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + string epsg = GetEpsgFromStrs(strs); + string minStr = GetCoordFromStrs(strs, "min x y z:"); + string maxStr = GetCoordFromStrs(strs, "max x y z:"); + string scaleStr = GetCoordFromStrs(strs, "scale factor x y z:"); + if (string.IsNullOrEmpty(epsg) || string.IsNullOrEmpty(minStr) || string.IsNullOrEmpty(maxStr) || string.IsNullOrEmpty(scaleStr)) return null; + + string[] minXYZ = minStr.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); + string[] maxXYZ = maxStr.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); + string[] scales = scaleStr.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); + double minX = double.Parse(minXYZ[0]), minY = double.Parse(minXYZ[1]), minZ = double.Parse(minXYZ[2]); + double maxX = double.Parse(maxXYZ[0]), maxY = double.Parse(maxXYZ[1]), maxZ = double.Parse(maxXYZ[2]); + double x = (minX + maxX) / 2, y = (minY + maxY) / 2, z = maxZ, scale = Math.Round(1 / double.Parse(scales[0]), 2); + + string url = ExportUtil.LFServer + "/publish/selectCsTransform?token=" + Tools.Token + "&x=" + x + "&y=" + y + "&epsg=" + epsg; + rs = ExportUtil.GetData(url); + if (string.IsNullOrEmpty(rs)) return null; + + strs = rs.Replace("\"", "").Split(new string[] { "," }, StringSplitOptions.None); + x = double.Parse(strs[0]); + y = double.Parse(strs[1]); + + return string.Format("{{\"lon\":{0},\"lat\":{1},\"height\":{2},\"yaw\":0,\"alpha\":1,\"modelid\":\"DbId\",\"scale\":{3},\"lasId\":{4}}}", x, y, z, scale, id); + } + catch (Exception ex) + { + LogOut.Error(ex.StackTrace); + return null; + } + } + + /// <summary> + /// 浠庡瓧绗︿覆鏁扮粍涓幏鍙朎PSG + /// </summary> + private static string GetEpsgFromStrs(string[] strs) + { + foreach (string str in strs) + { + if (str.Contains("key 3072 ")) + { + int start = str.IndexOf("value_offset") + 12; + int end = str.IndexOf("-", start); + + return str.Substring(start, end - start).Replace(" ", ""); + } + } + + return null; + } + + /// <summary> + /// 浠庡瓧绗︿覆鏁扮粍涓幏鍙栧潗鏍� + /// </summary> + private static string GetCoordFromStrs(string[] strs, string key) + { + foreach (string str in strs) + { + if (str.Contains(key)) + { + return str.Replace(key, ""); + } + } + + return null; + } } } -- Gitblit v1.9.3