阅读:3273回复:2
AE+VB.NET 实现IDW插值
<br>AE+VB.NET插值 </p>
<p>Public Sub CreateContourListFromShapefile()<br> '用反距离IDW插值生成的栅格图像<br> Dim pInterpolationOp As IInterpolationOp<br> pInterpolationOp = New RasterInterpolationOp<br> ' Create the input point object</p> <p> Dim pFeatureClass As IFeatureClass<br> Dim pFeaturelayer As IFeatureLayer<br> pFeaturelayer = Me.AxMapControl1.Map.Layer(0)<br> pFeatureClass = pFeaturelayer.FeatureClass</p> <p> ' Define the search radius<br> Dim pRadius As IRasterRadius<br> pRadius = New RasterRadiusClass()<br> pRadius.SetVariable(12)</p> <p> 'Create FeatureClassDescriptor using a value field<br> Dim pFCDescriptor As IFeatureClassDescriptor<br> pFCDescriptor = New FeatureClassDescriptor<br> pFCDescriptor.Create(pFeatureClass, Nothing, "GRADE")</p> <p> 'Set cellsize for output raster in the environment<br> Dim dCellSize As Object = 50<br> Dim pEnv As IRasterAnalysisEnvironment<br> pEnv = New RasterAnalysis<br> pEnv = pInterpolationOp<br> pEnv.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, dCellSize)</p> <p> 'Perform the interpolation<br> Dim rasDataset As IGeoDataset<br> rasDataset = pInterpolationOp.IDW(pFCDescriptor, 2, pRadius)<br> Dim pOutRaster As IRaster<br> pOutRaster = rasDataset</p> <p> 'Add output into ArcMap as a raster layer<br> Dim pOutRasLayer As IRasterLayer<br> pOutRasLayer = New RasterLayerClass<br> pOutRasLayer.CreateFromRaster(pOutRaster)<br> Me.AxMapControl1.AddLayer(pOutRasLayer)</p> <p> UsingRasterClassifyColorRampRenderer()</p> <p> End Sub</p> <p>Private Sub UsingRasterClassifyColorRampRenderer() '分级渲染<br> 'Get Map</p> <p> Dim pMap As IMap<br> pMap = Me.AxMapControl1.Map</p> <p> 'Get raster input from layer<br> Dim pRLayer As IRasterLayer<br> pRLayer = pMap.Layer(0)<br> Dim pRaster As IRaster<br> pRaster = pRLayer.Raster</p> <p> 'Create classfy renderer and QI RasterRenderer interface<br> Dim pClassRen As IRasterClassifyColorRampRenderer<br> pClassRen = New RasterClassifyColorRampRenderer<br> Dim pRasRen As IRasterRenderer<br> pRasRen = pClassRen</p> <p> 'Set raster for the render and update<br> pRasRen.Raster = pRaster<br> pClassRen.ClassCount = 10<br> pRasRen.Update()</p> <p> 'Create a color ramp to use<br> Dim pRamp As IAlgorithmicColorRamp<br> pRamp = New AlgorithmicColorRamp<br> pRamp.FromColor = getRGB(255, 255, 128)<br> pRamp.ToColor = getRGB(135, 42, 8)<br> pRamp.Size = 10<br> pRamp.CreateRamp(True)</p> <p> 'Create symbol for the classes<br> Dim pFSymbol As IFillSymbol<br> pFSymbol = New SimpleFillSymbol</p> <p> 'loop through the classes and apply the color and label<br> Dim I As Integer<br> For I = 0 To pClassRen.ClassCount - 1<br> pFSymbol.Color = pRamp.Color(I)<br> pClassRen.Symbol(I) = pFSymbol<br> pClassRen.Label(I) = "等级" ; CStr(I + 1)<br> Next I</p> <p> 'Update the renderer and plug into layer<br> pRasRen.Update()<br> pRLayer.Renderer = pClassRen<br> Me.AxMapControl1.ActiveView.Refresh()<br> Me.AxMapControl1.Update()<br> Me.AxTOCControl1.Update()</p> <p> 'Release memeory</p> <p> pMap = Nothing<br> pRLayer = Nothing<br> pRaster = Nothing<br> pRasRen = Nothing<br> pClassRen = Nothing<br> pRamp = Nothing<br> pFSymbol = Nothing<br> End Sub</p><p>可不可以帮我翻译成AE+C#的谢谢了。<br></p> |
|
1楼#
发布于:2008-09-26 01:44
object objectMaxDistance = null;<br> object objectbarrier = null;<br> IInterpolationOp pInterpolationOp;<br> pInterpolationOp = new RasterInterpolationOpClass();<br><br> IFeatureClass pFeatureClass;<br> IFeatureLayer pFeaturelayer;<br> pFeaturelayer = (IFeatureLayer)axMapControl1.get_Layer(0);<br> pFeatureClass = pFeaturelayer.FeatureClass;<br><br> IRasterRadius pRadius;<br> pRadius = new RasterRadiusClass();<br> pRadius.SetVariable(12,ref objectMaxDistance);<br><br> IFeatureClassDescriptor pFCDescriptor;<br> pFCDescriptor = new FeatureClassDescriptorClass();<br> pFCDescriptor.Create(pFeatureClass,null,"GARDE");<br><br> object dCellSize = 50;<br> IRasterAnalysisEnvironment pEnv;<br> pEnv = new RasterAnalysisClass();<br> pEnv = (IRasterAnalysisEnvironment)pInterpolationOp;<br> pEnv.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue,ref dCellSize);<br><br> IGeoDataset rasDataset;<br> rasDataset = pInterpolationOp.IDW((IGeoDataset)pFCDescriptor, 2, pRadius, ref objectbarrier);<br> IRaster pOutRaster;<br> pOutRaster = (IRaster)rasDataset;<br><br> IRasterLayer pOutRasLayer;<br> pOutRasLayer=new RasterLayerClass();<br> pOutRasLayer.CreateFromRaster(pOutRaster);<br> axMapControl1.AddLayer(pOutRasLayer);<br><br> UsingRasterClassifyColorRampRenderer();<br> }<br> private void UsingRasterClassifyColorRampRenderer()<br> {<br> IMap pMap;<br> pMap= axMapControl1.Map;<br> bool test = true;<br><br> IRasterLayer pRLayer;<br> pRLayer = (IRasterLayer)pMap.get_Layer(0);<br> IRaster pRaster;<br> pRaster=pRLayer.Raster;<br><br> IRasterClassifyColorRampRenderer pClassRen;<br> pClassRen = new RasterClassifyColorRampRendererClass();<br> IRasterRenderer pRasRen;<br> pRasRen = (IRasterRenderer)pClassRen;<br><br> pRasRen.Raster=pRaster;<br> pClassRen.ClassCount=10;<br> pRasRen.Update();<br><br> IAlgorithmicColorRamp pRamp;<br> pRamp=new AlgorithmicColorRampClass();<br> pRamp.FromColor=getRGB(255,255,128); //有问题,说没有getRGB这个名称<br> pRamp.ToColor=getRGB(135,42,8);<br> pRamp.Size=10;<br> pRamp.CreateRamp(out test);<br><br> IFillSymbol pFSymbol;<br> pFSymbol = new SimpleFillSymbolClass();<br><br> int i;<br> for (i = 0; i <= (pClassRen.ClassCount - 1); i++)<br> {<br> pFSymbol.Color = pRamp.get_Color(i);<br> pClassRen.get_Symbol(i) = (ISymbol)pFSymbol; //有错误,左边不能是变量<br> pClassRen.get_Label(i) = "等级" + CStr(i + 1); //没有CStr这个名称<br> }<br><br> pRasRen.Update();<br> pRLayer.Renderer=(IRasterRenderer)pClassRen;<br> axMapControl1.ActiveView.Refresh();<br> axMapControl1.Update();<br> axTOCControl1.Update();<br><br> pMap=null;<br> pRLayer=null;<br> pRaster=null;<br> pRasRen=null;<br> pClassRen=null;<br> pRamp=null;<br> pFSymbol=null;<br> }<br><font style="font-weight: bold;" size="5">这是我翻译的,可是却有很多的问题,问题在注释中写明了,我想知道IDW中的参考边界哪个参数实现(不知道这样说你们可明白?)。望各位朋友可以帮忙看看这个程序的错误?</font>
|
|
2楼#
发布于:2009-02-26 16:02
<P> public void CreateContourListFromShapefile() <BR> {<BR> //用反距离IDW插值生成的栅格图像<BR> IInterpolationOp pInterpolationOp;<BR> pInterpolationOp = new RasterInterpolationOpClass();<BR> // Create the input point object</P>
<P> IFeatureClass pFeatureClass; <BR> IFeatureLayer pFeaturelayer;<BR> pFeaturelayer = this.m_mapControl.Map.get_Layer(8) as IFeatureLayer;//这里我的数据在第八层<BR> pFeatureClass = pFeaturelayer.FeatureClass;</P> <P> // Define the search radius<BR> IRasterRadius pRadius;<BR> pRadius = new RasterRadiusClass();<BR> object maxDistance = Type.Missing;<BR> pRadius.SetVariable(12, ref maxDistance);</P> <P> //Create FeatureClassDescriptor using a value field<BR> IFeatureClassDescriptor pFCDescriptor;<BR> pFCDescriptor = new FeatureClassDescriptorClass();<BR> pFCDescriptor.Create(pFeatureClass, null, "降雨量500");</P> <P> //set { cellsize for output raster in the environment<BR> object dCellSize = 0.013;<BR> IRasterAnalysisEnvironment pEnv;<BR> pEnv = new RasterAnalysis();<BR> pEnv = pInterpolationOp as IRasterAnalysisEnvironment;<BR> pEnv.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref dCellSize);</P> <P> object objectbarrier = Type.Missing;<BR> //Perform the interpolation<BR> IGeoDataset rasDataset;<BR> rasDataset = pInterpolationOp.IDW((IGeoDataset)pFCDescriptor, 2, pRadius, ref objectbarrier);<BR> IRaster pOutRaster;<BR> pOutRaster = rasDataset as IRaster;</P> <P> //Add output into ArcMap as a raster layer<BR> IRasterLayer pOutRasLayer;<BR> pOutRasLayer = new RasterLayerClass();<BR> pOutRasLayer.CreateFromRaster(pOutRaster);<BR> this.m_mapControl.AddLayer(pOutRasLayer,0);</P> <P> UsingRasterClassifyColorRampRenderer();</P> <P> }</P> <P> public static IColor ConvertColorToIColor(Color color)<BR> {</P> <P> IColor pColor = new RgbColorClass();<BR> pColor.RGB = (int)color.R | (int)(color.G) << 8 | (int)(color.B) << 16;<BR> return pColor;<BR> } <BR> private void UsingRasterClassifyColorRampRenderer() //分级渲染 <BR> {<BR> //get { Map</P> <P> IMap pMap;<BR> pMap = m_mapControl.Map;</P> <P> //get { raster input from layer<BR> IRasterLayer pRLayer;<BR> pRLayer = (IRasterLayer)pMap.get_Layer(0);<BR> IRaster pRaster;<BR> pRaster = pRLayer.Raster;</P> <P> //Create classfy renderer and QI RasterRenderer interface<BR> IRasterClassifyColorRampRenderer pClassRen;<BR> pClassRen = new RasterClassifyColorRampRenderer();<BR> IRasterRenderer pRasRen;<BR> pRasRen = pClassRen as IRasterRenderer;</P> <P> //set { raster for the render and update<BR> pRasRen.Raster = pRaster;<BR> pClassRen.ClassCount = 10;<BR> pRasRen.Update();</P> <P> //Create a color ramp to use<BR> IAlgorithmicColorRamp pRamp;<BR> pRamp = new AlgorithmicColorRamp();<BR> Color clr=new Color();<BR> clr = Color.FromArgb(255,255,128);<BR> pRamp.FromColor = ConvertColorToIColor(clr);<BR> clr = Color.FromArgb(135, 42, 8);<BR> pRamp.ToColor = ConvertColorToIColor(clr);<BR> pRamp.Size = 10;<BR> bool flag = true;<BR> pRamp.CreateRamp(out flag);</P> <P> //Create symbol for the classes<BR> IFillSymbol pFSymbol;<BR> pFSymbol = new SimpleFillSymbol();</P> <P> //loop through the classes and apply the color and label<BR> int I;<BR> for (I = 0; I <= pClassRen.ClassCount - 1;I++ )<BR> {<BR> pFSymbol.Color = pRamp.get_Color(I);// .Color(I);<BR> pClassRen.set_Symbol(I, pFSymbol as ISymbol);<BR> pClassRen.set_Label(I,"等级" + Convert.ToString(I + 1));<BR> } // I</P> <P> //Update the renderer and plug into layer<BR> pRasRen.Update();<BR> pRLayer.Renderer =(IRasterRenderer) pClassRen;<BR> m_mapControl.ActiveView.Refresh();<BR> // m_mapControl;<BR> this.axTOCControl1.Update();</P> <P> //Release memeory</P> <P> pMap = null;<BR> pRLayer = null;<BR> pRaster = null;<BR> pRasRen = null;<BR> pClassRen = null;<BR> pRamp = null;<BR> pFSymbol = null;<BR> }</P> |
|