阅读:2418回复:5
调用AO生成栅格图的方法提示cell size错误
<P>我分别使用了 krigeP, splineP, TrendP三个方法,结果都是一样,提示错误: The cell size value is either invalid or not defined.请问这个问题如何解决???</P>
<P>Sub krigeP()<BR> ' Create the RasterInterpolationOp object<BR> Dim pInterpolationOp As IInterpolationOp<BR> Set pInterpolationOp = New RasterInterpolationOp<BR> <BR> ' Create the input point object<BR> Dim pInputDataset As IGeoDataset<BR> <BR> ' Calls function to open the input point dataset from disk<BR> Dim pWorkspaceFactory As IWorkspaceFactory<BR> Dim pFeatureWorkspace As IFeatureWorkspace<BR> Set pWorkspaceFactory = New ShapefileWorkspaceFactory<BR> Set pFeatureWorkspace = pWorkspaceFactory.OpenFromFile("D:\Contour", 0)<BR> Set pInputDataset = pFeatureWorkspace.OpenFeatureDataset("test")<BR> <BR> ' Set the research radius<BR> Dim pRadius As IRasterRadius<BR> Set pRadius = New RasterRadius<BR> pRadius.SetVariable 12<BR> <BR> ' Create the output dataset object<BR> Dim pOutputDataset As IGeoDataset<BR> <BR> ' Calls the method 下面这句出现如上错误<BR> Set pOutputDataset = pInterpolationOp.Krige(pInputDataset, 3, pRadius, True)<BR> 'pInterpolationOp.Trend<BR>End Sub</P> |
|
|
1楼#
发布于:2005-07-23 19:13
'‖=================================================<BR>'功能:添加一个raster文件到map上<BR>'参数:目录和文件名,imap<BR>'‖=================================================<BR>Private Sub AddRaster(strRasterFolder As String, strRasterName As String, pMap As IMap)<BR> Dim pRasterWSF As IWorkspaceFactory<BR> Set pRasterWSF = New RasterWorkspaceFactory<BR> Dim pRasterWorkspace As IRasterWorkspace<BR> Set pRasterWorkspace = pRasterWSF.OpenFromFile(strRasterFolder, 0)<BR> Dim pRasterDS As IRasterDataset<BR> Set pRasterDS = pRasterWorkspace.OpenRasterDataset(strRasterName)<BR> Dim pRasterLayer As IRasterLayer<BR> Set pRasterLayer = New RasterLayer<BR> pRasterLayer.CreateFromDataset pRasterDS<BR> Dim pLayer As ILayer<BR> Set pLayer = pRasterLayer<BR> pLayer.Name = strRasterName<BR> pMap.AddLayer pLayer<BR>End Sub
|
|
|
2楼#
发布于:2005-07-21 11:36
<P>我怎么把生成的栅格数据集添加到地图里面去呢?</P>
<P>或者:</P> <P>Set pOutGeo = pIntOp.Krige(pFDescr, esriGeoAnalysisCircularSemiVariogram, pRadius, True) <BR>执行这个方法后应该在磁盘生成一个栅格文件(.aux),这该怎么做啊?</P> |
|
|
3楼#
发布于:2005-07-21 11:07
<P>你可以用3d分析模块,生成raster,看看参数是多少</P>
<P>然后设置过去就行</P> |
|
|
4楼#
发布于:2005-07-21 09:28
<DIV class=quote><B>以下是引用<I>gis</I>在2005-7-20 17:40:26的发言:</B><BR>
<P>下面用了idw和krige两种方法,我这里测试没问题</P> <P>Public Function RasterInterpolation(InterpolatingMethod As String, FldName As String, pmap As IMap) As IGeoDataset <BR>On Error GoTo ErrorHandler </P> <P>' Set the two variables to fit your data <BR>Dim RasterInterpolMethod As String <BR>Dim sFieldName As String <BR>Dim CellSize As Double </P> <P>RasterInterpolMethod = InterpolatingMethod <BR>sFieldName = FldName 'Field name used in interpolation <BR>CellSize = 0.002305344 'Cell size for output raster </P> <P>' Get feature class from layer <BR>Dim pFLayer As IFeatureLayer <BR>Set pFLayer = pmap.Layer(0) <BR>Dim pFClass As IFeatureClass <BR>Set pFClass = pFLayer.FeatureClass </P> <P>' Create FeatureClassDescriptor using a value field <BR>Dim pFDescr As IFeatureClassDescriptor <BR>Set pFDescr = New FeatureClassDescriptor <BR>pFDescr.Create pFClass, Nothing, sFieldName </P> <P>' Create RasterInterpolationOp object <BR>Dim pIntOp As IInterpolationOp <BR>Set pIntOp = New RasterInterpolationOp </P> <P>' Set cell size for output raster. The extent of the output raster is <BR>' defualted to as same as input. The output working directory uses default <BR>Dim pEnv As IRasterAnalysisEnvironment <BR>Set pEnv = pIntOp <BR>pEnv.SetCellSize esriRasterEnvValue, CellSize </P> <P>' Create raster radius using variable distance <BR>Dim pRadius As IRasterRadius <BR>Set pRadius = New RasterRadius <BR>pRadius.SetVariable 12 </P> <P>' Using FeatureClassDescriptor as an input to the IInterpolationOp and <BR>' Perform the interpolation <BR>Dim pOutGeo As IGeoDataset <BR>Select Case RasterInterpolMethod <BR>Case "IDW" <BR>Set pOutGeo = pIntOp.IDW(pFDescr, 2, pRadius) <BR>Case "Spline" <BR>MsgBox "Still in construction" <BR>Case "Kriging" <BR>Set pOutGeo = pIntOp.Krige(pFDescr, esriGeoAnalysisCircularSemiVariogram, pRadius, True) <BR>End Select </P> <P>'Add the result to layer <BR>'Dim pRLayer As IRasterLayer <BR>'Set pRLayer = New RasterLayer <BR>'pRLayer.CreateFromRaster pOutGeo <BR>'pMap.AddLayer pRLayer <BR>Set RasterInterpolation = pOutGeo </P> <P>Exit Function <BR>ErrorHandler: <BR>HandleError True, "RasterInterpolation " ; c_ModuleFileName ; " " ; GetErrorLineNumberString(Erl), Err.Number, Err.Source, Err.Description, 4 <BR>End Function </P></DIV> <P>我用您的方法试了,运行到CellSize = 0.002305344 'Cell size for output raster 时提示OverFlow,程序无法通过。。。这里的CellSize是什么单位,是象素大小吗?</P> |
|
5楼#
发布于:2005-07-20 17:40
<P>下面用了idw和krige两种方法,我这里测试没问题</P>
<P>Public Function RasterInterpolation(InterpolatingMethod As String, FldName As String, pmap As IMap) As IGeoDataset <BR>On Error GoTo ErrorHandler </P> <P>' Set the two variables to fit your data <BR>Dim RasterInterpolMethod As String <BR>Dim sFieldName As String <BR>Dim CellSize As Double </P> <P>RasterInterpolMethod = InterpolatingMethod <BR>sFieldName = FldName 'Field name used in interpolation <BR>CellSize = 0.002305344 'Cell size for output raster </P> <P>' Get feature class from layer <BR>Dim pFLayer As IFeatureLayer <BR>Set pFLayer = pmap.Layer(0) <BR>Dim pFClass As IFeatureClass <BR>Set pFClass = pFLayer.FeatureClass </P> <P>' Create FeatureClassDescriptor using a value field <BR>Dim pFDescr As IFeatureClassDescriptor <BR>Set pFDescr = New FeatureClassDescriptor <BR>pFDescr.Create pFClass, Nothing, sFieldName </P> <P>' Create RasterInterpolationOp object <BR>Dim pIntOp As IInterpolationOp <BR>Set pIntOp = New RasterInterpolationOp </P> <P>' Set cell size for output raster. The extent of the output raster is <BR>' defualted to as same as input. The output working directory uses default <BR>Dim pEnv As IRasterAnalysisEnvironment <BR>Set pEnv = pIntOp <BR>pEnv.SetCellSize esriRasterEnvValue, CellSize </P> <P>' Create raster radius using variable distance <BR>Dim pRadius As IRasterRadius <BR>Set pRadius = New RasterRadius <BR>pRadius.SetVariable 12 </P> <P>' Using FeatureClassDescriptor as an input to the IInterpolationOp and <BR>' Perform the interpolation <BR>Dim pOutGeo As IGeoDataset <BR>Select Case RasterInterpolMethod <BR>Case "IDW" <BR>Set pOutGeo = pIntOp.IDW(pFDescr, 2, pRadius) <BR>Case "Spline" <BR>MsgBox "Still in construction" <BR>Case "Kriging" <BR>Set pOutGeo = pIntOp.Krige(pFDescr, esriGeoAnalysisCircularSemiVariogram, pRadius, True) <BR>End Select </P> <P>'Add the result to layer <BR>'Dim pRLayer As IRasterLayer <BR>'Set pRLayer = New RasterLayer <BR>'pRLayer.CreateFromRaster pOutGeo <BR>'pMap.AddLayer pRLayer <BR>Set RasterInterpolation = pOutGeo </P> <P>Exit Function <BR>ErrorHandler: <BR>HandleError True, "RasterInterpolation " ; c_ModuleFileName ; " " ; GetErrorLineNumberString(Erl), Err.Number, Err.Source, Err.Description, 4 <BR>End Function </P> |
|
|