示例#1
0
 public virtual bool TransDataSource(string dstFilePath, IGdalRead gdalRead)
 {
     if (null == gdalRead)
     {
         return(false);
     }
     if (null == gdalRead.Driver)
     {
         return(false);
     }
     try
     {
         OSGeo.OGR.DataSource ds = gdalRead.Driver.CopyDataSource(this._DataSource, dstFilePath, null);
         if (ds == null)
         {
             return(false);
         }
         ds.FlushCache();
         ds.Dispose();
     }
     catch (NullReferenceException e)
     {
         return(false);
     }
     return(true);
 }
示例#2
0
        public static IRenderer CreateRenderer(emRenderType RenderType, IGdalRead gdalRead)
        {
            IRenderer  pRender   = null;
            IGdalReadR gdalReadR = (IGdalReadR)gdalRead;

            switch (RenderType)
            {
            case emRenderType.Classify:
                if (gdalReadR != null)
                {
                    pRender = new RasterRendererClassify(gdalReadR);
                }
                break;

            default:
                break;
            }
            return(pRender);
        }
示例#3
0
        public static IGdalRead CreateGdalRead(string filePath)
        {
            OSGeo.OGR.DataSource poDataSource = OSGeo.OGR.Ogr.Open(filePath, 0);
            string strDriverName = poDataSource.GetDriver().GetName();

            IGdalRead pGdalRead = null;

            switch (strDriverName)
            {
            case "GeoJSON":
                pGdalRead = new GdalRead_GeoJson();
                break;

            case "ESRI Shapefile":
                pGdalRead = new GdalRead_SHP();
                break;

            default:
                break;
            }

            poDataSource.Dispose();
            return(pGdalRead);
        }
示例#4
0
 public Renderer(IGdalRead gdalRead)
 {
     _GdalRead = gdalRead;
 }
示例#5
0
 public GdalTrans_Grid(IGdalRead gdalRead, IGdalAlg gdalAlg) : base(gdalRead)
 {
     _GdalAlg = gdalAlg;
 }
示例#6
0
 public GdalTrans_Clip(IGdalRead gdalRead = null) : base(gdalRead)
 {
 }
示例#7
0
        /// <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);
        }
示例#8
0
 public GdalTrans(IGdalRead gdalRead)
 {
     _GdalRead = gdalRead;
 }
示例#9
0
 public GdalTrans_Raster(IGdalRead gdalRead) : base(gdalRead)
 {
 }
示例#10
0
 public GdalTrans_Contour(IGdalRead gdalRead) : base(gdalRead)
 {
 }
示例#11
0
 public RendererSimple(IGdalRead gdalRead) : base(gdalRead)
 {
     this._RenderType = emRenderType.Simple;
 }
示例#12
0
 public RendererUnique(IGdalRead gdalRead) : base(gdalRead)
 {
     this._RenderType = emRenderType.Unique;
 }