年度变更建库软件5.0版本
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

213 lines
8.7 KiB

using ESRI.ArcGIS.Carto;
using Kingo.Plugin.RasterToKOTilesApp.KoDataBase;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Management;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Threading;
namespace Kingo.Plugin.RasterToKOTilesApp
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
GdalConfiguration.ConfigureGdal();
GdalConfiguration.ConfigureOgr();
if (!KGIS.Framework.AE.AELicense.AoInit())
{
return;
}
// args = new string[] { @"F:\研发产品文档\02年度变更外业调绘助手\余杭区全部数据shape\切割后影像\c04_2000_Project_Clip11.tif;F:\研发产品文档\02年度变更外业调绘助手\余杭区全部数据shape\切割后影像\c04_2000_Project_Clip21.tif", "影像数据", @"G:\a\", @"G:\余杭无人机任务制作\余杭区(330110)\工程目录\举证任务\BGDB.gdb\变更数据\CJDCQ", "CJDCQ","BSM='{0}'" , "330110107000000005", "png","7","512" ,"6", "0" };//;F:\研发产品文档\02年度变更外业调绘助手\余杭区全部数据shape\切割后影像\c04_2000_Project_Clip21.tif
//F:\研发产品文档\02年度变更外业调绘助手\余杭区全部数据shape\切割后影像\c04_2000_Project_Clip81.tif c04_2000_Project_Clip81.tif G:\余杭无人机任务制作\余杭区(330110)\外业调绘成果\20221202161703\Kingoit\phonemap_wydh\projects\县级数据\Source null null null 县级数据 png 7 512 6 0
// args = new string[] { @"F:\研发产品文档\02年度变更外业调绘助手\余杭区全部数据shape\切割后影像\c04_2000_Project_Clip11.tif", "c04_2000_Project_Clip11.tif", @"G:\余杭无人机任务制作\余杭区(330110)\外业调绘成果\20221202161703\Kingoit\phonemap_wydh\projects\县级数据\Source", "null", "null", "null", "县级数据", "png", "7", "512", "6", "0" };
if (args.Length != 12)
{
Console.WriteLine("生成KO文件失败,参数错误");
return;
}
string strLayerPath = args[0];
string strFileName = args[1];
string strOutputPath = args[2];
string customLayerPath = args[3];
string customLayerName = args[4];
string customstrWhere = args[5];
string customKeyValue = args[6];
string tilesType = args[7];
int sectionlevel =Convert.ToInt32(args[8]);
int tileSize = Convert.ToInt32(args[9]);
int threadNum = Convert.ToInt32(args[10]);
string strConvertWebMercator = args[11];
bool convertWebMercator = false;
if (strConvertWebMercator == "1")
convertWebMercator = true;
else
convertWebMercator = false;
Envelope envelopeCut = null;
List<string> files = new List<string>();
if (strLayerPath.Contains(";"))
{
string[] filePathArr = strLayerPath.Split(';');
if (filePathArr != null && filePathArr.Length != 0)
{
for (int i = 0; i < filePathArr.Length; i++)
{
files.Add(filePathArr[i]);
}
}
}
else
{
files.Add(strLayerPath);
}
if (!string.IsNullOrWhiteSpace(customLayerPath) && customLayerPath!= "null"&& !string.IsNullOrWhiteSpace(customLayerName) && customLayerName != "null" && !string.IsNullOrWhiteSpace(customstrWhere) && customstrWhere != "null" && !string.IsNullOrWhiteSpace(customKeyValue) && customKeyValue != "null")
{
envelopeCut = GetCustomEnvelope(customLayerPath, customLayerName, customstrWhere, customKeyValue);
}
MultRaster2MBTiles pMergeRaster = new MultRaster2MBTiles();
int nThread = 1;
try
{
System.Drawing.Imaging.ImageFormat imgFormat = System.Drawing.Imaging.ImageFormat.Jpeg;
if (tilesType.ToString().ToLower() == "png")
{
imgFormat = System.Drawing.Imaging.ImageFormat.Png;
}
pMergeRaster.ImgFormat = imgFormat;
pMergeRaster.Level = sectionlevel;
pMergeRaster.TiledSize = tileSize;
pMergeRaster.MBTilesPath = strOutputPath + "\\" + strFileName + ".kotiles";
pMergeRaster.SaveType = EnumSaveType.Level;
nThread =threadNum;
nThread = nThread <= 0 ? 1 : nThread;
}
catch (Exception ex)
{
Console.WriteLine("制作失败!原因:" + ex.Message);
return;
}
DateTime dt1 = DateTime.Now;
pMergeRaster.CreatDown += (s, e1) =>
{
DateTime dt3 = DateTime.Now;
string make="完成,共用时" + dt3.Subtract(dt1).TotalSeconds.ToString("0.0") + "秒";
string msg = string.Format("{0};{1};{2}", make, 100, 100);
Console.WriteLine(msg);
};
pMergeRaster.Report += (s, c) =>
{
string make= string.Format("{0}/{1}", c, s);
string msg = string.Format("{0};{1};{2}", make, c, s);
Console.WriteLine(msg);
};
try
{
pMergeRaster.CreateMulFilesKOTiles(files, nThread, convertWebMercator, envelopeCut);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
static Envelope GetCustomEnvelope(string customLayerPath, string customLayerName ,string customstrWhere, string customKeyValue )
{
Envelope envelopeCut = null;
double distance = 100.0;
OSGeo.OGR.Layer toplayer = null;
try
{
DataTable dtLayer = null;
if (customLayerPath.ToLower().Contains(".gdb") || customLayerPath.ToLower().Contains(".mdb"))
{
if (customLayerPath.ToLower().Contains(".gdb"))
customLayerPath = customLayerPath.Substring(0, customLayerPath.LastIndexOf(".gdb") + 4);
dtLayer = GdalShapeOperate.Instance.GDBToDataTable(customLayerPath, customLayerName);
}
else
{
dtLayer = GdalShapeOperate.Instance.ShapeToDataTable(customLayerPath);
}
if (dtLayer != null && dtLayer.Rows.Count!=0)
{
DataRow[] rows = dtLayer.Select(string.Format(customstrWhere, customKeyValue));
if (rows != null && rows.Count() != 0)
{
OSGeo.OGR.Geometry geometryValue = rows[0]["SHAPE"] as OSGeo.OGR.Geometry;
if (geometryValue != null)
{
List<OSGeo.OGR.Geometry> list = new List<OSGeo.OGR.Geometry>() { geometryValue.Clone() };
toplayer = UnionVector.CreateLayer(list, distance);
OSGeo.OGR.Geometry geometry = null;
foreach (OSGeo.OGR.Geometry geo in list)
{
geometry = UnionVector.UnionGeometry(geometry, geo);
}
OSGeo.OGR.Envelope envelope = new OSGeo.OGR.Envelope();
geometry.GetEnvelope(envelope);
envelopeCut = new Envelope
{
XMax = envelope.MaxX,
XMin = envelope.MinX,
YMax = envelope.MaxY,
YMin = envelope.MinY
};
}
}
}
}
catch (Exception ex)
{
Console.WriteLine("获取自定义范围失败:" + ex);
}
return envelopeCut;
}
}
}