Arcobject获得栅格影像的边界

一般的各种遥感影像都是采用某种地理或投影坐标的栅格影像,对于从事影像相关工作的人来说,得到现有影像的覆盖范围是确定研究内容,购买遥感影像的基础。怎么得到这个覆盖范围呢?当然我们可以在ArcGIS或ERDAS中打开,就可以看到影像范围了。不过当影像数量达到TB级时,这种方式显然是行不通的。这里我们就需要通过一定的办法将每幅影像的范围以矢量图形的方式表示出来。

一般来说,如果需要的精度不高,可以采用AO获得影像的四至范围Extent,对于TB级别的数据,这样处理速度很快,相对来说是一种比较简便的处理方法。

                IWorkspaceFactory rWSF = new RasterWorkspaceFactoryClass();
                IRasterWorkspace rWS = (IRasterWorkspace)rWSF.OpenFromFile(folderName, 0);
                rasterDataset = rWS.OpenRasterDataset(datasetName);
                nLayer.CreateFromDataset(rasterDataset);
                IEnvelope rExtent = nLayer.VisibleExtent as IEnvelope;

接下来就很容易将extent转化为矢量图形。

这里还有一个问题,我们知道影像在很多时候不是规则的,边界并不是正方向的,经过正射纠正的影像一般都是平行四边形,这样得到的影像范围矢量表示势必会大于原本的影像范围。

我们来看Arcobject中的解决方案。

ESRI.ArcGIS.DataSourcesRaster.RasterDomainExtractor就是用来解决这个问题的。这个用起来方法很简单。

                IRasterDomainExtractor nRasterDomainExtractor = new RasterDomainExtractorClass();
                IPolygon nPolygon=nRasterDomainExtractor.ExtractDomain(nRaster,true);

这段代码在只有一个波段的全色影像上运行没问题,在我这是不能处理多波段的影像的。不过,一般来说,多波段影像

各个波段的范围都是一样的,所以可以取其中任意一个波段处理。

                IRasterBandCollection rasterBandCollection=(IRasterBandCollection)nLayer.Raster;
                if (rasterBandCollection.Count<1)
                {
                    return;
                }
                else if (rasterBandCollection.Count==1)
                {
                    nRaster1 = nLayer.Raster;
                }
                else
                {
                    IRasterBand rasterBand = rasterBandCollection.Item(0);
                    IRasterDataset nRasterDataset = (rasterBand as IDataset) as IRasterDataset;
                    nLayer.CreateFromDataset(nRasterDataset);
                    nRaster1 = nLayer.Raster;
                }
                IRasterDomainExtractor nRasterDomainExtractor = new RasterDomainExtractorClass();

这样就可以算是大功告成了。

 

Nanttery

2014-03-27 18:32

posted @ 2014-03-27 18:35  slum_dunk  阅读(1232)  评论(0编辑  收藏  举报