导入栅格数据到SDE数据库

/**  

  *strRasterFileDir:栅格数据文件所在目录  

  *strRasterFileName:栅格数据文件名  

  *strOutName:存储于数据库的文件名  

  *failInfo:导入失败文件名  

  *errorDetail:错误信息  

  *skipInfo:发现重名情况跳过文件名

**/

        private void imortRasterData(string strRasterFileDir, string strRasterFileName, string strOutName, ref string failInfo, ref string errorDetail, ref string skipInfo)

        {

            try

            {

                //判断是否有重名现象

                IWorkspace2 pWS2 = pSdeWorkSpace as IWorkspace2;

 

                //如果名称已存在

                if (pWS2.get_NameExists(esriDatasetType.esriDTRasterDataset, strOutName))

                {

                    DialogResult result;

                    result = MessageBox.Show(this, "栅格文件名  " + strOutName + "  在数据库中已存在!" + "\r是否覆盖?", "相同文件名", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);

                    //覆盖原矢量要素

                    if (result == DialogResult.Yes)

                    {

                        IRasterWorkspaceEx pRWs = pSdeWorkSpace as IRasterWorkspaceEx;

                        IDataset pDataset = pRWs.OpenRasterDataset(strOutName) as IDataset;

                        pDataset.Delete();

                        pDataset = null;

                    }

 

                    else if (result == DialogResult.No)

                    {

                        //不覆盖,则退出for循环,忽略这个要素,转入下一个要素的导入

                        if (skipInfo == "")

                            skipInfo = strRasterFileDir + "\\" + strRasterFileName;

                        else

                            skipInfo += ";" + strRasterFileDir + "\\" + strRasterFileName;

                        return;

                    }

                }

                IWorkspaceFactory pRasterWsFac = new RasterWorkspaceFactoryClass();

                IWorkspace pWs = pRasterWsFac.OpenFromFile(strRasterFileDir, 0);

                IRasterDataset pRasterDs = null;

                IRasterWorkspace pRasterWs;

                if (!(pWs is IRasterWorkspace))

                {

                    if (failInfo == "")

                    {

                        failInfo = strRasterFileDir + "\\" + strRasterFileName;

                        errorDetail = "错误信息:" + strRasterFileDir + "不是栅格工作空间。";

                    }

                    else

                    {

                        failInfo += ";" + strRasterFileDir + "\\" + strRasterFileName;

                        errorDetail += ";" + "错误信息:" + strRasterFileDir + "不是栅格工作空间。";

                    }

                    return;

                }

                pRasterWs = pWs as IRasterWorkspace;

                pRasterDs = pRasterWs.OpenRasterDataset(strRasterFileName);

                ISaveAs2 saveAs2 = (ISaveAs2)pRasterDs;

                IRasterStorageDef rasterStorageDef = new RasterStorageDefClass();

                IRasterStorageDef2 rasterStorageDef2 = (IRasterStorageDef2)rasterStorageDef;

                rasterStorageDef2.CompressionType =

                    esriRasterCompressionType.esriRasterCompressionJPEG2000;

 

                rasterStorageDef2.CompressionQuality = 50;

                rasterStorageDef2.Tiled = true;

                rasterStorageDef2.TileHeight = 128;

                rasterStorageDef2.TileWidth = 128;

 

                saveAs2.SaveAsRasterDataset(strOutName, pSdeWorkSpace, "gdb", rasterStorageDef2);

            }

            catch (Exception ex)

            {

                Console.WriteLine(ex.Message);

                if (failInfo == "")

                {

                    failInfo = strRasterFileDir + "\\" + strRasterFileName;

                    errorDetail = "错误信息:" + ex.Message;

                }

                else

                {

                    failInfo += ";" + strRasterFileDir + "\\" + strRasterFileName;

                    errorDetail += ";" + "错误信息:" + ex.Message;

                }

                return;

            }

        }

posted @ 2010-04-13 08:36  iLocationStudio  阅读(1138)  评论(0)    收藏  举报