wjssong
路人甲
路人甲
  • 注册日期2005-03-10
  • 发帖数37
  • QQ
  • 铜币313枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:2252回复:5

调用AO生成栅格图的方法提示cell size错误

楼主#
更多 发布于:2005-07-20 17:03
<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>
喜欢0 评分0
wjssong
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15947
  • QQ554730525
  • 铜币25339枚
  • 威望15364点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
1楼#
发布于: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>
举报 回复(0) 喜欢(0)     评分
ychaoliu
路人甲
路人甲
  • 注册日期2004-10-15
  • 发帖数6
  • QQ
  • 铜币133枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于: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>
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15947
  • QQ554730525
  • 铜币25339枚
  • 威望15364点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
3楼#
发布于:2005-07-21 11:07
<P>你可以用3d分析模块,生成raster,看看参数是多少</P>
<P>然后设置过去就行</P>
举报 回复(0) 喜欢(0)     评分
wjssong
路人甲
路人甲
  • 注册日期2005-03-10
  • 发帖数37
  • QQ
  • 铜币313枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2005-07-21 11:36
<P>我怎么把生成的栅格数据集添加到地图里面去呢?</P>
<P>或者:</P>
<P>Set pOutGeo = pIntOp.Krige(pFDescr, esriGeoAnalysisCircularSemiVariogram, pRadius, True) <BR>执行这个方法后应该在磁盘生成一个栅格文件(.aux),这该怎么做啊?</P>
wjssong
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15947
  • QQ554730525
  • 铜币25339枚
  • 威望15364点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
5楼#
发布于: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
举报 回复(0) 喜欢(0)     评分
游客

返回顶部