栅格数据设置像元大小遇到的问题 求解啊!!!

需求:

QQ图片20160125140904.png

 过程:
1.DEM数据(1:1万DEM 2米格网)进行投影转换到2000坐标系,
2.然后再另存出去,另存的像元的大小为0.00002度,另存的栅格数据起点坐标为:
  x=Xmin+0.00001  (保留5位小数)
  y=Ymin+0.00001  (保留5位小数)
3.DEM数据用矢量数据裁切
最终期望实现的目标:
要求DEM投影转换成2000坐标系,然后根据标准的格网进行裁切,最终的DEM数据的Extent范围进度都是5位小数
即上下左右都是五位小数
问题:
①设置cellsize后输出的数据结果不对(具体如截图1所示)
②我用代码实现1、2步骤之后的栅格数据范围的精度就不是五位小数,而是好多位,我希望小数保留5位其它位都是00000。(具体如截图2所示)

2.png

截图1

1.jpg

截图2
 

我的代码如下:
1.投影转换代码:
            Guid guid = Guid.NewGuid();
            if (!System.IO.Directory.Exists(m_sTempPath))
            {
                System.IO.Directory.CreateDirectory(m_sTempPath);
            }
            string strTempPath = System.IO.Path.Combine(m_sTempPath, guid.ToString() + ".tif");
            //创建投影变换
            IRasterDataset2 inPutRasterDataset = PS.Plot.Common.EngineAPI.OpenRasterFile(demFile.FullName) as IRasterDataset2;
            IRaster2 pRaster = inPutRasterDataset.CreateDefaultRaster() as IRaster2;
            IRasterProps pRasterProps = (IRasterProps)pRaster;
            pRasterProps.SpatialReference = geographicCoordinateSystem;
            ISpatialReference pSpatialReference = (inPutRasterDataset as IGeoDataset).SpatialReference;
            Type factoryType = Type.GetTypeFromProgID("esriGeometry.SpatialReferenceEnvironment");
            System.Object obj = Activator.CreateInstance(factoryType);
            ISpatialReferenceFactory2 pSRF = obj as ISpatialReferenceFactory2;
            ICoordinateFrameTransformation pCFT = new CoordinateFrameTransformationClass();
            pCFT.PutParameters(0, 0, 0, 0, 0, 0, 1);            
            pCFT.PutSpatialReferences(pSpatialReference, geographicCoordinateSystem);
            pCFT.Name = "DemSpatialRef_TO_2000";
            IGeoTransformationOperationSet pGTSet = pSRF.GeoTransformationDefaults;
            pGTSet.Set(esriTransformDirection.esriTransformForward, pCFT);
            pGTSet.Set(esriTransformDirection.esriTransformReverse, pCFT);
            //栅格数据投影转换
            pRaster.GeoTransformations = pGTSet;
 
2.设置起止点 另存栅格数据
            ISaveAs2 pSaveAs = (ISaveAs2)pRaster;
            IRasterStorageDef rasterStorageDef = new RasterStorageDefClass();
            IRasterStorageDef2 rasterStorageDef2 = (IRasterStorageDef2)rasterStorageDef;
            IPnt pnt = new PntClass();
            pnt.SetCoords(0.00002, 0.00002);   //这步不知道为什么输出的数据格网大小不是0.00002?
            rasterStorageDef2.CellSize = pnt;
            rasterStorageDef2.PyramidResampleType = rstResamplingTypes.RSP_BilinearInterpolation;
            //设置起止点
            IPoint pPoint = new Point();
            pPoint.X = Math.Round(pRasterProps.Extent.XMin + 0.00001, 5);
            pPoint.Y = Math.Round(pRasterProps.Extent.YMin + 0.00001, 5);            
            pPoint.SpatialReference = pRasterProps.SpatialReference;
            rasterStorageDef2.Origin = pPoint;
            pSaveAs.SaveAsRasterDataset(strTempPath, null, "TIFF", rasterStorageDef2);
 
3.调用GP进行裁切如上所示的结果
这块请教了慕晓燕大神,她提供的思路是将裁切范围的精度都设置成5位小数,然后进行掩膜提取,测试了一下X方向可以,Y方向还是有问题
 
注:任何帮助都不胜感激 看不明白的我再补充
已邀请:

杨欢

赞同来自:

问题太难 还是看不懂 大神们给点思路啊

要回复问题请先登录注册