private IGdalAlg InitGdalAlg_IWD(string algParms) { #region 参数结构 //var jsonParams_Test = new //{ // algParms = new // { // Power = 2, // Smoothing = 0, // Radius1 = 0, // Radius2 = 0, // NoDataValue = -9999 // } //}; #endregion // 初始IDW权重参数 GdalAlg_IWD gdalAlg = new GdalAlg_IWD(); var paramsIDW = JsonConvert.DeserializeObject <dynamic>(algParms); gdalAlg.Power = Convert.ToDouble(paramsIDW["Power"] + ""); gdalAlg.Smoothing = Convert.ToDouble(paramsIDW["Smoothing"] + ""); gdalAlg.Radius1 = Convert.ToDouble(paramsIDW["Radius1"] + ""); gdalAlg.Radius2 = Convert.ToDouble(paramsIDW["Radius2"] + ""); gdalAlg.NoDataValue = Convert.ToDouble(paramsIDW["NoDataValue"] + ""); return(gdalAlg); }
/// <summary>分布图 /// </summary> /// <param name="strParams">json参数</param> /// <returns></returns> private bool RunModel_Distribution() { // 解析参数 var jsonParams = _Params; // 初始插值方法对象 GdalAlg_IWD gdalAlg = null; string algType = jsonParams["algType"] + ""; string algParms = JsonConvert.SerializeObject(jsonParams["algParms"]); switch (algType) { case "IDW": gdalAlg = (GdalAlg_IWD)InitGdalAlg_IWD(algParms); break; default: break; } // 初始格网生成参数 string srcVectorFilename = jsonParams["srcData"]["srcVectorFilename"] + ""; string srcTimeType = jsonParams["srcData"]["srcTimeType"] + ""; string strAtrrName = jsonParams["algParms"]["algAtrrName"] + ""; if (srcTimeType != "") { srcTimeType = "_" + srcTimeType + ""; } double dCellSize = Convert.ToDouble(jsonParams["algParms"]["algCellSize"] + ""); double dEnvelope_offsetX = Convert.ToDouble(jsonParams["algParms"]["algEnvelope_offsetX"] + ""); double dEnvelope_offsetY = Convert.ToDouble(jsonParams["algParms"]["algEnvelope_offsetY"] + ""); double dNoDataValue = -9999; string srcFileName = Path.GetFileNameWithoutExtension(srcVectorFilename); string dstRasterFilename = _FloderTemp + GdalCommon.CreateName(_FloderTemp, srcFileName, ".tiff") + ".tiff"; bool isUseClip = Convert.ToBoolean(jsonParams["clipData"]["clipVaild"] + ""); string clipVectorWhere = jsonParams["clipData"]["clipWhere"] + ""; string division = clipVectorWhere != "" ? clipVectorWhere : "division"; string clipVectorFilename = GdalCommon.GetFile_Division(Convert.ToString(jsonParams["clipData"]["infoDivision"])) + division + ".geojson"; string dstRasterFilenameClip = dstRasterFilename; if (isUseClip) { dstRasterFilenameClip = _FloderTemp + GdalCommon.CreateName(_FloderTemp, srcFileName, ".tiff") + "_Clip.tiff"; } string strFileName = jsonParams["dstContour"]["dstFileName"] + ""; strFileName = strFileName != "" ? strFileName : _dtTag; //GdalCommon.CreateName(_FloderTemp, "", ".geojson"); _nameTag = strAtrrName + srcTimeType + strFileName; _FloderOutput = _FloderOutput + "Distribution/" + gdalAlg.AlgName + "/"; string outFilename = _FloderOutput + _nameTag + ".geojson"; if (!Directory.Exists(_FloderOutput)) { Directory.CreateDirectory(_FloderOutput); } // 初始插值源数据 IGdalRead gdalRead = GdalRead_Factory.CreateGdalRead(srcVectorFilename); if (!gdalRead.InitDataSource(srcVectorFilename, Encoding.UTF8, 0, false)) { Console.WriteLine(srcVectorFilename); this.InitError(string.Format("插值源数据{0}打开失败!数据不存在或文件错误!", Path.GetFileName(srcVectorFilename)), true); return(false); } // 调用IDW插值算法生成格网 GdalTrans_Grid poTrans = new GdalTrans_Grid(gdalRead, gdalAlg); if (poTrans.TransToGrid(strAtrrName, dstRasterFilename, dCellSize, dEnvelope_offsetX, dEnvelope_offsetY) == false) { this.InitError("IDW插值算法生成格网出错!", true); return(false); } // 调用裁剪 if (isUseClip) { GdalTrans_Clip poTrans_Clip = new GdalTrans_Clip(); if (poTrans_Clip.ClipRaster(clipVectorFilename, "", dstRasterFilename, 1, dstRasterFilenameClip, dNoDataValue) == false) { this.InitError("IDW插值格网裁剪出错!", true); return(false); } } // 初始等值面提取参数 double[] dLevelIntervals = jsonParams["dstContour"]["LevelIntervals"].ToObject <List <double> >().ToArray(); double dLevelBase = Convert.ToDouble(jsonParams["dstContour"]["LevelBase"] + ""); bool isPolygon = Convert.ToBoolean(jsonParams["dstContour"]["IsPolygon"] + ""); // 调用等值面提取 GdalTrans_Contour poTrans_Contour = new GdalTrans_Contour(gdalRead); poTrans_Contour.ContourGenerate(dstRasterFilenameClip, outFilename, 1, dLevelIntervals, dLevelBase, isPolygon); // 组装返回结果 _ModeState = emModeState.Runout; _Datas = new JObject(); _Datas.Add("typeFile", "GeoJSON"); _Datas.Add("typeAlg", algType); _Datas.Add("title", strAtrrName + srcTimeType); _Datas.Add("nameTag", _nameTag); _Datas.Add("outFile", outFilename); _dstRasterFile = dstRasterFilenameClip; return(true); }