管道基础大数据平台系统开发-【CS】-ExportMap
13693261870
2024-09-07 8d7a67ab1d635cb954337d8a767878ae526dd3dc
ExportMap/cs/PyLasUtils.cs
@@ -23,7 +23,7 @@
        /// </summary>
        public static string GetReleaseUrl(string path)
        {
            return "http://{host}/LFData/" + path.Replace("\\", "/");
            return "{host}/LFData/" + path.Replace("\\", "/");
        }
        /// <summary>
@@ -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>();
@@ -95,6 +94,7 @@
            }
            SysPublish sys = Tools.NewPublish(meta, args, GetReleaseUrl(path), path);
            sys.json = GetLasGeomJSON(Path.Combine(Tools.GetSetting("uploadFolder"), meta.path), meta.id);
            pubid = PubDBHelper.InsertPublish(sys);
            if (pubid > 0)
@@ -108,20 +108,97 @@
        }
        /// <summary>
        /// 坐标转换
        /// 坐标转换 *
        /// </summary>
        public static string CsTransform(string epsg, double x, double y, double z = 0)
        public static void CsTransform(string epsg, double x, double y, double z = 0)
        {
            List<string> cmds = new List<string>();
            string gdalPath = Tools.GetSetting("gdalPath");
            cmds.Add(string.Format("\"{0}\\gdaltransform.exe\" -s_srs EPSG:{1} -t_srs EPSG:4326", gdalPath, epsg.Replace("EPSG:", "")));
            cmds.Add(string.Format("{0} {1} {2}\n", x, y, z));
            cmds.Add(string.Format("echo {0} {1} {2}", x, y, z));
            string rs = null;
            rs =Tools.ExecCmd(cmds);
            string str = Tools.ExecCmd(cmds, ref rs);
            return rs;
            //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) / 10;
                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>
        /// 从字符串数组中获取EPSG
        /// </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;
        }
    }
}