using ExportMap.cs; using ExportMap.Models; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; namespace ExportMap.Controllers { public class ConvertController : ApiController { [HttpGet] public string Test() { //string cnName = "8-瑞丽站0.05m.cpt".Substring(0, "8-瑞丽站0.05m.cpt".LastIndexOf(".")); //return Tools.GetLocalIP(); //return Tools.GetEPSG("D:\\Moon\\data\\dem_tif\\ldem.tif"); //TerrainUtils.Reproject("D:/xyz/dem/dem/32a.tif", "D:/xyz/dem/dem/32a_4326_.tif", "EPSG:4528", "EPSG:4326"); //TerrainUtils.Project("D:/xyz/dem/dem/32a_4326_.tif", "EPSG:4490"); //string wkt = TerrainUtils.GetPointZ(new XYZArgs() { dircode = "0B" }); //PyLasUtils.CsTransform("EPSG:4528", 400925.079, 2541768.173); //string json = PyLasUtils.GetLasGeomJSON(@"D:\LF\data\las\1_lfz_0.05m.las", 1314); TerrainUtils.Complement(new XYZArgs() { dircode = "00" }); return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } /// /// 转换Tileset /// [HttpPost] public ResponseMsg ToTileset([FromBody]XYZArgs args) { try { ResponseMsg msg = checkArgs(args); if (null != msg) return msg; List rs = ConvertUtils.Convert(args); if (null == rs || rs.Count == 0) { return ResponseMsg.fail("失败"); } return ResponseMsg.success("成功", string.Join(",", rs), rs.Count); } catch (Exception ex) { LogOut.Error(ex.Message + "\r\n" + ex.StackTrace); return ResponseMsg.fail(ex.Message); } } /// /// 转换瓦片 /// [HttpPost] public ResponseMsg ToTiles([FromBody]XYZArgs args) { try { ResponseMsg msg = checkArgs(args, true); if (null != msg) return msg; checkMinMax(args, true); string err = null; List rs = XYZUtils.Generate(args, ref err); if (null == rs || rs.Count == 0) { return ResponseMsg.fail(null == err ? "失败" : err); } return ResponseMsg.success("成功", string.Join(",", rs), rs.Count); } catch (Exception ex) { LogOut.Error(ex.Message + "\r\n" + ex.StackTrace); return ResponseMsg.fail(ex.Message); } } /// /// 转换瓦片 /// [HttpPost] public ResponseMsg ToSG([FromBody]XYZArgs args) { try { ResponseMsg msg = checkArgs(args); if (null != msg) return msg; string err = null; SGUtils utils = new SGUtils(); List rs = utils.Release(args, ref err); if (null == rs || rs.Count == 0) { return ResponseMsg.fail(null == err ? "失败" : err); } return ResponseMsg.success("成功", string.Join(",", rs), rs.Count); } catch (Exception ex) { LogOut.Error(ex.Message + "\r\n" + ex.StackTrace); return ResponseMsg.fail(ex.Message); } } /// /// 转换地形 /// [HttpPost] public ResponseMsg ToTerra([FromBody]XYZArgs args) { try { ResponseMsg msg = checkArgs(args, true); if (null != msg) return msg; checkMinMax(args); string err = null; //List rs = TerraUtils.Generate(args, ref err); List rs = TerrainUtils.Generate(args, ref err); if (null == rs || rs.Count == 0) { return ResponseMsg.fail(null == err ? "失败" : err); } return ResponseMsg.success("成功", string.Join(",", rs), rs.Count); } catch (Exception ex) { LogOut.Error(ex.Message + "\r\n" + ex.StackTrace); return ResponseMsg.fail(ex.Message); } } /// /// 转换LAS /// [HttpPost] public ResponseMsg ToLas([FromBody]XYZArgs args) { try { ResponseMsg msg = checkArgs(args); if (null != msg) return msg; if (args.srids.Count != args.ids.Count) return ResponseMsg.fail("坐标系ID集合与元数据ID集合长度不一致"); if (args.zs.Count != args.ids.Count) return ResponseMsg.fail("高度偏移量集合与元数据ID集合长度不一致"); string err = null; List rs = LasUtils.Generate(args, ref err); if (null == rs || rs.Count == 0) { return ResponseMsg.fail(null == err ? "失败" : err); } return ResponseMsg.success("成功", string.Join(",", rs), rs.Count); } catch (Exception ex) { LogOut.Error(ex.Message + "\r\n" + ex.StackTrace); return ResponseMsg.fail(ex.Message); } } /// /// 转换OSGB /// [HttpPost] public ResponseMsg ToOsgb([FromBody]XYZArgs args) { try { ResponseMsg msg = checkArgs(args); if (null != msg) return msg; if (args.zs.Count != args.ids.Count) return ResponseMsg.fail("高度偏移量集合与元数据ID集合长度不一致"); string err = null; List rs = OsgbUtils.Generate(args, ref err); if (null == rs || rs.Count == 0) { return ResponseMsg.fail(null == err ? "失败" : err); } return ResponseMsg.success("成功", string.Join(",", rs), rs.Count); } catch (Exception ex) { LogOut.Error(ex.Message + "\r\n" + ex.StackTrace); return ResponseMsg.fail(ex.Message); } } /// /// 读取Las坐标系 /// [HttpPost] public ResponseMsg ReadLasCs([FromBody]XYZArgs args) { try { ResponseMsg msg = checkArgs(args, true); if (null != msg) return msg; string err = null; List rs = LasUtils.ReadLasCs(args, ref err); if (null == rs || rs.Count == 0) { return ResponseMsg.fail(null == err ? "失败" : err); } return ResponseMsg.success("成功", string.Join(",", rs), rs.Count); } catch (Exception ex) { LogOut.Error(ex.Message + "\r\n" + ex.StackTrace); return ResponseMsg.fail(ex.Message); } } /// /// Py转换LAS /// [HttpPost] public ResponseMsg ToLasByPy([FromBody]XYZArgs args) { try { ResponseMsg msg = checkArgs(args); if (null != msg) return msg; //if (args.srids.Count != args.ids.Count) return ResponseMsg.fail("坐标系ID集合与元数据ID集合长度不一致"); //if (args.zs.Count != args.ids.Count) return ResponseMsg.fail("高度偏移量集合与元数据ID集合长度不一致"); string err = null; List rs = PyLasUtils.Generate(args, ref err); if (null == rs || rs.Count == 0) { return ResponseMsg.fail(null == err ? "失败" : err); } return ResponseMsg.success("成功", string.Join(",", rs), rs.Count); } catch (Exception ex) { LogOut.Error(ex.Message + "\r\n" + ex.StackTrace); return ResponseMsg.fail(ex.Message); } } /// /// 删除文件 /// [HttpPost] public ResponseMsg DeleteFiles([FromBody]XYZArgs args) { try { ResponseMsg msg = checkArgs(args, true); if (null != msg) return msg; string err = null; List rs = CommonUtils.DeleteFiles(args, ref err); if (null == rs || rs.Count == 0) { return ResponseMsg.fail(null == err ? "失败" : err); } return ResponseMsg.success("成功", string.Join(",", rs), rs.Count); } catch (Exception ex) { LogOut.Error(ex.Message + "\r\n" + ex.StackTrace); return ResponseMsg.fail(ex.Message); } } /// /// 删除任务 /// [HttpPost] public ResponseMsg DeleteTask([FromBody]XYZArgs args) { try { ResponseMsg msg = checkArgs(args, true); if (null != msg) return msg; string err = null; List rs = CommonUtils.DeleteTask(args, ref err); if (null == rs || rs.Count == 0) { return ResponseMsg.fail(null == err ? "失败" : err); } return ResponseMsg.success("成功", string.Join(",", rs), rs.Count); } catch (Exception ex) { LogOut.Error(ex.Message + "\r\n" + ex.StackTrace); return ResponseMsg.fail(ex.Message); } } [HttpGet] public string GetRasterEPSG(int id) { SysMeta meta = XYZUtils.SelectMeta(id); if (null == meta || string.IsNullOrEmpty(meta.path)) return null; string file = Path.Combine(Tools.GetSetting("uploadFolder"), meta.path); if (!File.Exists(file)) return null; return Tools.GetEPSG(file); } /// /// 检查参数 /// private ResponseMsg checkArgs(XYZArgs args, bool checkDir = false) { if (null == args || null == args.ids || args.ids.Count == 0) { return ResponseMsg.fail("请输入元数据ID"); } if (string.IsNullOrWhiteSpace(args.token)) { return ResponseMsg.fail("没有令牌"); } if (!ExportUtil.VerifyToken(args.token)) { return ResponseMsg.fail("令牌无效"); } if (checkDir && string.IsNullOrWhiteSpace(args.dircode)) { return ResponseMsg.fail("目录代码不能为空"); } return null; } /// /// 检查最大最小值 /// private void checkMinMax(XYZArgs args, bool checkNoData = false) { if (args.min < 0) args.min = 0; if (args.min > 22) args.min = 22; if (args.max < 0) args.max = 0; if (args.max > 22) args.max = 22; if (args.min > args.max) { int tmp = args.min; args.min = args.max; args.max = tmp; } if (checkNoData) { if (args.noData < 0) args.noData = 0; if (args.noData > 255) args.noData = 255; } } } }