using ExportMap.cs;
using ExportMap.Models;
using System;
using System.Collections.Generic;
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 name = "8-瑞丽站0.05m.cpt";
string cnName = name.Substring(0, name.LastIndexOf("."));
return cnName;
}
///
/// 转换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);
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);
}
}
///
/// 删除文件
///
[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);
}
}
///
/// 检查参数
///
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;
}
}
}
}