550 lines
23 KiB
C#
550 lines
23 KiB
C#
|
|
using System.Globalization;
|
|||
|
|
using System.Text.RegularExpressions;
|
|||
|
|
using Infrastructure;
|
|||
|
|
using NetTopologySuite.Geometries;
|
|||
|
|
using OpenAuth.App.BaseApp.Base;
|
|||
|
|
using OpenAuth.App.Interface;
|
|||
|
|
using OpenAuth.App.ServiceApp.ShpGeo.Request;
|
|||
|
|
using OpenAuth.App.ServiceApp.ShpGeo.Response;
|
|||
|
|
using OpenAuth.App.ServiceApp.ShpGeo.Utils;
|
|||
|
|
using OpenAuth.Repository;
|
|||
|
|
using OpenAuth.Repository.Domain;
|
|||
|
|
using SqlSugar;
|
|||
|
|
|
|||
|
|
namespace OpenAuth.App.ServiceApp.ShpGeo;
|
|||
|
|
|
|||
|
|
public class GeoTiffManagerApp : SqlSugarBaseApp<GeoTiffManager, SugarDbContext>
|
|||
|
|
{
|
|||
|
|
public GeoTiffManagerApp(ISugarUnitOfWork<SugarDbContext> unitWork,
|
|||
|
|
ISimpleClient<GeoTiffManager> repository, IAuth auth) : base(unitWork, repository, auth)
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 影像管理列表
|
|||
|
|
public async Task<Response<PageInfo<List<GeoTiffManager>>>> LoadPage(GeoTiffManagerReq req)
|
|||
|
|
{
|
|||
|
|
RefAsync<int> totalCount = 0;
|
|||
|
|
var sources = await base.Repository.AsQueryable()
|
|||
|
|
.WhereIF(!string.IsNullOrEmpty(req.key), a => a.DataTable.Contains(req.key))
|
|||
|
|
.Select<GeoTiffManager>(a => new GeoTiffManager
|
|||
|
|
{
|
|||
|
|
Id = a.Id,
|
|||
|
|
CreateTime = a.CreateTime,
|
|||
|
|
UpdateTime = a.UpdateTime,
|
|||
|
|
DataTable = a.DataTable,
|
|||
|
|
TiffPath = a.TiffPath,
|
|||
|
|
ShpPath = a.ShpPath,
|
|||
|
|
DateDir = a.DateDir,
|
|||
|
|
LayerName = a.LayerName,
|
|||
|
|
StoreName = a.StoreName,
|
|||
|
|
AccessUrl = a.AccessUrl
|
|||
|
|
})
|
|||
|
|
.ToPageListAsync(req.page, req.limit, totalCount);
|
|||
|
|
|
|||
|
|
return new Response<PageInfo<List<GeoTiffManager>>>
|
|||
|
|
{
|
|||
|
|
Result = new PageInfo<List<GeoTiffManager>>
|
|||
|
|
{
|
|||
|
|
Items = sources,
|
|||
|
|
Total = totalCount
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 影像管理详情
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="id"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public GeoTiffManager Get(string id)
|
|||
|
|
{
|
|||
|
|
return Repository.GetById(id);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 影像更新
|
|||
|
|
/// </summary>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
/// <exception cref="Exception"></exception>
|
|||
|
|
public async Task<Response<List<string>>> UpdateGeoTiff()
|
|||
|
|
{
|
|||
|
|
var geoContext = GeoContext.Instance;
|
|||
|
|
var workspace = geoContext.Workspace;
|
|||
|
|
// 影像存放目录
|
|||
|
|
var tiffDir = geoContext.TiffDir; // 配置TIF目录,到目录tiff
|
|||
|
|
var geoserver = geoContext.GeoserverUrl;
|
|||
|
|
var tiffStoreNamePrefix = geoContext.TiffStoreNamePrefix;
|
|||
|
|
// 1. 先行查找shp(压缩包形式) 2. 解压 3. 读取shp记录(tif位置,) 4. 取得日期目录,取得tif文件路径信息
|
|||
|
|
// 5. 判断是否已经入库(全路径匹配) 6. 若没有入库,边界图形和tif信息一起存入tif表中
|
|||
|
|
var dirInfo = new DirectoryInfo(tiffDir);
|
|||
|
|
var db = Repository.AsSugarClient();
|
|||
|
|
// 获取所有文件,包括子目录中的文件
|
|||
|
|
var zipFiles = dirInfo.GetFiles("*.shp", SearchOption.AllDirectories);
|
|||
|
|
var errorList = new List<string>();
|
|||
|
|
foreach (var fileInfo in zipFiles) //所有边界文件
|
|||
|
|
{
|
|||
|
|
var shpDir = fileInfo.DirectoryName; // zip所有目录
|
|||
|
|
Console.WriteLine("shp路径:" + fileInfo.FullName);
|
|||
|
|
// 取得shp中数据
|
|||
|
|
var shpData = ShapeUtil.ReadAllGeometry(fileInfo.FullName);
|
|||
|
|
foreach (var data in shpData)
|
|||
|
|
{
|
|||
|
|
// shp 中字段有 Shape Image LayerName 日期暂时没有
|
|||
|
|
// chengguo 日期(区域 * n(tif) zip)
|
|||
|
|
// tiff 文件全路径
|
|||
|
|
var geometry1 = (Geometry)data["Geometry"]; // 图形
|
|||
|
|
//var tifName = data["LayerName"].ToString(); //abc.tif 影像名称
|
|||
|
|
var relativeTifPath = data["Image"].ToString(); // TIF 相对路径 or 相对路径
|
|||
|
|
if (string.IsNullOrEmpty(relativeTifPath)) // 没有路径,跳过
|
|||
|
|
{
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
var tifName = Path.GetFileName(relativeTifPath); // tif名称
|
|||
|
|
if (string.IsNullOrEmpty(tifName))
|
|||
|
|
{
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// \\\\192.168.10.100\\c\\ChengGuoFinal
|
|||
|
|
string tiffPath;
|
|||
|
|
var isRelativePath = false;
|
|||
|
|
// 判断相对路径还是绝对路径
|
|||
|
|
if (Regex.IsMatch(relativeTifPath, "^[a-zA-Z]")) // 若是绝对路径
|
|||
|
|
{
|
|||
|
|
tiffPath = relativeTifPath;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
isRelativePath = true;
|
|||
|
|
tiffPath = "C:\\ChengGuoFinal\\tiff" + relativeTifPath;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// todo 验证tiff 存不存修改 相对路径时,不用特别修改
|
|||
|
|
var tempAccessPath = "";
|
|||
|
|
var isNetworkFile = false;
|
|||
|
|
// 关于如果tif不存在如何处理
|
|||
|
|
if (tiffDir.Contains(".")) // 包含IP
|
|||
|
|
{
|
|||
|
|
isNetworkFile = true;
|
|||
|
|
// \无人机巡飞影像数据\20241012\沂南县\20241012沂南15-19_0.2.tif
|
|||
|
|
// \\\\192.168.10.100\\c\\ChengGuoFinal
|
|||
|
|
// C:\ChengGuoFinal\tiff\无人机巡飞影像数据\20250112\费县\20250112费县1-2-0.2.tif
|
|||
|
|
tempAccessPath = tiffPath.Replace("C:\\ChengGuoFinal\\tiff\\", tiffDir)
|
|||
|
|
.Replace("c:\\ChengGuoFinal\\tiff", tiffDir);
|
|||
|
|
if (!File.Exists(tempAccessPath))
|
|||
|
|
{
|
|||
|
|
// todo 临时注释
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//tiffPath = tempAccessPath;
|
|||
|
|
}
|
|||
|
|
else if (!File.Exists(tiffPath))
|
|||
|
|
{
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
tiffPath = tiffPath.Replace("\\", "/"); // 统一路径分隔符 反斜杠换成斜杠
|
|||
|
|
var tiffName = Path.GetFileNameWithoutExtension(tiffPath);
|
|||
|
|
//var tempPath = isRelativePath ? relativeTifPath : tiffPath;
|
|||
|
|
// 路径完全相同,不需要处理
|
|||
|
|
var exist = await Repository.AsQueryable()
|
|||
|
|
.Where(t => t.TiffPath.Equals(tiffPath)).AnyAsync();
|
|||
|
|
if (exist)
|
|||
|
|
{
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
// todo C:\ChengGuoFinal\tiff
|
|||
|
|
var shpPath = fileInfo.FullName.Replace( tiffDir,"C:\\ChengGuoFinal\\tiff\\")
|
|||
|
|
.Replace( tiffDir,"c:\\ChengGuoFinal\\tiff");
|
|||
|
|
// tiff 文件路径不同,但日期文件夹相同 更新tiff
|
|||
|
|
// todo 取得日期目录
|
|||
|
|
var dateDir = Path.GetFileName(Path.GetDirectoryName(shpPath));
|
|||
|
|
if (Path.GetFileNameWithoutExtension(shpPath).Equals("polygon")) // 针对使用qm生成的边界
|
|||
|
|
{
|
|||
|
|
// 存在多个日期时,前下划线之前
|
|||
|
|
dateDir = dateDir.Split("_")[0];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 以zip文件存在
|
|||
|
|
// 新图层名称.. TIF名称中含有.
|
|||
|
|
tiffName = tiffName
|
|||
|
|
.Replace(".tif", "")
|
|||
|
|
.Replace("_", "")
|
|||
|
|
.Replace(".", "")
|
|||
|
|
.Replace("aux", "");
|
|||
|
|
var layerName = tiffName + DateTime.Now.ToString("yyyyMMddHHmmss");
|
|||
|
|
// 新栅格仓库名称
|
|||
|
|
var storeName = tiffStoreNamePrefix + tiffName +
|
|||
|
|
DateTime.Now.ToString("yyyyMMddHHmmss");
|
|||
|
|
|
|||
|
|
var record = new GeoTiffManager
|
|||
|
|
{
|
|||
|
|
ShpPath = shpPath,
|
|||
|
|
TiffPath = tiffPath,
|
|||
|
|
DateDir = dateDir,
|
|||
|
|
UpdateTime = DateTime.Now,
|
|||
|
|
LayerName = layerName,
|
|||
|
|
StoreName = storeName,
|
|||
|
|
geometry = geometry1.AsText()
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// 开启事务
|
|||
|
|
//await db.Ado.BeginTranAsync();
|
|||
|
|
var tableName = "tiff" + layerName;
|
|||
|
|
|
|||
|
|
// todo 传入坐标
|
|||
|
|
// 新发布tiff
|
|||
|
|
var isSuccess = await GeoUtil.PublishExternalGeoTIFF("", tiffPath, storeName, layerName);
|
|||
|
|
if (!isSuccess.Result)
|
|||
|
|
{
|
|||
|
|
errorList.Add(tiffPath);
|
|||
|
|
continue;
|
|||
|
|
//throw new Exception("tiff影像发布失败");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
record.CreateTime = DateTime.Now;
|
|||
|
|
record.Id = Guid.NewGuid().ToString();
|
|||
|
|
record.DataTable = tableName;
|
|||
|
|
//record.CountyName = tiffFileInfo.Directory?.Name;
|
|||
|
|
var tiffLayerInfoResponse = await GeoUtil.GetTiffLayerInfo("", storeName, layerName);
|
|||
|
|
var bbox = tiffLayerInfoResponse.Result.bbox;
|
|||
|
|
var srs = tiffLayerInfoResponse.Result.srs;
|
|||
|
|
var accessUrl =
|
|||
|
|
$"{geoserver}/{workspace}/wms?service=WMS&version=1.1.0&request=GetMap&layers={workspace}:{layerName}&bbox={bbox}&width=768&height=571&srs={srs}&styles=&format=application/openlayers";
|
|||
|
|
record.AccessUrl = accessUrl;
|
|||
|
|
await Repository.AsInsertable(record).ExecuteCommandAsync();
|
|||
|
|
|
|||
|
|
// 判断是否存在对应图层组 如不存在则创建,如果存在,则添加图层
|
|||
|
|
var date = DateTime.ParseExact(dateDir, "yyyyMMdd", CultureInfo.InvariantCulture);
|
|||
|
|
var year = date.Year;
|
|||
|
|
var week = date.GetWeekOfYear();
|
|||
|
|
var layerGroupName = $"{year}-{week}";
|
|||
|
|
// todo 取出图层组图层
|
|||
|
|
// 判断图层组是否存在
|
|||
|
|
if (await GeoUtil.ExistLayerGroup("", layerGroupName))
|
|||
|
|
{
|
|||
|
|
await GeoUtil.AddLayersToLayerGroup("", layerGroupName, new List<string> { layerName });
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
var layers = $"<layer>{workspace}:{layerName}</layer>";
|
|||
|
|
await GeoUtil.publishLayerGroup("", layers, layerGroupName);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 下载图片
|
|||
|
|
/*try
|
|||
|
|
{
|
|||
|
|
const string fixedBbox =
|
|||
|
|
"117.34046403513817,34.331716698906675,119.27763051149853,36.263686454243626";
|
|||
|
|
var layerGroupThumbPath = "C:\\FileSystem\\web\\geoserver\\group";
|
|||
|
|
// 创建目标目录(如果不存在)
|
|||
|
|
if (!Directory.Exists(layerGroupThumbPath))
|
|||
|
|
{
|
|||
|
|
Directory.CreateDirectory(layerGroupThumbPath);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
var layerGroupThumb = layerGroupName + ".png";
|
|||
|
|
// 完整的目标文件路径
|
|||
|
|
string filePath = Path.Combine(layerGroupThumbPath, layerGroupThumb);
|
|||
|
|
var pngLink =
|
|||
|
|
$"{geoserver}/{workspace}/wms?service=WMS&version=1.1.0&request=GetMap&layers={workspace}:{layerGroupName}&bbox={fixedBbox}&width=4096&height=4096&srs=EPSG:4326&styles=&TRANSPARENT=TRUE&format=image%2Fpng";
|
|||
|
|
using (var client = new HttpClient())
|
|||
|
|
{
|
|||
|
|
using (var response = await client.GetAsync(pngLink))
|
|||
|
|
{
|
|||
|
|
response.EnsureSuccessStatusCode(); // 确保请求成功
|
|||
|
|
|
|||
|
|
// 将图片数据写入文件
|
|||
|
|
await using (var fileStream =
|
|||
|
|
new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None))
|
|||
|
|
{
|
|||
|
|
await response.Content.CopyToAsync(fileStream);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
Console.WriteLine($"图片已成功下载到: {filePath}");
|
|||
|
|
}
|
|||
|
|
catch (Exception e)
|
|||
|
|
{
|
|||
|
|
Console.WriteLine(e);
|
|||
|
|
}*/
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 提交事务
|
|||
|
|
//await db.Ado.CommitTranAsync();
|
|||
|
|
if (errorList.Count > 0)
|
|||
|
|
{
|
|||
|
|
return new Response<List<string>>
|
|||
|
|
{
|
|||
|
|
Result = errorList,
|
|||
|
|
Message = "以下影像tif发布失败:" + string.Join(",", errorList)
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return new Response<List<string>>
|
|||
|
|
{
|
|||
|
|
Result = new List<string>()
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public string Test(string storeName, string layerName)
|
|||
|
|
{
|
|||
|
|
var tiffLayerInfoResponse = GeoUtil.GetTiffLayerInfo1("", storeName, layerName);
|
|||
|
|
return tiffLayerInfoResponse.Result.ToString();
|
|||
|
|
//var db = Repository.AsSugarClient();
|
|||
|
|
//db.DbMaintenance.TruncateTable("parse_shpinfo_text3");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
public async Task<PageInfo<List<TifInfo>>> GetIntersects(GeoTiffManagerReq req)
|
|||
|
|
{
|
|||
|
|
using var db = Repository.AsSugarClient();
|
|||
|
|
var sql =
|
|||
|
|
$@"select id as ""tifId"", layer_name as ""tifName"", access_url as ""accessUrl"" from geo_tiff_manager where ST_Intersects('{req.TargetShape}'::geometry,geometry)";
|
|||
|
|
|
|||
|
|
var geoserverUrl = GeoUtil.GeoserverUrl;
|
|||
|
|
var workspace = GeoUtil.Workspace;
|
|||
|
|
var geoserverAccess =
|
|||
|
|
@$"{geoserverUrl}/{workspace}/wms?service=WMS&version=1.1.0&request=GetMap&layers={workspace}:LAYER_NAME&styles=&bbox={{bbox-epsg-3857}}&width=256&height=256&srs=EPSG:3857&format=image/png&TRANSPARENT=TRUE";
|
|||
|
|
RefAsync<int> totalCount = 0;
|
|||
|
|
var result = await db.SqlQueryable<TifInfo>(sql).ToPageListAsync(req.page, req.limit, totalCount);
|
|||
|
|
foreach (var tifInfo in result)
|
|||
|
|
{
|
|||
|
|
tifInfo.AccessUrl = geoserverAccess.Replace("LAYER_NAME", tifInfo.TifName);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return new PageInfo<List<TifInfo>>()
|
|||
|
|
{
|
|||
|
|
Items = result
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 影像创建图层组
|
|||
|
|
/// </summary>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
/// <exception cref="Exception"></exception>
|
|||
|
|
public async Task<Response<bool>> GroupGeoTiff(string type)
|
|||
|
|
{
|
|||
|
|
string layer = "";
|
|||
|
|
if ("0".Equals(type))
|
|||
|
|
{
|
|||
|
|
string myworkspace = "mylayergroup";
|
|||
|
|
var exist = await GeoUtil.ExistWorkspace(myworkspace);
|
|||
|
|
if (exist.Result)
|
|||
|
|
{
|
|||
|
|
await GeoUtil.DeleteWorkspace(myworkspace);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
await GeoUtil.CreateWorkspace(myworkspace);
|
|||
|
|
var geoContext = GeoContext.Instance;
|
|||
|
|
|
|||
|
|
// 影像存放目录
|
|||
|
|
var tiffDir = "C:\\合图数据\\1031合图"; // 配置目录
|
|||
|
|
var geoserver = geoContext.GeoserverUrl;
|
|||
|
|
var tiffStoreNamePrefix = geoContext.TiffStoreNamePrefix;
|
|||
|
|
// todo 1。 先行查找shp(压缩包形式) 2。解压 3。读取shp记录(tif位置,) 4。取得日期目录,取得tif文件路径信息
|
|||
|
|
// todo 5. 判断是否已经入库(全路径匹配) 6。若没有入库,边界图形和tif信息一起存入tif表中
|
|||
|
|
var dirInfo = new DirectoryInfo(tiffDir);
|
|||
|
|
var db = Repository.AsSugarClient();
|
|||
|
|
// 获取所有文件,包括子目录中的文件
|
|||
|
|
var zipFiles = dirInfo.GetFiles("*.tif", SearchOption.AllDirectories);
|
|||
|
|
foreach (var fileInfo in zipFiles)
|
|||
|
|
{
|
|||
|
|
var shpDir = fileInfo.DirectoryName; // tif所有目录
|
|||
|
|
string filename = fileInfo.FullName;
|
|||
|
|
|
|||
|
|
|
|||
|
|
var tiffName = Path.GetFileNameWithoutExtension(filename);
|
|||
|
|
// 新图层名称.. TIF名称中含有.
|
|||
|
|
var layerName = tiffName.Replace(".", "").Replace("aux", "") + DateTime.Now.ToString("yyyyHHmmss");
|
|||
|
|
// 新栅格仓库名称
|
|||
|
|
var storeName = tiffStoreNamePrefix + tiffName +
|
|||
|
|
DateTime.Now.Millisecond;
|
|||
|
|
// 新发布tiff
|
|||
|
|
var isSuccess = await GeoUtil.PublishSingleGeoTIFF(myworkspace, filename, storeName, layerName);
|
|||
|
|
layer = layer + "<layer>" + myworkspace + ":" + layerName + "</layer>";
|
|||
|
|
if (!isSuccess.Result)
|
|||
|
|
{
|
|||
|
|
// throw new Exception("tiff影像发布失败");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
await GeoUtil.publishLayerGroup(myworkspace, layer, "linyiAllYingxiang");
|
|||
|
|
return new Response<bool>
|
|||
|
|
{
|
|||
|
|
Result = true
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
string myworkspace = "yaoganlayergroup";
|
|||
|
|
var exist = await GeoUtil.ExistWorkspace(myworkspace);
|
|||
|
|
if (exist.Result)
|
|||
|
|
{
|
|||
|
|
await GeoUtil.DeleteWorkspace(myworkspace);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
await GeoUtil.CreateWorkspace(myworkspace);
|
|||
|
|
var geoContext = GeoContext.Instance;
|
|||
|
|
|
|||
|
|
// 影像存放目录
|
|||
|
|
var tiffDir = "C:\\合图数据\\遥感影像全市"; // 配置目录
|
|||
|
|
var geoserver = geoContext.GeoserverUrl;
|
|||
|
|
var tiffStoreNamePrefix = geoContext.TiffStoreNamePrefix;
|
|||
|
|
// todo 1。 先行查找shp(压缩包形式) 2。解压 3。读取shp记录(tif位置,) 4。取得日期目录,取得tif文件路径信息
|
|||
|
|
// todo 5. 判断是否已经入库(全路径匹配) 6。若没有入库,边界图形和tif信息一起存入tif表中
|
|||
|
|
var dirInfo = new DirectoryInfo(tiffDir);
|
|||
|
|
var db = Repository.AsSugarClient();
|
|||
|
|
// 获取所有文件,包括子目录中的文件
|
|||
|
|
var zipFiles = dirInfo.GetFiles("*.tif", SearchOption.AllDirectories);
|
|||
|
|
foreach (var fileInfo in zipFiles)
|
|||
|
|
{
|
|||
|
|
var shpDir = fileInfo.DirectoryName; // tif所有目录
|
|||
|
|
string filename = fileInfo.FullName;
|
|||
|
|
var tiffPath = shpDir + filename;
|
|||
|
|
|
|||
|
|
var tiffName = Path.GetFileNameWithoutExtension(filename);
|
|||
|
|
// 新图层名称.. TIF名称中含有.
|
|||
|
|
var layerName = tiffName.Replace(".", "") + DateTime.Now.ToString("yyyyHHmmss");
|
|||
|
|
// 新栅格仓库名称
|
|||
|
|
var storeName = tiffStoreNamePrefix + tiffName +
|
|||
|
|
DateTime.Now.Millisecond;
|
|||
|
|
// 新发布tiff
|
|||
|
|
var isSuccess = await GeoUtil.PublishSingleGeoTIFF(myworkspace, filename, storeName, layerName);
|
|||
|
|
layer = layer + "<layer>" + myworkspace + ":" + layerName + "</layer>";
|
|||
|
|
if (!isSuccess.Result)
|
|||
|
|
{
|
|||
|
|
throw new Exception("tiff影像发布失败");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
await GeoUtil.publishLayerGroup(myworkspace, layer, "yanganyingxiang");
|
|||
|
|
return new Response<bool>
|
|||
|
|
{
|
|||
|
|
Result = true
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public async Task<Response<bool>> DeleteTifStore(string stores)
|
|||
|
|
{
|
|||
|
|
var storeList = stores.Split(",").ToList();
|
|||
|
|
var failList = new List<string>();
|
|||
|
|
foreach (var se in storeList)
|
|||
|
|
{
|
|||
|
|
await Repository.DeleteAsync(u => u.StoreName == se);
|
|||
|
|
// todo 删除图层
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
await GeoUtil.DeleteCoveragesStore("", se, true);
|
|||
|
|
}
|
|||
|
|
catch (Exception e)
|
|||
|
|
{
|
|||
|
|
Console.WriteLine(e);
|
|||
|
|
failList.Add(se);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return new Response<bool>
|
|||
|
|
{
|
|||
|
|
Result = true,
|
|||
|
|
Message = string.Join(",", failList)
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public async Task<Response<bool>> UpdateLayerGroupThumb(string layerGroups, string bbox, int num, int height,
|
|||
|
|
int width)
|
|||
|
|
{
|
|||
|
|
var geoContext = GeoContext.Instance;
|
|||
|
|
var workspace = geoContext.Workspace;
|
|||
|
|
var geoserver = geoContext.GeoserverUrl;
|
|||
|
|
var layerGroupList = layerGroups.Split(",").ToList();
|
|||
|
|
if (string.IsNullOrEmpty(bbox))
|
|||
|
|
{
|
|||
|
|
bbox = "117.34046403513817,34.331716698906675,119.27763051149853,36.263686454243626";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
var coordinate = bbox.Split(",").Select(double.Parse).ToArray();
|
|||
|
|
var minx = coordinate[0];
|
|||
|
|
var miny = coordinate[1];
|
|||
|
|
var maxx = coordinate[2];
|
|||
|
|
var maxy = coordinate[3];
|
|||
|
|
var stepX = (maxx - minx) / num;
|
|||
|
|
var stepY = (maxy - miny) / num;
|
|||
|
|
var layerGroupThumbPath = "C:\\FileSystem\\web\\geoserver\\group";
|
|||
|
|
foreach (var layerGroupName in layerGroupList)
|
|||
|
|
{
|
|||
|
|
var tempPath = layerGroupThumbPath;
|
|||
|
|
// 不同图层组,不同路径
|
|||
|
|
tempPath = Path.Combine(layerGroupThumbPath, num.ToString());
|
|||
|
|
tempPath = Path.Combine(tempPath, layerGroupName);
|
|||
|
|
// 完整的目标文件路径
|
|||
|
|
// 创建目标目录(如果不存在)
|
|||
|
|
if (!Directory.Exists(tempPath))
|
|||
|
|
{
|
|||
|
|
Directory.CreateDirectory(tempPath);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 下载图片
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
for (var i = 0; i < num; i++)
|
|||
|
|
{
|
|||
|
|
for (var j = 0; j < num; j++)
|
|||
|
|
{
|
|||
|
|
var bboxCopy =
|
|||
|
|
$"{minx + i * stepX},{miny + j * stepY},{minx + (i + 1) * stepX},{miny + (j + 1) * stepY}";
|
|||
|
|
var layerGroupThumb = layerGroupName + "-" + i + "-" + j + ".png";
|
|||
|
|
if (num == 1)
|
|||
|
|
{
|
|||
|
|
layerGroupThumb = layerGroupName + ".png";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 完整的目标文件路径
|
|||
|
|
string filePath = Path.Combine(tempPath, layerGroupThumb);
|
|||
|
|
var pngLink =
|
|||
|
|
$"{geoserver}/{workspace}/wms?service=WMS&version=1.1.0&request=GetMap&layers={workspace}:{layerGroupName}&bbox={bboxCopy}&width={width}&height={height}&srs=EPSG:4326&styles=&TRANSPARENT=TRUE&format=image%2Fpng";
|
|||
|
|
using (var client = new HttpClient())
|
|||
|
|
{
|
|||
|
|
using (var response = await client.GetAsync(pngLink))
|
|||
|
|
{
|
|||
|
|
response.EnsureSuccessStatusCode(); // 确保请求成功
|
|||
|
|
|
|||
|
|
// 将图片数据写入文件
|
|||
|
|
await using (var fileStream =
|
|||
|
|
new FileStream(filePath, FileMode.Create, FileAccess.Write,
|
|||
|
|
FileShare.None))
|
|||
|
|
{
|
|||
|
|
await response.Content.CopyToAsync(fileStream);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//Console.WriteLine($"图片已成功下载到: {filePath}");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
catch (Exception e)
|
|||
|
|
{
|
|||
|
|
Console.WriteLine(e);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return new Response<bool>
|
|||
|
|
{
|
|||
|
|
Result = true
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public dynamic GetTifCrs(string filePath)
|
|||
|
|
{
|
|||
|
|
return GeoUtil.GetTifCrs(filePath);
|
|||
|
|
}
|
|||
|
|
}
|