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 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
正在阅读:
raster04-15
历年中级会计师考试《会计实务》真题及答案解析(2014-2015-2016)10-10
matlab遗传算法优化神经网络权值教程 - 图文06-04
范文七年年级上学期英语期中试题04-08
抚顺特殊钢08-09
《物质在水中是怎样溶解的》教案09-10
高三物理创新设计与新情景问题03-20
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 微机原理与接口技术模拟卷 - 答案
- 《古今贤文》六篇
- 清华博士王世文致潍坊市长徐立全公开信
- 团队建立训练成效之评估
- 《雅舍》课堂实录(江苏省仪征中学刘祥)
- 南京财经大学政治经济学练习册及答案
- 工程测量试卷
- 总结7-储层裂缝研究之二 - 图文
- 阳煤集团机电设备外委修理管理办法
- 4-2-2三角形等高模型与鸟头模型 题库学生版
- 思想道德修养与法律基础课试题及答案
- c++课后实验题
- 第二节 燃烧的类型与特点
- 唐崇怀 13神死神学的反论
- 比较《海牙规则》、《汉堡规则》和《鹿特丹规则》
- 年产100000吨1#锌电解锌的锌电解沉积系统课程设计
- 工程量计算规则及单价说明
- 历年考研数学真题及答案(2003-2013)
- 《交通运输企业安全生产标准化》继续教育复习题(史上最全)
- 《汽车设计》复习思考题答案 - 图文