using ExportMap.db; using ExportMap.Models; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Web; namespace ExportMap.cs { public class PyLasUtils { /// /// 获取路径 /// public static string GetPath(int id) { return Path.Combine(SGUtils.LFData, "3d\\3dtiles\\las", id.ToString()); } /// /// 获取发布地址 /// public static string GetReleaseUrl(string path) { return "http://{host}/LFData/" + path.Replace("\\", "/"); } /// /// 生成 /// /// XYZ参数 /// 错误信息 /// 数据发布ID集合 public static List Generate(XYZArgs args, ref string err) { try { List list = XYZUtils.SelectMetas(args.ids, "and type in ('las', 'laz')"); if (null == list || list.Count == 0) return null; string pyPath = Tools.GetSetting("pythonFolder"); string tilerPath = Tools.GetSetting("tilerPath"); string uploadFolder = Tools.GetSetting("uploadFolder"); List ids = new List(); foreach (SysMeta meta in list) { string lasPath = Path.Combine(uploadFolder, meta.path); if (!File.Exists(lasPath)) continue; string outPath = GetPath(meta.id); if (Directory.Exists(outPath)) Tools.DelPath(outPath); if (!Directory.Exists(outPath)) Directory.CreateDirectory(outPath); //int idx = args.ids.IndexOf(meta.id); // args.srids[idx], args.zs[idx]) List cmds = new List(); cmds.Add(string.Format("set PYTHONHOME={0}", pyPath)); cmds.Add(string.Format("{0}\\Scripts\\py3dtiles.exe convert --overwrite {1} --out {2}", pyPath, lasPath, outPath)); SysTask task = TaskDBHelper.CreateTask(args, meta, "LAS", "点云数据(LAS)"); err = Tools.ExecCmd(task, cmds, false); err = null; string jsonFile = Path.Combine(outPath, "tileset.json"); if (File.Exists(jsonFile)) { string path = jsonFile.Replace(Tools.GetSetting("lfData") + "\\", ""); int pubid = InsertToDB(meta, args, path); if (pubid > 0) ids.Add(pubid); } } return ids; } catch (Exception ex) { LogOut.Error(ex.Message + "\r\n" + ex.StackTrace); err = ex.Message; return null; } } /// /// 插入数据库 /// private static int InsertToDB(SysMeta meta, XYZArgs args, string path) { //if (PubDBHelper.IsPublish(meta.id)) return 1; int pubid = PubDBHelper.GetPushlishId(meta.id); if (pubid > 0) { PubDBHelper.UpdatePublish(pubid, meta.name, args.userId, null); return pubid; } SysPublish sys = Tools.NewPublish(meta, args, GetReleaseUrl(path), path); pubid = PubDBHelper.InsertPublish(sys); if (pubid > 0) { sys.id = pubid; PubDBHelper.InsertLayer(sys, meta); PubDBHelper.InsertMetaPub(meta.id, pubid, args.userId); } return pubid; } /// /// 坐标转换 /// public static void CsTransform(string epsg, double x, double y, double z = 0) { List cmds = new List(); 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("echo {0} {1} {2}", x, y, z)); string rs = null; string str = Tools.ExecCmd(cmds, ref rs); //return rs; } } }