feixian_weifajianguan/OpenAuth.App/ServiceApp/Jobs/CloudQueryTask.cs

791 lines
43 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System.Dynamic;
using System.Net.Http.Headers;
using System.Text;
using Flurl.Http;
using Infrastructure;
using Infrastructure.Helpers;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json;
using OpenAuth.App.ServiceApp.DroneCloudQuery;
using OpenAuth.App.ServiceApp.DroneCloudQueryManage.Request;
using OpenAuth.App.ServiceApp.Response;
using OpenAuth.App.ServiceApp.ShpGeo.Utils;
using OpenAuth.Repository.Domain;
using Quartz;
using SqlSugar;
namespace OpenAuth.App.ServiceApp.Jobs;
public class CloudQueryTask : IJob
{
private readonly OpenJobApp _openJobApp;
private readonly string domain = GeoUtil.JobwebUrl;
// private readonly string domain = "http://192.168.10.103:10041/";
//private readonly string domain = "http://120.222.154.7:6050/";
private string token = "";
private readonly DroneCloudQueryApp _droneCloudQueryApp;
private readonly ISqlSugarClient sqlclient;
public CloudQueryTask(OpenJobApp openJobApp, ISqlSugarClient sqlSugarClient)
{
_openJobApp = openJobApp;
this.sqlclient = sqlSugarClient;
}
public async Task Execute(IJobExecutionContext context)
{
var jobId = context.MergedJobDataMap.GetString(Define.JOBMAPKEY);
//todo:获取到定时任务的id可以可以加入自己的自动任务逻辑
// 获取云查询任务 调用接口
using (var client = new HttpClient())
{
// 设置GET请求的URL
var url = domain + "api/DroneCloudQuery/LoadDroneTask";
try
{
// 创建HttpRequestMessage对象
var getTaskRequest = new HttpRequestMessage(HttpMethod.Get, url);
if (token.Equals(""))
{
// 堵塞查询
token = GetToken().Result;
}
// 添加Token到Header中
getTaskRequest.Headers.Authorization =
new AuthenticationHeaderValue("X-Token", token);
// 发送请求
var getTaskResponse = client.SendAsync(getTaskRequest);
// 阻塞当前线程直到任务完成
var result = getTaskResponse.Result;
if (result.IsSuccessStatusCode)
{
var task = JsonConvert.DeserializeObject<Response<DroneCloudTaskResp>>(result.Content
.ReadAsStringAsync().Result);
// "code": 401
if (task.Code == 401)
{
// 堵塞查询
token = GetToken().Result;
// 添加Token到Header中
getTaskRequest.Headers.Authorization =
new AuthenticationHeaderValue("X-Token", token);
// 发送请求
getTaskResponse = client.SendAsync(getTaskRequest);
// 阻塞当前线程直到任务完成
result = getTaskResponse.Result;
}
task = JsonConvert.DeserializeObject<Response<DroneCloudTaskResp>>(result.Content
.ReadAsStringAsync().Result);
var geoserver = GeoUtil.GeoserverUrl;
var workspace = GeoUtil.Workspace;
// 处理图斑信息
foreach (var droneShpData in task.Result.droneShpDatas)
{
string sqlexist = $"select count(*) from drone_cloud_shp where gid=" + droneShpData.gid;
int countexist = sqlclient.Ado.GetInt(sqlexist);
if (countexist > 0)
{
string sqlupdate = $"update drone_cloud_shp set geom =" + "ST_GeomFromText('" +
droneShpData.geom + "') where gid = " + droneShpData.gid;
sqlclient.Ado.ExecuteCommand(sqlupdate);
}
else
{
string sqlinsert =
$"insert into drone_cloud_shp(gid,id,geom,handle_status_id,handle_status_name,typename,original_case_no,case_no,is_intact,is_illegal) VALUES (" +
droneShpData.gid + ",'" + droneShpData.Id + "'," + "ST_GeomFromText('" +
droneShpData.geom + "')," + droneShpData.handle_status_id + "," + "'" +
droneShpData.handle_status_name + "','" +
droneShpData.typename + "','" + droneShpData.original_case_no + "','" +
droneShpData.case_no + "'," + droneShpData.is_intact + "," + droneShpData.is_illegal +
")";
sqlclient.Ado.ExecuteCommand(sqlinsert);
}
}
// 处理任务信息
foreach (var droneCloudTask in task.Result.droneCloudTasks)
{
Dictionary<string, Object> dict = new Dictionary<string, Object>();
var queryId = droneCloudTask.QueryId;
var geomid = droneCloudTask.GeomId;
var caseNo = droneCloudTask.CaseNo;
var county_name = droneCloudTask.CountyName;
var geomids = geomid.Split(',');
string geomeids = "";
for (int i = 0; i < geomids.Length; i++)
{
if (i == geomids.Length - 1)
{
geomeids = geomeids + "'" + geomids[i] + "'";
}
else
{
geomeids = "'" + geomids[i] + "'," + geomeids;
}
}
//查询配置
string configsql = $"select * from drone_cloud_query_content where 1=1 and county_name='" +
county_name + "'";
var configresult = sqlclient.Ado.SqlQuery<dynamic>(configsql);
if (configresult == null)
{
string configsql1 =
$"select * from drone_cloud_query_content where county_name in ('罗庄区','河东区','兰山区','莒南县')";
configresult = sqlclient.Ado.SqlQuery<dynamic>(configsql1);
}
string sqlgeom = $"SELECT count(*) from drone_cloud_shp where gid in (" + geomeids + ")";
var geomresult = sqlclient.Ado.GetInt(sqlgeom);
if (geomresult <= 0)
{
continue;
}
string sql =
$"SELECT\r\n min(ST_XMin(geom)) AS min_x,\r\n min(ST_YMin(geom)) AS min_y,\r\n " +
$" max(ST_XMax(geom)) AS max_x,\r\n max(ST_YMax(geom)) AS max_y\r\nFROM\r\n drone_cloud_shp where gid in(" +
geomeids + ")";
var four = sqlclient.Ado.SqlQuerySingle<dynamic>(sql);
//double maxLat = double.Parse(four.max_x.ToString()) + 0.0015;
//double mixLat = double.Parse(four.min_x.ToString()) - 0.0015;
//double maxLng = double.Parse(four.max_y.ToString()) + 0.0015;
//double minLng = double.Parse(four.min_y.ToString()) - 0.0015;
double maxLat = double.Parse(four.max_x.ToString()) + 0.0003;
double mixLat = double.Parse(four.min_x.ToString()) - 0.0003;
double maxLng = double.Parse(four.max_y.ToString()) + 0.0003;
double minLng = double.Parse(four.min_y.ToString()) - 0.0003;
string fourpoint = "[" + mixLat + "," + maxLng + "]" + "," + "[" + maxLat + "," + maxLng + "]" +
"," + "[" + maxLat + "," + minLng + "]" + "," + "[" + mixLat + "," + minLng +
"]";
string bbox = mixLat + "," + minLng + "," + maxLat + "," + maxLng;
string url1 = geoserver + "/" + workspace +
"/wms?service=WMS&version=1.1.0&request=GetMap&layers=";
List<Object> list = new List<Object>();
string uploadurl = domain + "api/Files/UploadSingle";
foreach (var item in configresult)
{
var mianjiziduan = item.area_field;
Dictionary<string, Object> obj = new Dictionary<string, Object>();
obj.Add("fourpoint", fourpoint);
obj.Add("name", item.name);
if (item.is_class == 0)
{
//计算面积
string mianjisql =
$"select sum(c.have_intersection) from (SELECT ST_Area(ST_Transform(st_setsrid(ST_Intersection(st_setsrid(a." +
mianjiziduan +
", 4326),st_setsrid(b.geom, 4326)),4326),4527)) AS have_intersection from " +
item.table_name + " a ,(select geom from drone_cloud_shp where gid in (" +
geomeids + ")" + ") b) c where c.have_intersection>0";
var mianjiResult = sqlclient.Ado.GetDouble(mianjisql);
obj.Add("sum", mianjiResult);
obj.Add("list", "");
}
else
{
//计算面积
/* string mianjisql1 = $"select sum(c.have_intersection) from (SELECT ST_Area(ST_Intersection(st_setsrid(a." + mianjiziduan + ", 4326),st_setsrid(b.geom, 4326))) AS have_intersection from " + item.table_name + " a ,(select geom from drone_cloud_shp where gid in (" + geomeids + ")" + ") b) c where c.have_intersection>0";
Console.WriteLine(mianjisql1);
var mianjiResult1 = sqlclient.Ado.GetDouble(mianjisql1);
obj.Add("sum", mianjiResult1);*/
//计算面积
string mianjisql = $"select " + item.class_field +
" as type, sum(c.have_intersection) area from (SELECT " +
item.class_field +
", ST_Area(ST_Transform(st_setsrid(ST_Intersection(st_setsrid(a." +
mianjiziduan +
", 4326),st_setsrid(b.geom, 4326) ),4326),4527)) AS have_intersection from " +
item.table_name +
" a ,(select geom from drone_cloud_shp where gid in (" + geomeids +
")" + ") b) c where c.have_intersection>0 group by c." +
item.class_field;
Console.WriteLine(mianjisql);
var mianjiResult = sqlclient.Ado.SqlQuery<dynamic>(mianjisql);
obj.Add("list", mianjiResult);
}
string overlay = item.overlay;
string strinclude = "";
string ovserlay1 = "";
if (!string.IsNullOrEmpty(overlay))
{
string[] ovrStrs = overlay.Split(",");
int overCount = ovrStrs.Length;
for (int i = 0; i < ovrStrs.Length; i++)
{
if ("天地图".Equals(ovrStrs[i]))
{
continue;
}
ovserlay1 = ovserlay1 + workspace + ":" + ovrStrs[i] + ",";
strinclude = strinclude + "INCLUDE;";
}
}
string layers = ovserlay1 + workspace + ":" + item.table_name + "," + workspace +
":drone_cloud_shp";
string url2 = url1 + layers + "&CQL_FILTER =INCLUDE;" + strinclude + "case_no=" + caseNo +
"&bbox=" + bbox +
"&width=768&height=646&srs=EPSG:4326&format=image/png&TRANSPARENT=TRUE";
Console.WriteLine(url2);
var draftResult = url2.GetAsync().Result;
byte[] img = draftResult.GetBytesAsync().Result;
var content1 = new MultipartFormDataContent();
long localTimestamp =
((DateTime.Now.Ticks - new DateTime(1970, 1, 1, 0, 0, 0).Ticks) / 10000);
var fileContent = new ByteArrayContent(img);
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
Name = "file", // 这个名字要和Web API中的参数名一致
FileName = localTimestamp + ".png"
};
content1.Add(fileContent);
content1.Headers.Add("X-Token", token);
var response1 = await client.PostAsync(uploadurl, content1);
var imagecontent = JsonConvert.DeserializeObject<Response<SysUploadFile>>(response1.Content
.ReadAsStringAsync().Result);
SysUploadFile sysUploadFile = imagecontent.Result;
if (sysUploadFile == null)
{
obj.Add("url", "");
}
else
{
obj.Add("url", sysUploadFile.FilePath);
}
string layersxian = workspace + ":geoserverAdd," + workspace + ":drone_cloud_shp";
string url3 = url1 + layersxian + "&CQL_FILTER =INCLUDE;" + "case_no=" + caseNo + "&bbox=" +
bbox +
"&width=768&height=646&srs=EPSG:4326&format=image/png&TRANSPARENT=TRUE";
Console.WriteLine(url3);
var draftResultxian = url3.GetAsync().Result;
byte[] imgxian = draftResultxian.GetBytesAsync().Result;
var content1xian = new MultipartFormDataContent();
long localTimestampxian =
((DateTime.Now.Ticks - new DateTime(1970, 1, 1, 0, 0, 0).Ticks) / 10000);
var fileContentxian = new ByteArrayContent(imgxian);
fileContentxian.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
Name = "file", // 这个名字要和Web API中的参数名一致
FileName = localTimestampxian + ".png"
};
content1xian.Add(fileContentxian);
content1xian.Headers.Add("X-Token", token);
var responsexian = await client.PostAsync(uploadurl, content1xian);
var imagecontentxian = JsonConvert.DeserializeObject<Response<SysUploadFile>>(responsexian
.Content
.ReadAsStringAsync().Result);
SysUploadFile sysUploadFile1 = imagecontentxian.Result;
if (sysUploadFile1 == null)
{
obj.Add("urlxian", "");
}
else
{
obj.Add("urlxian", sysUploadFile1.FilePath);
}
/* MemoryStream memStream = new MemoryStream(img);
Image imge = Image.FromStream(memStream);
imge.Save("D:/fwtool/" + "abc.png");*/
list.Add(obj);
}
//查询影像记录表
//string tifssql = $"select * from geo_tiff_manager where 1=1";
List<Object> listyx = new List<Object>();
string bianjiesql =
$"select c.have_intersection,c.date_dir,c.layer_name from (SELECT ST_Intersects(st_setsrid(a.geometry, 4326),st_setsrid(b.geom, 4326) ) AS have_intersection,date_dir,layer_name from " +
"geo_tiff_manager" + " a ,(select geom from drone_cloud_shp where gid in (" + geomeids +
")" + ") b) c where c.have_intersection=true";
Console.WriteLine(bianjiesql);
var tiffresult = sqlclient.Ado.SqlQuery<dynamic>(bianjiesql);
foreach (var item in tiffresult)
{
string layers = workspace + ":" + item.layer_name + "," + workspace + ":drone_cloud_shp";
Dictionary<string, Object> obj = new Dictionary<string, Object>();
//叠加影像
string tifurl = url1 + layers + "&CQL_FILTER =INCLUDE;" + "case_no=" + caseNo + "&bbox=" +
bbox +
"&width=768&height=646&srs=EPSG:4326&format=image/png&TRANSPARENT=TRUE";
var tifResult = tifurl.GetAsync().Result;
byte[] imgs = tifResult.GetBytesAsync().Result;
var content1 = new MultipartFormDataContent();
long localTimestamp =
((DateTime.Now.Ticks - new DateTime(1970, 1, 1, 0, 0, 0).Ticks) / 10000);
var fileContent = new ByteArrayContent(imgs);
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
Name = "file", // 这个名字要和Web API中的参数名一致
FileName = localTimestamp + ".png"
};
content1.Add(fileContent);
content1.Headers.Add("X-Token", token);
var response1 = await client.PostAsync(uploadurl, content1);
var imagecontent = JsonConvert.DeserializeObject<Response<SysUploadFile>>(response1.Content
.ReadAsStringAsync().Result);
SysUploadFile sysUploadFile = imagecontent.Result;
if (sysUploadFile == null)
{
obj.Add("url", "");
}
else
{
obj.Add("url", sysUploadFile.FilePath);
}
obj.Add("shijian", item.date_dir);
listyx.Add(obj);
}
dict.Add("result", list);
dict.Add("yingxiang", listyx);
// 调用接口存入query
var queryResult = dict;
var updateCloudQuery = domain + "api/DroneCloudQuery/UpdateCloudQuery";
var req = new CloudQueryReq
{
// 填充内容
Id = queryId,
ReceiveContent = JsonConvert.SerializeObject(queryResult),
ReceiveTime = DateTime.Now
};
var content = new StringContent(JsonConvert.SerializeObject(req), Encoding.UTF8,
"application/json");
// 添加自定义的HTTP头
content.Headers.Add("X-Token", token);
await client.PostAsync(updateCloudQuery, content);
}
Console.WriteLine(result);
}
}
catch (Exception e)
{
// 处理请求异常
Console.WriteLine("\nException Caught!");
Console.WriteLine("Message :{0} ", e.Message);
}
}
_openJobApp.RecordRun(jobId);
await Task.CompletedTask;
}
public async Task Execute1()
{
//todo:获取到定时任务的id可以可以加入自己的自动任务逻辑
// 获取云查询任务 调用接口
using (var client = new HttpClient())
{
// 设置GET请求的URL
var url = domain + "api/DroneCloudQuery/LoadDroneTask";
try
{
// 创建HttpRequestMessage对象
var getTaskRequest = new HttpRequestMessage(HttpMethod.Get, url);
if (token.Equals(""))
{
// 堵塞查询
token = GetToken().Result;
}
// 添加Token到Header中
getTaskRequest.Headers.Authorization =
new AuthenticationHeaderValue("X-Token", token);
// 发送请求
var getTaskResponse = client.SendAsync(getTaskRequest);
// 阻塞当前线程直到任务完成
var result = getTaskResponse.Result;
if (result.IsSuccessStatusCode)
{
var task = JsonConvert.DeserializeObject<Response<DroneCloudTaskResp>>(result.Content
.ReadAsStringAsync().Result);
// "code": 401
if (task.Code == 401)
{
// 堵塞查询
token = GetToken().Result;
// 添加Token到Header中
getTaskRequest.Headers.Authorization =
new AuthenticationHeaderValue("X-Token", token);
// 发送请求
getTaskResponse = client.SendAsync(getTaskRequest);
// 阻塞当前线程直到任务完成
result = getTaskResponse.Result;
}
task = JsonConvert.DeserializeObject<Response<DroneCloudTaskResp>>(result.Content
.ReadAsStringAsync().Result);
var geoserver = GeoUtil.GeoserverUrl;
var workspace = GeoUtil.Workspace;
// 处理图斑信息
foreach (var droneShpData in task.Result.droneShpDatas)
{
string sqlexist = $"select count(*) from drone_cloud_shp where gid=" + droneShpData.gid;
int countexist = sqlclient.Ado.GetInt(sqlexist);
if (countexist > 0)
{
string sqlupdate = $"update drone_cloud_shp set geom =" + "ST_GeomFromText('" +
droneShpData.geom + "') where gid = " + droneShpData.gid;
sqlclient.Ado.ExecuteCommand(sqlupdate);
}
else
{
string sqlinsert =
$"insert into drone_cloud_shp(gid,id,geom,handle_status_id,handle_status_name,typename,original_case_no,case_no,is_intact,is_illegal) VALUES (" +
droneShpData.gid + ",'" + droneShpData.Id + "'," + "ST_GeomFromText('" +
droneShpData.geom + "')," + droneShpData.handle_status_id + "," + "'" +
droneShpData.handle_status_name + "','" +
droneShpData.typename + "','" + droneShpData.original_case_no + "','" +
droneShpData.case_no + "'," + droneShpData.is_intact + "," + droneShpData.is_illegal +
")";
sqlclient.Ado.ExecuteCommand(sqlinsert);
}
}
// 处理任务信息
foreach (var droneCloudTask in task.Result.droneCloudTasks)
{
Dictionary<string, Object> dict = new Dictionary<string, Object>();
var queryId = droneCloudTask.QueryId;
var geomid = droneCloudTask.GeomId;
var caseNo = droneCloudTask.CaseNo;
var county_name = droneCloudTask.CountyName;
var geomids = geomid.Split(',');
string geomeids = "";
for (int i = 0; i < geomids.Length; i++)
{
if (i == geomids.Length - 1)
{
geomeids = geomeids + "'" + geomids[i] + "'";
}
else
{
geomeids = "'" + geomids[i] + "'," + geomeids;
}
}
//查询配置
string configsql = $"select * from drone_cloud_query_content where 1=1 and county_name='" +
county_name + "'";
var configresult = sqlclient.Ado.SqlQuery<dynamic>(configsql);
if (configresult == null)
{
string configsql1 =
$"select * from drone_cloud_query_content where county_name in ('罗庄区','河东区','兰山区','莒南县')";
configresult = sqlclient.Ado.SqlQuery<dynamic>(configsql1);
}
string sqlgeom = $"SELECT count(*) from drone_cloud_shp where gid in (" + geomeids + ")";
var geomresult = sqlclient.Ado.GetInt(sqlgeom);
if (geomresult <= 0)
{
continue;
}
string sql =
$"SELECT\r\n min(ST_XMin(geom)) AS min_x,\r\n min(ST_YMin(geom)) AS min_y,\r\n " +
$" max(ST_XMax(geom)) AS max_x,\r\n max(ST_YMax(geom)) AS max_y\r\nFROM\r\n drone_cloud_shp where gid in(" +
geomeids + ")";
var four = sqlclient.Ado.SqlQuerySingle<dynamic>(sql);
double maxLat = double.Parse(four.max_x.ToString()) + 0.0015;
double mixLat = double.Parse(four.min_x.ToString()) - 0.0015;
double maxLng = double.Parse(four.max_y.ToString()) + 0.0015;
double minLng = double.Parse(four.min_y.ToString()) - 0.0015;
string fourpoint = "[" + mixLat + "," + maxLng + "]" + "," + "[" + maxLat + "," + maxLng + "]" +
"," + "[" + maxLat + "," + minLng + "]" + "," + "[" + mixLat + "," + minLng +
"]";
string bbox = mixLat + "," + minLng + "," + maxLat + "," + maxLng;
string url1 = geoserver + "/" + workspace +
"/wms?service=WMS&version=1.1.0&request=GetMap&layers=";
List<Object> list = new List<Object>();
string uploadurl = domain + "api/Files/UploadSingle";
foreach (var item in configresult)
{
var mianjiziduan = item.area_field;
Dictionary<string, Object> obj = new Dictionary<string, Object>();
obj.Add("fourpoint", fourpoint);
obj.Add("name", item.name);
if (item.is_class == 0)
{
//计算面积
string mianjisql =
$"select sum(c.have_intersection) from (SELECT ST_Area(ST_Transform(st_setsrid(ST_Intersection(st_setsrid(a." +
mianjiziduan +
", 4326),st_setsrid(b.geom, 4326)),4326),4527)) AS have_intersection from " +
item.table_name + " a ,(select geom from drone_cloud_shp where gid in (" +
geomeids + ")" + ") b) c where c.have_intersection>0";
var mianjiResult = sqlclient.Ado.GetDouble(mianjisql);
obj.Add("sum", mianjiResult);
obj.Add("list", "");
}
else
{
//计算面积
/* string mianjisql1 = $"select sum(c.have_intersection) from (SELECT ST_Area(ST_Intersection(st_setsrid(a." + mianjiziduan + ", 4326),st_setsrid(b.geom, 4326))) AS have_intersection from " + item.table_name + " a ,(select geom from drone_cloud_shp where gid in (" + geomeids + ")" + ") b) c where c.have_intersection>0";
Console.WriteLine(mianjisql1);
var mianjiResult1 = sqlclient.Ado.GetDouble(mianjisql1);
obj.Add("sum", mianjiResult1);*/
//计算面积
string mianjisql = $"select " + item.class_field +
" as type, sum(c.have_intersection) area from (SELECT " +
item.class_field +
", ST_Area(ST_Transform(st_setsrid(ST_Intersection(st_setsrid(a." +
mianjiziduan +
", 4326),st_setsrid(b.geom, 4326) ),4326),4527)) AS have_intersection from " +
item.table_name +
" a ,(select geom from drone_cloud_shp where gid in (" + geomeids +
")" + ") b) c where c.have_intersection>0 group by c." +
item.class_field;
Console.WriteLine(mianjisql);
var mianjiResult = sqlclient.Ado.SqlQuery<dynamic>(mianjisql);
obj.Add("list", mianjiResult);
}
string overlay = item.overlay;
string strinclude = "";
string ovserlay1 = "";
if (!string.IsNullOrEmpty(overlay))
{
string[] ovrStrs = overlay.Split(",");
int overCount = ovrStrs.Length;
for (int i = 0; i < ovrStrs.Length; i++)
{
if ("天地图".Equals(ovrStrs[i]))
{
continue;
}
ovserlay1 = ovserlay1 + workspace + ":" + ovrStrs[i] + ",";
strinclude = strinclude + "INCLUDE;";
}
}
string layers = ovserlay1 + workspace + ":" + item.table_name + "," + workspace +
":drone_cloud_shp";
string url2 = url1 + layers + "&CQL_FILTER =INCLUDE;" + strinclude + "case_no=" + caseNo +
"&bbox=" + bbox +
"&width=768&height=646&srs=EPSG:4326&format=image/png&TRANSPARENT=TRUE";
Console.WriteLine(url2);
var draftResult = url2.GetAsync().Result;
byte[] img = draftResult.GetBytesAsync().Result;
var content1 = new MultipartFormDataContent();
long localTimestamp =
((DateTime.Now.Ticks - new DateTime(1970, 1, 1, 0, 0, 0).Ticks) / 10000);
var fileContent = new ByteArrayContent(img);
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
Name = "file", // 这个名字要和Web API中的参数名一致
FileName = localTimestamp + ".png"
};
content1.Add(fileContent);
content1.Headers.Add("X-Token", token);
var response1 = await client.PostAsync(uploadurl, content1);
var imagecontent = JsonConvert.DeserializeObject<Response<SysUploadFile>>(response1.Content
.ReadAsStringAsync().Result);
SysUploadFile sysUploadFile = imagecontent.Result;
if (sysUploadFile == null)
{
obj.Add("url", "");
}
else
{
obj.Add("url", sysUploadFile.FilePath);
}
string layersxian = workspace + ":geoserverAdd," + workspace + ":drone_cloud_shp";
string url3 = url1 + layersxian + "&CQL_FILTER =INCLUDE;" + "case_no=" + caseNo + "&bbox=" +
bbox +
"&width=768&height=646&srs=EPSG:4326&format=image/png&TRANSPARENT=TRUE";
Console.WriteLine(url3);
var draftResultxian = url3.GetAsync().Result;
byte[] imgxian = draftResultxian.GetBytesAsync().Result;
var content1xian = new MultipartFormDataContent();
long localTimestampxian =
((DateTime.Now.Ticks - new DateTime(1970, 1, 1, 0, 0, 0).Ticks) / 10000);
var fileContentxian = new ByteArrayContent(imgxian);
fileContentxian.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
Name = "file", // 这个名字要和Web API中的参数名一致
FileName = localTimestampxian + ".png"
};
content1xian.Add(fileContentxian);
content1xian.Headers.Add("X-Token", token);
var responsexian = await client.PostAsync(uploadurl, content1xian);
var imagecontentxian = JsonConvert.DeserializeObject<Response<SysUploadFile>>(responsexian
.Content
.ReadAsStringAsync().Result);
SysUploadFile sysUploadFile1 = imagecontentxian.Result;
if (sysUploadFile1 == null)
{
obj.Add("urlxian", "");
}
else
{
obj.Add("urlxian", sysUploadFile1.FilePath);
}
/* MemoryStream memStream = new MemoryStream(img);
Image imge = Image.FromStream(memStream);
imge.Save("D:/fwtool/" + "abc.png");*/
list.Add(obj);
}
//查询影像记录表
//string tifssql = $"select * from geo_tiff_manager where 1=1";
List<Object> listyx = new List<Object>();
string bianjiesql =
$"select c.have_intersection,c.date_dir,c.layer_name from (SELECT ST_Intersects(st_setsrid(a.geometry, 4326),st_setsrid(b.geom, 4326) ) AS have_intersection,date_dir,layer_name from " +
"geo_tiff_manager" + " a ,(select geom from drone_cloud_shp where gid in (" + geomeids +
")" + ") b) c where c.have_intersection=true";
Console.WriteLine(bianjiesql);
var tiffresult = sqlclient.Ado.SqlQuery<dynamic>(bianjiesql);
foreach (var item in tiffresult)
{
string layers = workspace + ":" + item.layer_name + "," + workspace + ":drone_cloud_shp";
Dictionary<string, Object> obj = new Dictionary<string, Object>();
//叠加影像
string tifurl = url1 + layers + "&CQL_FILTER =INCLUDE;" + "case_no=" + caseNo + "&bbox=" +
bbox +
"&width=768&height=646&srs=EPSG:4326&format=image/png&TRANSPARENT=TRUE";
var tifResult = tifurl.GetAsync().Result;
byte[] imgs = tifResult.GetBytesAsync().Result;
var content1 = new MultipartFormDataContent();
long localTimestamp =
((DateTime.Now.Ticks - new DateTime(1970, 1, 1, 0, 0, 0).Ticks) / 10000);
var fileContent = new ByteArrayContent(imgs);
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
Name = "file", // 这个名字要和Web API中的参数名一致
FileName = localTimestamp + ".png"
};
content1.Add(fileContent);
content1.Headers.Add("X-Token", token);
var response1 = await client.PostAsync(uploadurl, content1);
var imagecontent = JsonConvert.DeserializeObject<Response<SysUploadFile>>(response1.Content
.ReadAsStringAsync().Result);
SysUploadFile sysUploadFile = imagecontent.Result;
if (sysUploadFile == null)
{
obj.Add("url", "");
}
else
{
obj.Add("url", sysUploadFile.FilePath);
}
obj.Add("shijian", item.date_dir);
listyx.Add(obj);
}
dict.Add("result", list);
dict.Add("yingxiang", listyx);
// 调用接口存入query
var queryResult = dict;
var updateCloudQuery = domain + "api/DroneCloudQuery/UpdateCloudQuery";
var req = new CloudQueryReq
{
// 填充内容
Id = queryId,
ReceiveContent = JsonConvert.SerializeObject(queryResult),
ReceiveTime = DateTime.Now
};
var content = new StringContent(JsonConvert.SerializeObject(req), Encoding.UTF8,
"application/json");
// 添加自定义的HTTP头
content.Headers.Add("X-Token", token);
await client.PostAsync(updateCloudQuery, content);
}
Console.WriteLine(result);
}
}
catch (Exception e)
{
// 处理请求异常
Console.WriteLine("\nException Caught!");
Console.WriteLine("Message :{0} ", e.Message);
}
}
await Task.CompletedTask;
}
public async Task<string> GetToken()
{
try
{
// 构建配置
var configuration = ConfigHelper.GetConfigRoot();
var password = configuration["LoginPasswd"];
var getTokenUrl = domain + "api/Check/Login";
using (var client = new HttpClient())
{
dynamic obj = new ExpandoObject();
obj.account = "System";
obj.password = password;
obj.appKey = "openauth";
var content = new StringContent(JsonConvert.SerializeObject(obj), Encoding.UTF8,
"application/json");
var result = client.PostAsync(getTokenUrl, content).Result;
if (!result.IsSuccessStatusCode) return "";
// {"result":{"returnUrl":null,"token":"b8387abf"},"message":"操作成功","code":200}
var responseContent = await result.Content.ReadAsStringAsync();
Console.WriteLine(responseContent);
dynamic data = JsonConvert.DeserializeObject(responseContent);
return data.result.token;
}
return "";
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
}