raster

更新时间:2024-04-15 02:45:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

两个星期以来一直与栅格数据打交道,对AO的栅格部分应该有了一定的理解,下面是自己的一点体会,希望高手指教:-)

1、栅格数据的存储类型

栅格数据一般可以存储为ESRI GRID(由一系列文件组成),TIFF格式(包括一个TIF文件和一个AUX文件),IMAGINE Image格式 在AE中一般调用ISaveAs接口来保存栅格数据

2、栅格数据集和栅格编目的区别

一个栅格数据集由一个或者多个波段(RasterBand)的数据组成,一个波段就是一个数据矩阵。对于格网数据(DEM数据)和单波段的影像数据,表现为仅仅只有一个波段数据的栅格数据集,而对于多光谱影像数据则表现为具有多个波段的栅格数据集

栅格编目(RasterCatalog)用于显示某个研究区域内各种相邻的栅格数据,这些相邻的栅格数据没有经过拼接处理合成一副大的影像图

3、IRasterWorkspaceEx与IRasterWorkspace ,IRsterWorkspace2的区别

1).IRasteWorkspaceEx接口主要是用来读取GeoDatabase中的栅格数据集和栅格编目

2) . IRasterWorkspace ,IRsterWorkspace2主要是用来读取以文件格式存储在本地的栅格数据

4、加载栅格数据(以存储在本地的栅格数据文件为例)

1.直接用IRasterLayer接口打开一个栅格文件并加载到地图控件

IRasterLayer rasterLayer = new RasterLayerClass();

rasterLayer.CreateFromFilePath(fileName); // fileName指存本地的栅格文件路径

axMapControl1.AddLayer(rasterLayer, 0);

2. 用IRasterDataset接口打开一个栅格数据集

IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactory();

IWorkspace workspace;

workspace = workspaceFactory.OpenFromFile(inPath, 0); //inPath栅格数据存储路径

if (workspace == null) {

Console.WriteLine(\

return; }

IRasterWorkspace rastWork = (IRasterWorkspace)workspace;

IRasterDataset rastDataset;

rastDataset= rastWork.OpenRasterDataset(inName);//inName栅格文件名

if (rastDataset == null) {

Console.WriteLine(\

return; }

5、如何读取栅格数据的属性和遍历栅格数据

栅格数据的属性包括栅格大小,行数,列数,投影信息,栅格范围等等,见下面代码

(假设当前加载的栅格文件栅格值存储方式为:UShort类型)

IRasterProps rasterProps = (IRasterProps)clipRaster;

int dHeight = rasterProps.Height;//当前栅格数据集的行数

int dWidth = rasterProps.Width; //当前栅格数据集的列数

double dX = rasterProps.MeanCellSize().X; //栅格的宽度

double dY = rasterProps.MeanCellSize().Y; //栅格的高度

IEnvelope extent=rasterProps.Extent; //当前栅格数据集的范围

rstPixelType pixelType=rasterProps.PixelType; //当前栅格像素类型

IPnt pntSize = new PntClass();

pntSize.SetCoords(dX, dY);

IPixelBlock pixelBlock = clipRaster.CreatePixelBlock(pntSize);

IPnt pnt = new PntClass();

for (int i = 0; i < dHeight; i++)

for (int j = 0; j < dWidth; j++) {

pnt.SetCoords(i, j);

clipRaster.Read(pnt, pixelBlock);

if (pixelBlock != null) {

object obj = pixelBlock.GetVal(0, 0, 0);

MessageBox.Show( Convert.ToUInt32(obj).ToString()); } }

6、如何提取指定的范围的栅格数据

提取指定范围内的栅格数据通常用两种方法IRasterLayerExport(esriCarto), IExtractionOp, IExtractionOp2 (esriSpatialAnalyst),IRasterLayerExport接口提供的栅格数据提取功能有限,只能以矩形范围作为提取范围,而IExtractionOp接口提供了多边形,圆,属性,矩形等几种形式作为提取栅格数据.

1).IRasterLayerExport接口

IRasterLayerExport rLayerExport = new RasterLayerExportClass();

rLayerExport.RasterLayer = rasterLayer;// rasterLayer指当前加载的栅格图层

rLayerExport.Extent = clipExtent;//clipExtent指提取栅格数据的范围

if (proSpatialRef != null)

rLayerExport.SpatialReference = proSpatialRef;// proSpatialRef当前栅格数据的投影信息

IWorkspaceFactory pWF = new RasterWorkspaceFactoryClass(); try {

IWorkspace pRasterWorkspace = pWF.OpenFromFile(_folder, 0);// _folder指栅格文件保存路径

IRasterDataset outGeoDataset = rLayerExport.Export(pRasterWorkspace, code, strRasterType);

//调用ISaveAs接口将导出的数据集保存

????????.. }

Catch(Exception ex) {

Throw new Argumention(ex.Message); }

2.IExtractionOp接口(调用此接口前,应该先检查空间许可)

IExtractionOp extraction = new RasterExtractionOpClass(); try {

IGeoDataset geoDataset = extraction.Rectangle((IGeoDataset)clipRaster, clipExtent, true);

IRaster raster = geoDataset as IRaster;

if (raster != null) {

IWorkspaceFactory WF = new RasterWorkspaceFactoryClass();

IWorkspace rasterWorkspace = WF.OpenFromFile(_folder, 0);

ISaveAs saveAs = (ISaveAs)raster;

saveAs.SaveAs(“Result.tif”, rasterWorkspace, \ } }

catch (Exception ex) {

MessageBox..Show(Ex.message); }

7.栅格数据重采样

栅格数据的重采样主要基于三种方法:最邻近采样(NEAREST),双线性

ILINEAR)和三次卷积采样(CUBIC)。

(1).最邻近采样:它用输入栅格数据中最临近栅格值作为输出值。因此,在重采

样后的输出栅格中的每个栅格值, 都是输入栅格数据中真实存在而未加任何改变的值。这种方法简单易用,计算量小,重采样的速度最快。

(2).双线性采样:此重采样法取待采样点(x,y)点周围四个邻点,在y方向(或X方向)内插两次,再在x方向(或y方向)内插一次,得到(x,y)点的栅格值。

(3).三次卷积采样:这是进一步提高内插精度的一种方法。它的基本思想是增加邻点来获

得最佳插值函数。取待计算点周围相邻的16个点,与双线性采样类似,可先在某一方向上内插,如先在x方向上,每四个值依次内插四次,再根据四次的计算结果在y方上内插,最终得到内插结果

代码示例:采用双线性采样

IRasterGeometryProc rasterGeometryProc = new RasterGeometryProcClass();

rasterGeometryProc.Resample(rstResamplingTypes.RSP_CubicConvolution, newCellSize, clipRaster);

栅格数据重分类 (2009-01-10 10:10:09) 标签:栅格 重分类 分类:AE二次开发

public static IRasterLayer SetViewShedRenderer(IRaster pInRaster,string sField,string sPath) {

IRasterDescriptor pRD = new RasterDescriptorClass(); pRD.Create(pInRaster, new QueryFilterClass(), sField); IReclassOp pReclassOp = new RasterReclassOpClass(); IGeoDataset pGeodataset=pInRaster as IGeoDataset;

IRasterAnalysisEnvironment pEnv = pReclassOp as IRasterAnalysisEnvironment; IWorkspaceFactory pWSF=new RasterWorkspaceFactoryClass(); IWorkspace pWS = pWSF.OpenFromFile(sPath, 0); pEnv.OutWorkspace = pWS; object objSnap = null;

object objExtent = pGeodataset.Extent;

pEnv.SetExtent(esriRasterEnvSettingEnum.esriRasterEnvValue, ref objExtent, ref objSnap); pEnv.OutSpatialReference = pGeodataset.SpatialReference; IRasterLayer pRLayer = new RasterLayerClass();

IRasterBandCollection pRsBandCol = pGeodataset as IRasterBandCollection; IRasterBand pRasterBand = pRsBandCol.Item(0); pRasterBand.ComputeStatsAndHist();

IRasterStatistics pRasterStatistic = pRasterBand.Statistics; double dMaxValue = pRasterStatistic.Maximum ; double dMinValue = pRasterStatistic.Minimum ;

INumberRemap pNumRemap = new NumberRemapClass(); pNumRemap.MapRange(dMinValue, 0, 0); pNumRemap.MapRange(0, dMaxValue, 1); IRemap pRemap = pNumRemap as IRemap;

IRaster pOutRaster = pReclassOp.ReclassByRemap(pGeodataset, pRemap, false) as IRaster ; pRLayer.CreateFromRaster(pOutRaster);

return pRLayer; }

栅格图层和矢量图层的属性表浏览 if (pLyr is IFeatureLayer)

{

DataTable pTable = new DataTable();

IFeatureLayer pFealyr = pLyr as IFeatureLayer; IFeatureClass pFCls = pFealyr.FeatureClass; string shape = \

if (pFCls.ShapeType == esriGeometryType.esriGeometryPoint) shape = \

else if (pFCls.ShapeType == esriGeometryType.esriGeometryPolyline) shape = \

else if (pFCls.ShapeType == esriGeometryType.esriGeometryPolygon) shape = \

for (int i = 0; i < pFCls.Fields.FieldCount; i++) {

pTable.Columns.Add(pFCls.Fields.get_Field(i).Name); }

IFeatureCursor pCursor = pFCls.Search(null, false); int ishape = pFCls.Fields.FindField(\ IFeature pFea = pCursor.NextFeature(); while (pFea != null) {

DataRow pRow = pTable.NewRow();

for (int i = 0; i < pFCls.Fields.FieldCount; i++) {

if (i == ishape) {

pRow[i] = shape; continue; }

pRow[i] = pFea.get_Value(i).ToString(); }

pTable.Rows.Add(pRow); pFea = pCursor.NextFeature(); }

dataGridView1.DataSource = pTable; }

else if (pLyr is IRasterLayer) {

IRasterLayer pRlyr = pLyr as IRasterLayer; IRaster pRaster = pRlyr.Raster;

IRasterProps pProp = pRaster as IRasterProps; pProp.PixelType = rstPixelType.PT_LONG; if (pProp.PixelType == rstPixelType.PT_LONG) {

IRasterBandCollection pBcol = pRaster as IRasterBandCollection; IRasterBand pBand = pBcol.Item(0); ITable pRTable = pBand.AttributeTable;

DataTable pTable = new DataTable();

for (int i = 0; i < pRTable.Fields.FieldCount; i++)

pTable.Columns.Add(pRTable.Fields.get_Field(i).Name);

ICursor pCursor= pRTable.Search(null, false); IRow pRrow= pCursor.NextRow(); while (pRrow != null) {

DataRow pRow = pTable.NewRow();

for (int i =0 ;i

pRow[i] = pRrow.get_Value(i).ToString () ; }

pTable.Rows.Add(pRow); pRrow = pCursor.NextRow(); }

dataGridView1.DataSource = pTable; } }

创建栅格数据集 (2008-04-20 14:14:05)

标签:arcgis engine c# 代码 it 分类:三文鱼的GIS

关键词:创建栅格数据集 IRasterWorkspace2 IRasterDataset CreateRasterDataset C#

public IRasterDataset CreateFileRasterDataset(string directoryName, string fileName) {

// This function creates a new img file in the given workspace // and then assigns pixel values try {

IRasterDataset rasterDataset = null; IPoint originPoint = new PointClass(); originPoint.PutCoords(0, 0);

// Create the dataset

IRasterWorkspace2 rasterWorkspace2 = null;

rasterWorkspace2 = CreateRasterWorkspace(directoryName);

rasterDataset = rasterWorkspace2.CreateRasterDataset(fileName, \200, 100, 1, 1, 1, rstPixelType.PT_UCHAR, new UnknownCoordinateSystemClass(), true);

IRawPixels rawPixels = null; IPixelBlock3 pixelBlock3 = null; IPnt pixelBlockOrigin = null; IPnt pixelBlockSize = null;

IRasterBandCollection rasterBandCollection; IRasterProps rasterProps;

// QI for IRawPixels and IRasterProps

rasterBandCollection = (IRasterBandCollection)rasterDataset; rawPixels = (IRawPixels)rasterBandCollection.Item(0); rasterProps = (IRasterProps)rawPixels;

// Create pixelblock

pixelBlockOrigin = new DblPntClass(); pixelBlockOrigin.SetCoords(0, 0);

pixelBlockSize = new DblPntClass();

pixelBlockSize.SetCoords(rasterProps.Width, rasterProps.Height);

pixelBlock3 = (IPixelBlock3)rawPixels.CreatePixelBlock(pixelBlockSize);

// Read pixelblock

rawPixels.Read(pixelBlockOrigin, (IPixelBlock)pixelBlock3);

// Get pixeldata array

System.Object[,] pixelData;

pixelData = (System.Object[,])pixelBlock3.get_PixelDataByRef(0);

// Loop through all the pixels and assign value for (int i = 0; i < rasterProps.Width; i++) for (int j = 0; j < rasterProps.Height; j++) pixelData[i, j] = (i * j) % 255;

// Write the pixeldata back System.Object cachePointer;

cachePointer = rawPixels.AcquireCache();

rawPixels.Write(pixelBlockOrigin, (IPixelBlock)pixelBlock3);

rawPixels.ReturnCache(cachePointer);

// Return raster dataset return rasterDataset; }

catch (Exception ex) {

System.Diagnostics.Debug.WriteLine(ex.Message); return null; } }

public IRasterWorkspace2 CreateRasterWorkspace(string pathName) {

// Create RasterWorkspace

IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactoryClass();

return workspaceFactory.OpenFromFile(pathName, 0) as IRasterWorkspace2; }

public IRasterDataset tin2raster(string tempBathyTIN,string geoPath, string gridName) {

string tinFolder = System.IO.Path.GetDirectoryName(tempBathyTIN); string tinName = System.IO.Path.GetFileName(tempBathyTIN); IRasterDataset rasterDataset = new RasterDatasetClass(); try {

string rasterPath = System.IO.Path.GetDirectoryName(geoPath); IWorkspaceFactory TinWF = new TinWorkspaceFactory();

ITinWorkspace TinWK = TinWF.OpenFromFile(tinFolder,0)as ITinWorkspace; ITinAdvanced2 tinAd = TinWK.OpenTin(tinName) as ITinAdvanced2; IEnvelope extent = tinAd.Extent;

IPoint origin = extent.LowerLeft; origin.X = origin.X - (5 * 0.5); origin.Y = origin.Y - (5 * 0.5);

int nCol = (int)Math.Round(extent.Width / 5) + 1; int nRow = (int)Math.Round(extent.Height / 5) +1;

ISpatialReference2 spatialRef = (ISpatialReference2)extent.SpatialReference;

IWorkspaceFactory rasterWF = new RasterWorkspaceFactoryClass();

IRasterWorkspace2 workSpace = (IRasterWorkspace2)rasterWF.OpenFromFile(rasterPath,0);

rasterDataset = workSpace.CreateRasterDataset(gridName, \origin,nCol,nRow,5,5,1,ESRI.ArcGIS.Geodatabase.rstPixelType.PT_FLOAT, spatialRef,true);

IRasterBandCollection bandColl = (IRasterBandCollection) rasterDataset; IRasterBand rasterBand = bandColl.Item(0); IRawPixels rawPixels = (IRawPixels)rasterBand; IPnt blockSize = new DblPntClass(); blockSize.X = nCol; blockSize.Y = nRow;

IPixelBlock3 pixelBlock = (IPixelBlock3)rawPixels.CreatePixelBlock(blockSize); ITinSurface tinSurface = (ITinSurface)tinAd;

IRasterProps rasterProps = (IRasterProps)rawPixels; object nodataFloat; //long nodataInt;

object val = pixelBlock.get_PixelDataByRef(0); MessageBox.Show(val.ToString()); double cellsize = 5;

origin.X = origin.X + (5 * 0.5);

origin.Y = origin.Y + (5 * nRow) - (5 * 0.5);

nodataFloat = Convert.ToDouble(rasterProps.NoDataValue.ToString());

tinSurface.QueryPixelBlock(origin.X,origin.Y,cellsize,cellsize,esriRasterizationType.esriElevationAsRaster,nodataFloat,val);

IPnt offset = new DblPntClass(); offset.X = 0; offset.Y = 0;

rawPixels.Write(offset,pixelBlock as IPixelBlock); }

catch(Exception ex) {

MessageBox.Show(ex.ToString()); }

return rasterDataset; }

用IMapAlgebraOp进行地图代数,老是出错,help!

在用用IMapAlgebraOp进行地图代数的时候,在到红色的代码的时候,老是出现“GRID ERROR - Unable to open the input grid: D:\\矢量图\\FJ8\\PENGTANG+D:\\矢量图

\\FJ8\\PODU+D:\\矢量图\\FJ8\\BIANJIE22

Error in executing grid expression”,我里面的三个栅格图都是用shp文件转过来的,

cell的大小都设的一样的,都是35.

我觉得数据应该不会错,下面的代码出错在什么地方呢?请大家帮我看看啊,谢谢了。

IMap map = MainMap.ActiveView.FocusMap; ILayer layer1 = map.get_Layer(0); ILayer layer2 = map.get_Layer(1); ILayer layer3 = map.get_Layer(2);

IRasterLayer rasterlayer1 = layer1 as IRasterLayer; IRasterLayer rasterlayer2 = layer2 as IRasterLayer; IRasterLayer rasterlayer3 = layer3 as IRasterLayer;

IRaster pRaster1 = rasterlayer1.Raster;//获取已知栅格图层pRasLyr的

栅格对象

IRaster pRaster2 = rasterlayer2.Raster; IRaster pRaster3 = rasterlayer3.Raster;

IGeoDataset tempGeodata1 = pRaster1 as IGeoDataset;//featureclass应

该一样,受到启发

IGeoDataset tempGeodata2 = pRaster2 as IGeoDataset; IGeoDataset tempGeodata3 = pRaster3 as IGeoDataset; IMapAlgebraOp rsalgebra = new RasterMapAlgebraOpClass();

//设置栅格运算空间

IRasterAnalysisEnvironment rasAnaEnv =

(IRasterAnalysisEnvironment)rsalgebra;

IWorkspaceFactory wsf = new RasterWorkspaceFactoryClass();

IWorkspace ws = wsf.OpenFromFile(\矢量图

[url=file://\\\\FJ8]\\\\FJ8[/url]\

rasAnaEnv.OutWorkspace = ws; rsalgebra.BindRaster(tempGeodata1, \ rsalgebra.BindRaster(tempGeodata2, \ rsalgebra.BindRaster(tempGeodata3, \

IGeoDataset outGeoDataset = rsalgebra.Execute( \

IRasterLayer pCreatRslyr = new RasterLayerClass(); pCreatRslyr.CreateFromRaster((IRaster)outGeoDataset);

MainMap.AddLayer(pCreatRslyr);

本文来自CSDN博客,转载http://blog.csdn.net/bmoon/archive/2009/03/09/3974311.aspx

谢谢楼上的两位,我已经找到答案了发现

这句代码 IGeoDataset outGeoDataset = rsalgebra.Execute( \应该改成 IGeoDataset outGeoDataset = rsalgebra.Execute( \

表达式[1],[2],[3]之间应该有空格,都怪自己太马虎了,ESRI也真是的,为什么要设计成中间有空格的呢?

,不过有可能,esri这么设计有他自己的道理吧。

请标明出处:

,在仔仔细细的研究了帮助的自带的例子之后,我

話說今天有人問我關於影像 Raster 計算問題.. 給偶了一串很長的公式, 問我要怎麼方便計算..

像 10 - ( ALayer * BLayer ) / CLayer + DLayer * 0.11 + tan ( ELayer ) * cos ( FLayer )

偶就跟他說用 Spatial Analysis 中的 Raster Calculator 的方式去計算就 ok 了ㄚ.

可是對方跟偶說是要動態的, 要去設計視窗給 user 作. 圖層不一定.. 好吧.. 就想說之前有作過 透過 MathOp 的方式來設計這串公式.

之前偷是透過 MathOp 這個 function 搞 Times 乘 Plus 加, 當然也有 Tan , Cos 等三角函數...

由於 MathOp 的參數都是兩個 GeoDataSet 的物件, 針對於 10 參數的話.. 一種就是建一個 const 為 10 的 Raster 資料.. 再去加減.. 或是透過 IPixelBlock 的方式去計算影像的資料..

搞的規模很龐大.. 搞的天昏地案日月無光. 搞的一個頭兩個大... 程式就越寫越多. function 就越搞越雜.. 寫個漏漏長的幾千行程式後發現.... 發現....

底下是很笨很笨的下去慢慢算..

Dim pMathOp As IMathOp

Set pMathOp = New RasterMathOps

Dim pResultDataset As IGeoDataset

Set pResultDataset = New RasterDataset

Set pResultDataset = pMathOp.Times(pRMLayer.Raster, pKMLayer.Raster)

Set pResultDataset = pMathOp.Div(pResultDataset, pSLayer.Raster) Set pResultDataset = pMathOp.ATan(pResultDataset)

然後針對那些參數的加減乘除..

Public Function RasterParamCalc(pResultDataset As IGeoDataset, ctype As String, fnum As Double) As IGeoDataset

Dim pTmpLayer As IRasterLayer Set pTmpLayer = New RasterLayer

pTmpLayer.CreateFromRaster pResultDataset

Dim pRasProps As IRasterProps

Set pRasProps = pTmpLayer.Raster

Dim pPB As IPixelBlock3 Dim pPnt As IPnt Set pPnt = New Pnt

pPnt.SetCoords pRasProps.Width, pRasProps.Height Set pPB = pTmpLayer.Raster.CreatePixelBlock(pPnt)

If pPB Is Nothing Then

MsgBox \影像資料無法取得PixelBlock..\

Exit Function End If

'Dim pRawPixels As IRawPixels pPnt.X = 0 pPnt.Y = 0

pTmpLayer.Raster.Read pPnt, pPB

Dim v As Variant v = pPB.PixelData(0) Dim m, n As Integer

For m = 0 To pPB.Width - 1 For n = 0 To pPB.Height - 1

If (v(m, n) < 65535 And v(m, n) > -65535) Then

If ctype = \Then Set v(m, n) = v(m, n) + CDbl(fnum) If ctype = \Then Set v(m, n) = v(m, n) - CDbl(fnum) If ctype = \Then v(m, n) = v(m, n) * CDbl(fnum) If ctype = \Then v(m, n) = v(m, n) / CDbl(fnum)

End If Next n Next m

pPB.PixelData(0) = v Set v = Nothing

'Write the pixel block with a (0,0) offset of the upper left corner Dim pRasterEdit As IRasterEdit

Set pRasterEdit = pTmpLayer.Raster

If pRasterEdit Is Nothing Then

MsgBox \影像資料無法取得編輯狀態..\

Exit Function End If

pPnt.X = 0 pPnt.Y = 0

pRasterEdit.Write pPnt, pPB

Set RasterParamCalc = pRasterEdit

Set pTmpLayer = Nothing Set pRasProps = Nothing Set pPB = Nothing Set pPnt = Nothing Set v = Nothing

Set pRasterEdit = Nothing

End Function

忙了好好好好長的一陣子後發現.. 有個神奇的 IMapAlgebraOp 就像 RatserCalculate 可以直接就給他算下企... 天ㄚ.. 我是在作啥...

Dim pMapAlgebraOp As IMapAlgebraOp

Set pMapAlgebraOp = New RasterMapAlgebraOp

pMapAlgebraOp.BindRaster pALayer, \ pMapAlgebraOp.BindRaster pBLayer, \ pMapAlgebraOp.BindRaster pCLayer, \

pMapAlgebraOp.BindRaster pELayer, \ pMapAlgebraOp.BindRaster pFLayer, \

Dim pCalcDS As IGeoDataset

Set pCalcDS = New RasterDataset

Set pCalcDS = pMapAlgebraOp.Execute(

\1 + ( [A] / ( ( [E] + 10 ) * [I] * [D] * Cos([F]) * ATan( [B])) \

C#代码:

private void RasterCaculator(string path) {

IMap map = MainMap.ActiveView.FocusMap; ILayer layer1 = map.get_Layer(0); ILayer layer2 = map.get_Layer(1); ILayer layer3 = map.get_Layer(2); ILayer layer4 = map.get_Layer(3); ILayer layer5 = map.get_Layer(4);

IRasterLayer rasterlayer1 = layer1 as IRasterLayer; IRasterLayer rasterlayer2 = layer2 as IRasterLayer; IRasterLayer rasterlayer3 = layer3 as IRasterLayer; IRasterLayer rasterlayer4 = layer4 as IRasterLayer; IRasterLayer rasterlayer5 = layer5 as IRasterLayer;

IRaster pRaster1 = rasterlayer1.Raster;//获得已知栅格图层pRasterLyr的栅格对象

IRaster pRaster2 = rasterlayer2.Raster; IRaster pRaster3 = rasterlayer3.Raster; IRaster pRaster4 = rasterlayer4.Raster; IRaster pRaster5 = rasterlayer5.Raster;

IGeoDataset tempGeodata1 = pRaster1 as IGeoDataset;// IGeoDataset tempGeodata2 = pRaster2 as IGeoDataset; IGeoDataset tempGeodata3 = pRaster3 as IGeoDataset; IGeoDataset tempGeodata4 = pRaster4 as IGeoDataset; IGeoDataset tempGeodata5 = pRaster5 as IGeoDataset;

IMapAlgebraOp rsalgebra = new RasterMapAlgebraOpClass(); //设置栅格运算空间

IRasterAnalysisEnvironment rasAnaEnv = (IRasterAnalysisEnvironment)rsalgebra;

IWorkspaceFactory wsf = new RasterWorkspaceFactoryClass(); IWorkspace ws=wsf.OpenFromFile(\设置输出空间 rasAnaEnv.OutWorkspace = ws;

rsalgebra.BindRaster(tempGeodata1, \ rsalgebra.BindRaster(tempGeodata2, \ rsalgebra.BindRaster(tempGeodata3, \ rsalgebra.BindRaster(tempGeodata4, \ rsalgebra.BindRaster(tempGeodata5, \

IGeoDataset outGetDataset=rsalgebra.Execute(\* [2] * [3] * [4] * [5]\

IRasterLayer pCreatRalyr=new RasterLayerClass(); pCreatRalyr.CreateFromRaster((IRaster)outGetDataset); MainMap.AddLayer(pCreatRalyr); }

1. IRaster pRaster = pRasLyr.Raster; //获取已知栅格图层pRasLyr的栅格对象

2. IGeoDataset tempGeodata = pRaster as IGeoDataset;

3. IMapAlgebraOp rsalgebra = new RasterMapAlgebraOpClass();

4. //设置栅格运算空间

5. IRasterAnalysisEnvironment rasAnaEnv = (IRasterAnalysisEnvironment)rsalgebra;

6. IWorkspaceFactory wsf = new RasterWorkspaceFactoryClass();

7. IWorkspace ws = wsf.OpenFromFile(\g\

8. rasAnaEnv.OutWorkspace = ws;

9. rsalgebra.BindRaster(tempGeodata, \;

10. //进行栅格运算,height为已知的整型数据,用来确定高度

11. string Opstr = \ng();

12. IGeoDataset outGeoDataset = rsalgebra.Execute( Opstr ); 13.

14. IRasterLayer pCreatRslyr = new RasterLayerClass();

15. pCreatRslyr.CreateFromRaster((IRaster)outGeoDataset);

16. RasterRender(ref pCreatRslyr); //对生成的栅格图层进行渲染,是满足要求的按一个颜色显示,不满足要求的栅格不显示

17. m_map.AddLayer(pCreatRslyr);

18. //

19. //栅格图的渲染 20. //

21. public void RasterRender(ref IRasterLayer pRasterLayer)

22. {

23. int NumOfClass = 2; 24. IRaster pRaster;

25. pRaster = pRasterLayer.Raster; 26.

27. //Create classfy renderer and QI RasterRenderer interface

28. IRasterClassifyColorRampRenderer pClassRen = new RasterClassifyColorRampRendererClass(); 29.

30. IRasterRenderer pRasRen = pClassRen as IRasterRenderer;

31. pRasRen.Raster = pRaster; 32. //字串5

33. //Set raster for the render and update 34.

35. pClassRen.ClassCount = NumOfClass; 36. 37.

38. pRasRen.Update(); 39.

40. // Create a color ramp to use

41. IAlgorithmicColorRamp pRamp = new AlgorithmicColorRamp(); 42.

43. pRamp.Size = NumOfClass;

44. IRgbColor pFColor = new RgbColorClass(); 45. IRgbColor pTColor = new RgbColorClass(); 46. 47.

48. pFColor.NullColor = true; 49. pTColor.RGB = 100; 50.

51. pRamp.FromColor = pFColor; 52. pRamp.ToColor = pTColor; 53. bool ok = true;

54. pRamp.CreateRamp(out ok); 55.

56. // Create symbol for the classes 字串2

57. IFillSymbol pFSymbol = new SimpleFillSymbolClass(); 58. 59. 60.

61. //Update the renderer and plug into layer 62. pFSymbol.Color = pFColor;

63. ISymbol pSmbol1 = pFSymbol as ISymbol; 64. pClassRen.set_Symbol(0, pSmbol1); 65. pFSymbol.Color = pTColor;

66. ISymbol pSmbol2 = pFSymbol as ISymbol; 67. pClassRen.set_Symbol(1, pSmbol2); 68. pRasRen.Update(); 69.

70. pRasterLayer.Renderer = pClassRen as IRasterRenderer;

71. }

devgis 2011-3-16 15:48:47

AE中闪烁要素的方两种方法

http://www.gisdn.net/forum.php?mod=viewthread&tid=219&fromuid=3 AE中的游标Cursor

http://www.gisdn.net/forum.php?mod=viewthread&tid=234&fromuid=3 实现得到pagelayoutControl关联的mxd文档,并删除其中的最顶端图 http://www.gisdn.net/forum.php?mod=viewthread&tid=221&fromuid=3 ArcGIS-导出为栅格地图

http://www.gisdn.net/forum.php?mod=viewthread&tid=220&fromuid=3 ArcGIS-导出为矢量数据

http://www.gisdn.net/forum.php?mod=viewthread&tid=218&fromuid=3 ArcEngine 图例C#源码:

http://www.gisdn.net/forum.php?mod=viewthread&tid=217&fromuid=3 ArcEngine开发之Command控件使用篇

http://www.gisdn.net/forum.php?mod=viewthread&tid=216&fromuid=3 导出透明背景色图片

http://www.gisdn.net/forum.php?mod=viewthread&tid=215&fromuid=3 arengine 点到直线的距离

http://www.gisdn.net/forum.php?mod=viewthread&tid=214&fromuid=3 TOC图例符号转换到ListView

http://www.gisdn.net/forum.php?mod=viewthread&tid=213&fromuid=3 ArcEngine 预览矢量图层渲染样式

http://www.gisdn.net/forum.php?mod=viewthread&tid=212&fromuid=3 ArcEngine 反距离权重插值法计算简单地面高程

http://www.gisdn.net/forum.php?mod=viewthread&tid=211&fromuid=3 ArcEngine序列化矢量图层的标注属性

http://www.gisdn.net/forum.php?mod=viewthread&tid=210&fromuid=3 在ArcEngine中创建内存图层

http://www.gisdn.net/forum.php?mod=viewthread&tid=209&fromuid=3 arcengine C# 按行政区范围加载图层数据

http://www.gisdn.net/forum.php?mod=viewthread&tid=182&fromuid=3 AE中图层刷新

http://www.gisdn.net/forum.php?mod=viewthread&tid=180&fromuid=3 ArcSDE常用操作命令

http://www.gisdn.net/forum.php?mod=viewthread&tid=157&fromuid=3 ArcGIS Engine+最短路径分析(C#源码)

http://www.gisdn.net/forum.php?mod=viewthread&tid=153&fromuid=3 从空间数据库获取数据,生成MXD文件

http://www.gisdn.net/forum.php?mod=viewthread&tid=152&fromuid=3 ArcGIS+Engine二次开发常用源代码

http://www.gisdn.net/forum.php?mod=viewthread&tid=143&fromuid=3 C#写的ArcSDE连接添加Feature的类

http://www.gisdn.net/forum.php?mod=viewthread&tid=142&fromuid=3 Arcgis开发集锦

http://www.gisdn.net/forum.php?mod=viewthread&tid=141&fromuid=3 arcgis关于sde的操作

http://www.gisdn.net/forum.php?mod=viewthread&tid=140&fromuid=3 基于SketchUp和ArcGIS的三维GIS开发技术研究

http://www.gisdn.net/forum.php?mod=viewthread&tid=139&fromuid=3 符号及专题图使用说明

http://www.gisdn.net/forum.php?mod=viewthread&tid=138&fromuid=3 ArcEngine入门开发教程-VB语言编写

http://www.gisdn.net/forum.php?mod=viewthread&tid=88&fromuid=3 ArcGIS Engine轻松入门-初学者资料

http://www.gisdn.net/forum.php?mod=viewthread&tid=87&fromuid=3

IRaster pRaster = pRasLyr.Raster; //获取已知栅格图层pRasLyr的栅格对象 IGeoDataset tempGeodata = pRaster as IGeoDataset; IMapAlgebraOp rsalgebra = new RasterMapAlgebraOpClass(); //设置栅格运算空间 IRasterAnalysisEnvironment rasAnaEnv

(IRasterAnalysisEnvironment)rsalgebra;

IWorkspaceFactory wsf = new RasterWorkspaceFactoryClass(); IWorkspace ws = wsf.OpenFromFile(\ rasAnaEnv.OutWorkspace = ws;

rsalgebra.BindRaster(tempGeodata, \ //进行栅格运算,height为已知的整型数据,用来确定高度 string Opstr = \ IGeoDataset outGeoDataset = rsalgebra.Execute( Opstr );

IRasterLayer pCreatRslyr = new RasterLayerClass();

=

pCreatRslyr.CreateFromRaster((IRaster)outGeoDataset);

RasterRender(ref pCreatRslyr); //对生成的栅格图层进行渲染,是满足要求的按一个颜色显示,不满足要求的栅格不显示

m_map.AddLayer(pCreatRslyr); //

//栅格图的渲染 //

public void RasterRender(ref IRasterLayer pRasterLayer) {

int NumOfClass = 2; IRaster pRaster;

pRaster = pRasterLayer.Raster;

//Create classfy renderer and QI RasterRenderer interface IRasterClassifyColorRampRenderer pClassRen

=

RasterClassifyColorRampRendererClass();

IRasterRenderer pRasRen = pClassRen as IRasterRenderer; pRasRen.Raster = pRaster; //字串5

//Set raster for the render and update

pClassRen.ClassCount = NumOfClass;

pRasRen.Update();

// Create a color ramp to use

IAlgorithmicColorRamp pRamp = new AlgorithmicColorRamp();

pRamp.Size = NumOfClass;

IRgbColor pFColor = new RgbColorClass(); IRgbColor pTColor = new RgbColorClass();

pFColor.NullColor = true; pTColor.RGB = 100;

pRamp.FromColor = pFColor; pRamp.ToColor = pTColor; bool ok = true;

pRamp.CreateRamp(out ok);

// Create symbol for the classes 字串2

new

IFillSymbol pFSymbol = new SimpleFillSymbolClass();

//Update the renderer and plug into layer pFSymbol.Color = pFColor;

ISymbol pSmbol1 = pFSymbol as ISymbol; pClassRen.set_Symbol(0, pSmbol1); pFSymbol.Color = pTColor;

ISymbol pSmbol2 = pFSymbol as ISymbol; pClassRen.set_Symbol(1, pSmbol2); pRasRen.Update();

pRasterLayer.Renderer = pClassRen as IRasterRenderer; }

Dim pRemap As IRemap

Dim pNumRemap As INumberRemap Set pNumRemap = New NumberRemap

pNumRemap.MapRange 0, 2, 1 pNumRemap.MapRange 2, 6, 2 pNumRemap.MapRange 6, 15, 3 pNumRemap.MapRange 15, 25, 4 pNumRemap.MapRange 25, 90, 5

Set pRemap = pNumRemap

Dim pOutReClassRaster As IRaster ' pOutReClassRaster 分类后的Raster

Set pOutReClassRaster = pReClass.ReclassByRemap(pGeoDs, pRemap, False) data to be NoData

missing 'the

本文来源:https://www.bwwdw.com/article/3kqp.html

Top