| | |
| | | using ExportMap.Models; |
| | | using ExportMap.db; |
| | | using ExportMap.Models; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.IO; |
| | | using System.Linq; |
| | | using System.Web; |
| | | |
| | |
| | | public class OsgbUtils |
| | | { |
| | | /// <summary> |
| | | /// 获取路径 |
| | | /// </summary> |
| | | public static string GetPath(int id) |
| | | { |
| | | return Path.Combine(SGUtils.LFData, "3d\\3dtiles\\osgb", id.ToString()); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取发布地址 |
| | | /// </summary> |
| | | public static string GetReleaseUrl(SysMeta meta) |
| | | { |
| | | return "{host}/LFData/3d/3dtiles/osgb/" + meta.id + "/tileset.json"; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 生成 |
| | | /// </summary> |
| | | /// <param name="args">XYZ参数</param> |
| | |
| | | /// <returns>数据发布ID集合</returns> |
| | | public static List<int> Generate(XYZArgs args, ref string err) |
| | | { |
| | | // |
| | | try |
| | | { |
| | | List<SysMeta> list = XYZUtils.SelectMetas(args.ids, "and type = 'osgb'"); |
| | | if (null == list || list.Count == 0) return null; |
| | | |
| | | string d3tilesPath = Tools.GetSetting("d3tilesPath"); |
| | | string uploadFolder = Tools.GetSetting("uploadFolder"); |
| | | |
| | | List<int> ids = new List<int>(); |
| | | foreach (SysMeta meta in list) |
| | | { |
| | | string osgbPath = Path.Combine(uploadFolder, meta.path); |
| | | if (!Directory.Exists(osgbPath)) continue; |
| | | |
| | | meta.ismeta = 0; // 0-倾斜摄影数据 |
| | | string outPath = GetPath(meta.id); |
| | | string jsonFile = Path.Combine(outPath, "tileset.json"); |
| | | |
| | | if (args.isNew && Directory.Exists(outPath)) Tools.DelPath(outPath); |
| | | if (!Directory.Exists(outPath)) Directory.CreateDirectory(outPath); |
| | | if (File.Exists(jsonFile)) File.Delete(jsonFile); |
| | | |
| | | string srs = findSRS(osgbPath); |
| | | if (null != srs) writeSRS(osgbPath, getSRS(srs)); |
| | | |
| | | int idx = args.ids.IndexOf(meta.id); |
| | | string cmd = string.Format("{0}\\3dtile.exe -f osgb -i \"{1}\" -o \"{2}\" -c \"{{\\\"offset\\\": {3}}}\"", d3tilesPath, osgbPath, outPath, args.zs[idx]); |
| | | SysTask task = TaskDBHelper.CreateTask(args, meta, "OSGB", "倾斜数据(OSGB)"); |
| | | err = Tools.ExecCmd(task, cmd, false); |
| | | err = null; |
| | | |
| | | if (null != srs) writeSRS(osgbPath, srs); |
| | | 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; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 查找SRS |
| | | /// </summary> |
| | | private static string findSRS(string osgbPath) |
| | | { |
| | | string file = Path.Combine(osgbPath, "metadata.xml"); |
| | | if (!File.Exists(file)) return null; |
| | | |
| | | string[] lines = File.ReadAllLines(file); |
| | | foreach (string line in lines) |
| | | { |
| | | if (line.Contains("<SRS>EPSG:") && line.Contains("+")) |
| | | { |
| | | return line; |
| | | } |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 写入SRS |
| | | /// </summary> |
| | | private static void writeSRS(string osgbPath, string newSRS) |
| | | { |
| | | string file = Path.Combine(osgbPath, "metadata.xml"); |
| | | if (!File.Exists(file)) return; |
| | | |
| | | string[] lines = File.ReadAllLines(file); |
| | | for (int i = 0, c = lines.Length; i < c; i++) |
| | | { |
| | | if (lines[i].Contains("<SRS>EPSG:")) |
| | | { |
| | | lines[i] = newSRS; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | File.WriteAllLines(file, lines); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取SRS |
| | | /// </summary> |
| | | /// <param name="srs"></param> |
| | | private static string getSRS(string srs) |
| | | { |
| | | int start = srs.IndexOf("+"); |
| | | int end = srs.IndexOf("</SRS>"); |
| | | string other = srs.Substring(start, end - start); |
| | | |
| | | return srs.Replace(other, ""); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 插入数据库 |
| | | /// </summary> |
| | | 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(meta), path); |
| | | |
| | | pubid = PubDBHelper.InsertPublish(sys); |
| | | if (pubid > 0) |
| | | { |
| | | sys.id = pubid; |
| | | PubDBHelper.InsertLayer(sys, meta); |
| | | PubDBHelper.InsertMetaPub(meta.id, pubid, args.userId); |
| | | } |
| | | |
| | | return pubid; |
| | | } |
| | | } |
| | | } |