| | |
| | | using ExportMap.cs; |
| | | using ExportMap.db; |
| | | using ExportMap.Models; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.IO; |
| | | using System.Linq; |
| | | using System.Net; |
| | | using System.Net.Http; |
| | |
| | | { |
| | | 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" }); |
| | | |
| | | ExportArgs args = new ExportArgs() { title = "Test" }; |
| | | SysTask task = TaskDBHelper.CreateTask(ExportUtil.ToXYZArgs(args), "PNG", "在线制图(PNG)"); |
| | | Tools.ExecCmd(task, "dir", true, true); |
| | | |
| | | return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 转换为Tileset |
| | | /// 转换Tileset |
| | | /// </summary> |
| | | [HttpPost] |
| | | public ResponseMsg<string> ToTileset([FromBody]XYZArgs args) |
| | | { |
| | | try |
| | | { |
| | | if (null == args || null == args.ids || args.ids.Count == 0) |
| | | { |
| | | return ResponseMsg<string>.fail("请输入元数据ID"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(args.token)) |
| | | { |
| | | return ResponseMsg<string>.fail("没有令牌"); |
| | | } |
| | | if (!ExportUtil.VerifyToken(args.token)) |
| | | { |
| | | return ResponseMsg<string>.fail("令牌无效"); |
| | | } |
| | | ResponseMsg<string> msg = checkArgs(args); |
| | | if (null != msg) return msg; |
| | | |
| | | List<int> rs = ConvertUtils.Convert(args); |
| | | if (null == rs || rs.Count == 0) |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 转换为瓦片 |
| | | /// 转换瓦片 |
| | | /// </summary> |
| | | [HttpPost] |
| | | public ResponseMsg<string> ToTiles([FromBody]XYZArgs args) |
| | | { |
| | | try |
| | | { |
| | | if (null == args || null == args.ids || args.ids.Count == 0) |
| | | { |
| | | return ResponseMsg<string>.fail("请输入元数据ID"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(args.token)) |
| | | { |
| | | return ResponseMsg<string>.fail("没有令牌"); |
| | | } |
| | | if (!ExportUtil.VerifyToken(args.token)) |
| | | { |
| | | return ResponseMsg<string>.fail("令牌无效"); |
| | | } |
| | | if (args.min < 0 || args.max > 20 || args.min > args.max || string.IsNullOrWhiteSpace(args.dircode)) |
| | | { |
| | | return ResponseMsg<string>.fail("输入的参数有误"); |
| | | } |
| | | ResponseMsg<string> msg = checkArgs(args, true); |
| | | if (null != msg) return msg; |
| | | |
| | | checkMinMax(args, true); |
| | | |
| | | string err = null; |
| | | List<int> rs = XYZUtils.Generate(args, ref err); |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 转换为瓦片 |
| | | /// 转换瓦片 |
| | | /// </summary> |
| | | [HttpPost] |
| | | public ResponseMsg<string> ToSG([FromBody]XYZArgs args) |
| | | { |
| | | try |
| | | { |
| | | if (null == args || null == args.ids || args.ids.Count == 0) |
| | | { |
| | | return ResponseMsg<string>.fail("请输入元数据ID"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(args.token)) |
| | | { |
| | | return ResponseMsg<string>.fail("没有令牌"); |
| | | } |
| | | if (!ExportUtil.VerifyToken(args.token)) |
| | | { |
| | | return ResponseMsg<string>.fail("令牌无效"); |
| | | } |
| | | |
| | | SGUtils utils = new SGUtils(); |
| | | ResponseMsg<string> msg = checkArgs(args); |
| | | if (null != msg) return msg; |
| | | |
| | | string err = null; |
| | | SGUtils utils = new SGUtils(); |
| | | List<int> rs = utils.Release(args, ref err); |
| | | if (null == rs || rs.Count == 0) |
| | | { |
| | |
| | | return ResponseMsg<string>.fail(ex.Message); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 转换地形 |
| | | /// </summary> |
| | | [HttpPost] |
| | | public ResponseMsg<string> ToTerra([FromBody]XYZArgs args) |
| | | { |
| | | try |
| | | { |
| | | ResponseMsg<string> msg = checkArgs(args, true); |
| | | if (null != msg) return msg; |
| | | |
| | | checkMinMax(args); |
| | | |
| | | string err = null; |
| | | //List<int> rs = TerraUtils.Generate(args, ref err); |
| | | List<int> rs = TerrainUtils.Generate(args, ref err); |
| | | if (null == rs || rs.Count == 0) |
| | | { |
| | | return ResponseMsg<string>.fail(null == err ? "失败" : err); |
| | | } |
| | | |
| | | return ResponseMsg<string>.success("成功", string.Join(",", rs), rs.Count); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogOut.Error(ex.Message + "\r\n" + ex.StackTrace); |
| | | return ResponseMsg<string>.fail(ex.Message); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 转换LAS |
| | | /// </summary> |
| | | [HttpPost] |
| | | public ResponseMsg<string> ToLas([FromBody]XYZArgs args) |
| | | { |
| | | try |
| | | { |
| | | ResponseMsg<string> msg = checkArgs(args); |
| | | if (null != msg) return msg; |
| | | |
| | | if (args.srids.Count != args.ids.Count) return ResponseMsg<string>.fail("坐标系ID集合与元数据ID集合长度不一致"); |
| | | if (args.zs.Count != args.ids.Count) return ResponseMsg<string>.fail("高度偏移量集合与元数据ID集合长度不一致"); |
| | | |
| | | string err = null; |
| | | List<int> rs = LasUtils.Generate(args, ref err); |
| | | if (null == rs || rs.Count == 0) |
| | | { |
| | | return ResponseMsg<string>.fail(null == err ? "失败" : err); |
| | | } |
| | | |
| | | return ResponseMsg<string>.success("成功", string.Join(",", rs), rs.Count); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogOut.Error(ex.Message + "\r\n" + ex.StackTrace); |
| | | return ResponseMsg<string>.fail(ex.Message); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 转换OSGB |
| | | /// </summary> |
| | | [HttpPost] |
| | | public ResponseMsg<string> ToOsgb([FromBody]XYZArgs args) |
| | | { |
| | | try |
| | | { |
| | | ResponseMsg<string> msg = checkArgs(args); |
| | | if (null != msg) return msg; |
| | | |
| | | if (args.zs.Count != args.ids.Count) return ResponseMsg<string>.fail("高度偏移量集合与元数据ID集合长度不一致"); |
| | | |
| | | string err = null; |
| | | List<int> rs = OsgbUtils.Generate(args, ref err); |
| | | if (null == rs || rs.Count == 0) |
| | | { |
| | | return ResponseMsg<string>.fail(null == err ? "失败" : err); |
| | | } |
| | | |
| | | return ResponseMsg<string>.success("成功", string.Join(",", rs), rs.Count); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogOut.Error(ex.Message + "\r\n" + ex.StackTrace); |
| | | return ResponseMsg<string>.fail(ex.Message); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 读取Las坐标系 |
| | | /// </summary> |
| | | [HttpPost] |
| | | public ResponseMsg<string> ReadLasCs([FromBody]XYZArgs args) |
| | | { |
| | | try |
| | | { |
| | | ResponseMsg<string> msg = checkArgs(args, true); |
| | | if (null != msg) return msg; |
| | | |
| | | string err = null; |
| | | List<int> rs = LasUtils.ReadLasCs(args, ref err); |
| | | if (null == rs || rs.Count == 0) |
| | | { |
| | | return ResponseMsg<string>.fail(null == err ? "失败" : err); |
| | | } |
| | | |
| | | return ResponseMsg<string>.success("成功", string.Join(",", rs), rs.Count); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogOut.Error(ex.Message + "\r\n" + ex.StackTrace); |
| | | return ResponseMsg<string>.fail(ex.Message); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// Py转换LAS |
| | | /// </summary> |
| | | [HttpPost] |
| | | public ResponseMsg<string> ToLasByPy([FromBody]XYZArgs args) |
| | | { |
| | | try |
| | | { |
| | | ResponseMsg<string> msg = checkArgs(args); |
| | | if (null != msg) return msg; |
| | | |
| | | //if (args.srids.Count != args.ids.Count) return ResponseMsg<string>.fail("坐标系ID集合与元数据ID集合长度不一致"); |
| | | //if (args.zs.Count != args.ids.Count) return ResponseMsg<string>.fail("高度偏移量集合与元数据ID集合长度不一致"); |
| | | |
| | | string err = null; |
| | | List<int> rs = PyLasUtils.Generate(args, ref err); |
| | | if (null == rs || rs.Count == 0) |
| | | { |
| | | return ResponseMsg<string>.fail(null == err ? "失败" : err); |
| | | } |
| | | |
| | | return ResponseMsg<string>.success("成功", string.Join(",", rs), rs.Count); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogOut.Error(ex.Message + "\r\n" + ex.StackTrace); |
| | | return ResponseMsg<string>.fail(ex.Message); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 删除文件 |
| | | /// </summary> |
| | | [HttpPost] |
| | | public ResponseMsg<string> DeleteFiles([FromBody]XYZArgs args) |
| | | { |
| | | try |
| | | { |
| | | ResponseMsg<string> msg = checkArgs(args, true); |
| | | if (null != msg) return msg; |
| | | |
| | | string err = null; |
| | | List<int> rs = CommonUtils.DeleteFiles(args, ref err); |
| | | if (null == rs || rs.Count == 0) |
| | | { |
| | | return ResponseMsg<string>.fail(null == err ? "失败" : err); |
| | | } |
| | | |
| | | return ResponseMsg<string>.success("成功", string.Join(",", rs), rs.Count); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogOut.Error(ex.Message + "\r\n" + ex.StackTrace); |
| | | return ResponseMsg<string>.fail(ex.Message); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 删除任务 |
| | | /// </summary> |
| | | [HttpPost] |
| | | public ResponseMsg<string> DeleteTask([FromBody]XYZArgs args) |
| | | { |
| | | try |
| | | { |
| | | ResponseMsg<string> msg = checkArgs(args, true); |
| | | if (null != msg) return msg; |
| | | |
| | | string err = null; |
| | | List<int> rs = CommonUtils.DeleteTask(args, ref err); |
| | | if (null == rs || rs.Count == 0) |
| | | { |
| | | return ResponseMsg<string>.fail(null == err ? "失败" : err); |
| | | } |
| | | |
| | | return ResponseMsg<string>.success("成功", string.Join(",", rs), rs.Count); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogOut.Error(ex.Message + "\r\n" + ex.StackTrace); |
| | | return ResponseMsg<string>.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); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 检查参数 |
| | | /// </summary> |
| | | private ResponseMsg<string> checkArgs(XYZArgs args, bool checkDir = false) |
| | | { |
| | | if (null == args || null == args.ids || args.ids.Count == 0) |
| | | { |
| | | return ResponseMsg<string>.fail("请输入元数据ID"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(args.token)) |
| | | { |
| | | return ResponseMsg<string>.fail("没有令牌"); |
| | | } |
| | | if (!ExportUtil.VerifyToken(args.token)) |
| | | { |
| | | return ResponseMsg<string>.fail("令牌无效"); |
| | | } |
| | | if (checkDir && string.IsNullOrWhiteSpace(args.dircode)) |
| | | { |
| | | return ResponseMsg<string>.fail("目录代码不能为空"); |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 检查最大最小值 |
| | | /// </summary> |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | | } |