阅读:2349回复:1
arcengine中如何实现spatial analyst 的raster calculator功能
<P>arcengine中如何实现spatial analyst 的raster calculator功能? </P>
<P>目的是将多个栅格图层乘系数后相加.</P> |
|
1楼#
发布于:2006-07-26 16:01
<P>仔细看看下面的例子你就会写了:</P>
<P>Sub RasterModel()<BR> 'Get the focused map from MapDocument<BR> Dim pMxDoc As IMxDocument<BR> Dim pMap As IMap<BR> Set pMxDoc = ThisDocument<BR> Set pMap = pMxDoc.FocusMap<BR><BR> 'Get the input raster from the first layer in ArcMap<BR> Dim pLayer As ILayer<BR> Set pLayer = pMap.Layer(0)<BR> If Not TypeOf pLayer Is IRasterLayer Then<BR> Exit Sub<BR> End If<BR><BR> Dim pRasLayer As IRasterLayer<BR> Set pRasLayer = pLayer<BR> Dim pInRaster As IRaster<BR> Set pInRaster = pRasLayer.Raster<BR><BR> 'Create a RasterModel object<BR> Dim pRasModel As IRasterModel<BR> Set pRasModel = New RasterModel<BR><BR> 'Set output workspace in the analysis environment<BR> Dim pEnv As IRasterAnalysisEnvironment<BR> Set pEnv = pRasModel<BR><BR> Dim pWS As IWorkspace<BR> Dim pWSF As IWorkspaceFactory<BR> Set pWSF = New RasterWorkspaceFactory<BR> Set pWS = pWSF.OpenFromFile("c:\temp", 0)<BR> Set pEnv.OutWorkspace = pWS<BR><BR> 'Bind the input raster<BR> pRasModel.BindRaster pInRaster, "input1"<BR><BR> 'Specify map algebra expression, use vbLf to create seperate lines<BR> <FONT color=#f70909>pRasModel.Script = "[out1] = [input1] + 50" + vbLf + _<BR> "[out2] = Slice([out1], Eqinterval, 5)" + vbLf + _<BR> "[out3] = [out1] + 100 * [out2]"</FONT><BR><BR> 'Execute map algebra expression(s)<BR> <FONT color=#ff0000>pRasModel.Execute</FONT><BR><BR> 'Get output rasters<BR> Dim pOutRaster1 As IRaster<BR> Set pOutRaster1 = pRasModel.BoundRaster("out1")<BR><BR> Dim pOutRaster2 As IRaster<BR> Set pOutRaster2 = pRasModel.BoundRaster("out2")<BR><BR> Dim pOutRaster3 As IRaster<BR> Set pOutRaster3 = pRasModel.BoundRaster("out3")<BR><BR> 'Unbind input raster<BR> pRasModel.UnbindSymbol "input1"<BR><BR> 'Add outputs into ArcMap as raster layers<BR> Dim pOutRasLayer1 As IRasterLayer<BR> Set pOutRasLayer1 = New RasterLayer<BR><BR> pOutRasLayer1.CreateFromRaster pOutRaster1<BR> pMap.AddLayer pOutRasLayer1<BR><BR> Dim pOutRasLayer2 As IRasterLayer<BR> Set pOutRasLayer2 = New RasterLayer<BR><BR> pOutRasLayer2.CreateFromRaster pOutRaster2<BR> pMap.AddLayer pOutRasLayer2<BR><BR> Dim pOutRasLayer3 As IRasterLayer<BR> Set pOutRasLayer3 = New RasterLayer<BR><BR> pOutRasLayer3.CreateFromRaster pOutRaster3<BR> pMap.AddLayer pOutRasLayer3<BR>End Sub<BR></P> |
|