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>(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>(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 dict = new Dictionary(); 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(configsql); if (configresult == null) { string configsql1 = $"select * from drone_cloud_query_content where county_name in ('罗庄区','河东区','兰山区','莒南县')"; configresult = sqlclient.Ado.SqlQuery(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(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 list = new List(); string uploadurl = domain + "api/Files/UploadSingle"; foreach (var item in configresult) { var mianjiziduan = item.area_field; Dictionary obj = new Dictionary(); 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(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>(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>(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 listyx = new List(); 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(bianjiesql); foreach (var item in tiffresult) { string layers = workspace + ":" + item.layer_name + "," + workspace + ":drone_cloud_shp"; Dictionary obj = new Dictionary(); //叠加影像 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>(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>(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>(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 dict = new Dictionary(); 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(configsql); if (configresult == null) { string configsql1 = $"select * from drone_cloud_query_content where county_name in ('罗庄区','河东区','兰山区','莒南县')"; configresult = sqlclient.Ado.SqlQuery(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(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 list = new List(); string uploadurl = domain + "api/Files/UploadSingle"; foreach (var item in configresult) { var mianjiziduan = item.area_field; Dictionary obj = new Dictionary(); 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(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>(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>(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 listyx = new List(); 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(bianjiesql); foreach (var item in tiffresult) { string layers = workspace + ":" + item.layer_name + "," + workspace + ":drone_cloud_shp"; Dictionary obj = new Dictionary(); //叠加影像 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>(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 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; } } }