管道基础大数据平台系统开发-【CS】-ExportMap
13693261870
2024-09-03 3cfb6aa02516135fb174ab1b30620f2007924663
ExportMap/cs/TerraUtils.cs
@@ -13,15 +13,32 @@
    {
        private static string pyFile;
        private static int terrainMaxLevel = 0;
        /// <summary>
        /// 默认最大级别
        /// 地形最大级别
        /// </summary>
        public static int DEFAULT_MAX_LEVEL = 16;
        public static int TERRAIN_MAX_LEVEL
        {
            get
            {
                if (0 == terrainMaxLevel)
                {
                    string str = Tools.GetSetting("terrainMaxLevel");
                    if (!int.TryParse(str, out terrainMaxLevel))
                    {
                        terrainMaxLevel = 14;
                    }
                }
                return terrainMaxLevel;
            }
        }
        /// <summary>
        /// 默认最大文件大小:5GB
        /// </summary>
        public static long DDEFAULT_MAX_SIZE = 5L * 1024 * 1024 * 1024;
        public static long DEFAULT_MAX_SIZE = 5L * 1024 * 1024 * 1024;
        /// <summary>
        /// 获取Python文件
@@ -79,7 +96,7 @@
        /// </summary>
        public static string GetReleaseUrl(string dircode)
        {
            return "http://{host}/LFData/3d/terrain/" + dircode;
            return "{host}/LFData/3d/terrain/" + dircode;
        }
        /// <summary>
@@ -102,20 +119,32 @@
            try
            {
                List<SysMeta> metas = XYZUtils.SelectMetas(args.ids, "and type in ('tif', 'tiff')");
                if (null == metas || metas.Count == 0) return null;
                if (null == metas || metas.Count == 0)
                {
                    LogOut.Info("TerraUtils:找不到元数据。");
                    return null;
                }
                string dirPath = GetTerrainPath(args.dircode);
                //if (Directory.Exists(dirPath)) Tools.DelPath(dirPath); // 已存在的,删除
                tifFile = Merge(metas, args, ref err);
                if (!File.Exists(tifFile)) return null;
                if (!File.Exists(tifFile))
                {
                    LogOut.Info("TerraUtils:找不到tifFile数据。");
                    return null;
                }
                string json = Path.Combine(dirPath, "layer.json");
                if (File.Exists(json)) File.Delete(json);
                //Generate(args, tifFile, ref err);
                CreateTerrain(args, tifFile, ref err);
                if (!File.Exists(json)) return null;
                if (!File.Exists(json))
                {
                    LogOut.Info("TerraUtils:找不到layer.json文件。");
                    return null;
                }
                Complement(args);
                List<int> ids = new List<int>();
@@ -169,12 +198,17 @@
                }
                else
                {
                    if (File.Exists(tifFile)) File.Delete(tifFile);
                    //if (File.Exists(tifFile)) File.Delete(tifFile);
                    WriteText(txtFile, metas, null);
                    if (File.Exists(tifFile)) return tifFile;
                }
                string cmd = string.Format("python \"{0}\" -qgz {1} -file \"{2}\" -out \"{3}\"", PyFile, Qgz, txtFile, tifFile);
                err = Tools.ExecCmd(cmd, true, false);
                SysTask task = TaskDBHelper.CreateTask(args, "DEM", "高程镶嵌(DEM)");
                err = Tools.ExecCmd(task, cmd, true);
                task = TaskDBHelper.SelectById(task.id);
                if (null == task || task.status != 2) LogOut.Info("TerraUtils:任务为空或状态不为2。");
                return tifFile;
            }
@@ -220,7 +254,7 @@
        private static int GetTerrainMaxLevel(XYZArgs args, string tifFile)
        {
            FileInfo fi = new FileInfo(tifFile);
            if (fi.Length > DDEFAULT_MAX_SIZE) return DEFAULT_MAX_LEVEL;
            if (fi.Length > DEFAULT_MAX_SIZE) return TERRAIN_MAX_LEVEL;
            string ctbPath = Tools.GetSetting("ctbPath");
            string dirPath = GetTerrainPath(args.dircode);
@@ -231,7 +265,7 @@
            Tools.ExecCmd(new List<string>() { gdal_data, createLayer });
            string layerJson = Path.Combine(dirPath, "layer.json");
            if (!File.Exists(layerJson)) return DEFAULT_MAX_LEVEL;
            if (!File.Exists(layerJson)) return TERRAIN_MAX_LEVEL;
            string[] lines = File.ReadAllLines(layerJson, Encoding.UTF8);
@@ -242,7 +276,7 @@
            }
            if (File.Exists(layerJson)) File.Delete(layerJson);
            return level > DEFAULT_MAX_LEVEL ? DEFAULT_MAX_LEVEL : level;
            return level > TERRAIN_MAX_LEVEL ? TERRAIN_MAX_LEVEL : level;
        }
        /// <summary>
@@ -260,7 +294,8 @@
            string createLayer = string.Format("{0}\\ctb-tile.exe -l -s {4} -o \"{1}\" -f Mesh \"{2}\\{3}.tif\"", ctbPath, dirPath, dirPath, args.dircode, maxLevel);
            List<string> list = new List<string>() { gdal_data, createMesh, createLayer };
            err = Tools.ExecCmd(list);
            SysTask task = TaskDBHelper.CreateTask(args, "DEM", "高程数据(DEM)");
            err = Tools.ExecCmd(task, list);
        }
        /// <summary>