⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clslinkattdatabase.cs

📁 c#+arcengine生成等值面图片
💻 CS
📖 第 1 页 / 共 3 页
字号:
                //插值生成等值面
                IRaster pRasterDem = IDW(pFC, item, windDataset);
                w.WriteLine(DateTime.Now.ToString() + " 插值生成等值面完成");
                w.Flush();
                //Console.WriteLine(DateTime.Now.ToString() + " 插值生成等值面完成");
                //删除字段
                IFields pFields = pFC.Fields;
                int lFieldnumber = pFields.FindField(item);
                IField pField1 = pFields.get_Field(lFieldnumber);
                pFC.DeleteField(pField1);

                //生成图片并加载栅格图层
                createimg(pRasterDem, directorypath, name, windDataset);
                w.WriteLine(DateTime.Now.ToString() + " 等值面图片生成");
                w.Flush();
                //Console.WriteLine(DateTime.Now.ToString() + " 等值面图片生成");
                //释放内存
                pRasterDem = null;
                WndTable10.Dispose();
                WndTable10 = null;
                Wndds10.Dispose();
                Wndds10 = null; 
                windDataset = null;
                System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor1);
                pFeatureCursor1 = null;
                System.Runtime.InteropServices.Marshal.ReleaseComObject(pFC);
                pFC = null;
                pFields = null;
                pField1 = null;


                //删除重复记录
                Querydata("4", yearSql , height, item);

                //添加记录到数据库

                String addSQL = "insert into t_wndrsc_product (STATTYPE, ENDDATE, HEIGHT, ITEM, FILENAME, path, OPERATETIME) values ('4', '" + yearSql + "', '" + height + "', '" + item + "', '" + name + "', '" + directorypath + "', sysdate)";
                //MessageBox.Show(addSQL);
                UpdateDataBase(addSQL);
                w.WriteLine(DateTime.Now.ToString() + " 操作记录添加到数据库");
                w.Flush();
                //Console.WriteLine(DateTime.Now.ToString() + " 操作记录添加到数据库");
            }
            catch (Exception e)
            {
                w.WriteLine(DateTime.Now.ToString() + e.Message);
                w.Flush();
                //Console.WriteLine(DateTime.Now.ToString() + e.Message);
            }
                
         



        }

        public void Querydata(String stattype,String date,double height,String item)
        {
          
            String sqldata = "delete from t_wndrsc_product t where t.STATTYPE ='" + stattype + "'and t.ENDDATE='" + date + "'and t.HEIGHT='" + height + "'and t.ITEM='" + item + "'";

            UpdateDataBase(sqldata);

        }


        public void createimg(IRaster mRaster, String imgpath, String name, IGeoDataset windDataset)
        {
            IRasterLayer pRLayerDem;
            pRLayerDem = new RasterLayerClass();
            pRLayerDem.CreateFromRaster(mRaster);
            Symbolling(pRLayerDem);
            IRasterLayerExport pExraster = new RasterLayerExportClass();
            pExraster.RasterLayer = pRLayerDem;
            int x = 650;
            int y = 650;

            pExraster.SetSize(x, y);
            IEnvelope pEnvelop = windDataset.Extent;
            double dwidth = pEnvelop.Width;
            double dheight = pEnvelop.Height;
            double xMax = pEnvelop.XMax;
            double yMax = pEnvelop.YMax + (dwidth - dheight)/2;
            double xMin = pEnvelop.XMin;
            double yMin = pEnvelop.YMin - (dwidth - dheight) / 2;

            IEnvelope mEnvelop = new EnvelopeClass();

            mEnvelop.PutCoords( xMin, yMin, xMax, yMax);

            pExraster.Extent = mEnvelop;
            pExraster.Force2RGB = true;

            IWorkspaceFactory pWKSF = new RasterWorkspaceFactoryClass();
            IWorkspace pWorkspace = pWKSF.OpenFromFile(@imgpath, 0);
            if (pWorkspace!=null)
            {
            pExraster.Export(pWorkspace, name, "IMAGINE Image");
            }
            else 
            {
                MessageBox.Show("请配置正确图片存放的路径");
                Environment.Exit(0);
            }

            //释放内存
            mRaster = null;
            windDataset = null;
            pRLayerDem = null;
            mEnvelop = null;
            pEnvelop = null;
            pExraster = null;
            pWKSF = null;
            pWorkspace = null;
            
           
           

        }
        public IRaster IDW(IFeatureClass pFC, string sFieldName, IGeoDataset pGeoDataset)
        {
            IInterpolationOp pInterpolationOp;
            pInterpolationOp = new RasterInterpolationOpClass();
            //IGeoDataset pInputDataset = (IGeoDataset)pFC;

            IRasterRadius pRadius;
            pRadius = new RasterRadiusClass();
            object dMaxDistance = new object();
            dMaxDistance = null;
            pRadius.SetVariable(12, ref dMaxDistance);
            //pRadius.SetVariable(12, ref null);

            IFeatureClassDescriptor pFCDescriptor;
            pFCDescriptor = new FeatureClassDescriptorClass();
            pFCDescriptor.Create(pFC, null, sFieldName);

            object dCellSize = new object();
            dCellSize = 9000.768204;  //16688.768204

            ///
            IRasterAnalysisEnvironment pEnv;
            pEnv = (IRasterAnalysisEnvironment)pInterpolationOp;
            pEnv.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref dCellSize);
            //pEnv.SetExtent(esriRasterEnvSettingEnum.esriRasterEnvValue,);
            pEnv.Mask = pGeoDataset;
            //*******************************************

            object extentProvider = pGeoDataset.Extent.Envelope;//.Envelope;
            object snapRasterData = Type.Missing;
            pEnv.SetExtent(esriRasterEnvSettingEnum.esriRasterEnvValue, ref extentProvider, ref snapRasterData);


            //*********************************************


            IRaster pOutRaster;
            object barrier = System.Reflection.Missing.Value;
            IGeoDataset pGeoData = (IGeoDataset)pFCDescriptor;
            //IGeoDataset pOutGeoData;
            (IRaster)pOutRaster = pInterpolationOp.IDW(pGeoData, 2, pRadius, ref barrier) as IRaster;
          
            //pOutRaster = (IRaster)pOutGeoData;
            pRadius = null;
            dMaxDistance = null;
            snapRasterData = null;
            extentProvider = null;
            dCellSize = null;
            pEnv = null;
            pGeoData = null;
            pFC = null;
            pGeoDataset = null;
            barrier = null;
            pFCDescriptor = null;
            pRadius = null;
            pInterpolationOp = null;
            return pOutRaster;
            

        }

        public void Symbolling(IRasterLayer pRasterLayer)
        {
            IRasterStretchColorRampRenderer pStretchRen;
            pStretchRen = new RasterStretchColorRampRendererClass();
            IRasterRenderer pRasRen;
            pRasRen = pStretchRen as IRasterRenderer;
            pRasRen.Raster = pRasterLayer.Raster;
            pRasRen.Update();
            //IRgbColor pFromColor = new RgbColorClass();
            //pFromColor.Red = 255;
            //IRgbColor pToColor = new RgbColorClass();
            //pToColor.Blue = 255;

            //IAlgorithmicColorRamp pRamp = new AlgorithmicColorRampClass();
            //bool bTrue;
            //pRamp.Size = 10;

            IRasterClassifyColorRampRenderer pClassRen = new RasterClassifyColorRampRendererClass();

            //pRamp.FromColor = pToColor;
            //pRamp.ToColor = pFromColor;
            //pRamp.CreateRamp(out bTrue);

            // Create symbol for the classes
            IFillSymbol pFSymbol = new SimpleFillSymbolClass();// SimpleFillSymbol;

            String[] colorEnum = new String[]  {"0,255,249","0,255,135","213,254,0","255,252,1","254,210,1 "," 252, 136, 1 ",
                " 251, 78, 1 "," 254, 0, 2 "," 200, 80, 2 "," 127, 1, 2 ","110, 39, 9"};

            //loop through the classes and apply the color and label
            pClassRen.ClassCount = 11;
            for (int i = 0; i < pClassRen.ClassCount; i++)
            {
                IRgbColor pColor = new RgbColorClass();
                String scolor = colorEnum[i];
                String[] sscolor = scolor.Split(',');
                pColor.Red = Convert.ToInt32(sscolor[0]);
                pColor.Green = Convert.ToInt32(sscolor[1]);
                pColor.Blue = Convert.ToInt32(sscolor[2]);


                pFSymbol.Color = pColor;
                ISymbol pSymbol = (ISymbol)pFSymbol;
                pClassRen.set_Symbol(i, pSymbol);
                pClassRen.set_Label(i, "Class" + i.ToString());


                pColor = null;
                pSymbol = null;
            }


            pStretchRen.BandIndex = 0;
            //pStretchRen.ColorRamp = pRamp;
            pRasRen.Update();
            pRasterLayer.Renderer = pClassRen as IRasterRenderer;

            //return pRasterLayer;
            
            pStretchRen = null;
            pRasRen = null; 
            pFSymbol = null;
            pClassRen = null;
            pRasterLayer = null;

        }

        public  IFeatureClass ReadPointShp(string sFileName)
        {
            string sFilePath = sFileName.Substring(0, sFileName.LastIndexOf("\\"));
            sFileName = sFileName.Substring(sFilePath.Length + 1);
            IFeatureWorkspace pFtWs;
            IFeatureClass pFtCs;
            IWorkspaceFactory pWsFt = new ShapefileWorkspaceFactoryClass();
            pFtWs = (IFeatureWorkspace)pWsFt.OpenFromFile(sFilePath, 0);
            pFtCs = pFtWs.OpenFeatureClass(sFileName);
            pWsFt = null;
            pFtWs = null;
            return pFtCs;
            
        }


    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -