默认头像
路人甲
路人甲
  • 注册日期2006-02-15
  • 发帖数39
  • QQ
  • 铜币207枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:5627回复:17

[原创]vb + engine 用raster生成等值线源码

楼主#
更多 发布于:2006-03-20 21:54

最近再弄等值线问题,有点眉目了,我是用点shp文件生成IDW(范围比实际大),然后用边界shp文件来裁剪raster,最后用raster生成等值线,保存为shp,同时也在图层里显示,下面把源码显上来,大家一起学习进步!

Public Function CreateRasterFromPoint(pMap As IMap, sName As String, sFieldName As String, dCellSize As Double, strOutName As String)
 
 
   CheckSpatialAnalystLicense
   
   Dim pFilt As IQueryFilter
   Set pFilt = New QueryFilter
   
   Dim i As Integer
   Dim nLayerIndex As Integer
   
   nLayerIndex = -1
   
   For i = 0 To pMap.LayerCount() - 1
   
     If pMap.Layer(i).Name = sName Then
           nLayerIndex = i
           Exit For
      End If
     
   Next i
   
   If nLayerIndex = -1 Then
    MsgBox "生成等值线的原始数据不存在!"
    Exit Function
   End If
   
   Dim pFeatureLayer As IFeatureLayer
   Set pFeatureLayer = pMap.Layer(nLayerIndex)
   
   Dim pFClass As IFeatureClass
   Set pFClass = pFeatureLayer.FeatureClass
   

    ' Create FeatureClassDescriptor using a value field
    Dim pFDescr As IFeatureClassDescriptor
   Set pFDescr = New FeatureClassDescriptor
   
   
   If Len(m_sWhereClause) > 0 Then
      pFilt.whereClause = m_sWhereClause
      pFDescr.Create pFClass, pFilt, sFieldName
   Else
      pFDescr.Create pFClass, Nothing, sFieldName
   End If
   
   
   
    ' Create RasterInterpolationOp object
    Dim pIntOp As IInterpolationOp
    Set pIntOp = New RasterInterpolationOp

    ' Set cell size for output raster. The extent of the output raster is
   ' defualted to as same as input. The output working directory uses default
   
   Dim pExtent As IEnvelope
   Set pExtent = New Envelope
   
   Dim xmin As Double
   Dim xmax As Double
   Dim ymin As Double
   Dim ymax As Double

   xmin = 20360000
   xmax = 20550000
   ymin = 4340000
   ymax = 4557000
   
   pExtent.PutCoords xmin, ymin, xmax, ymax
   
     
   Dim penv As IRasterAnalysisEnvironment
   Set penv = pIntOp
   penv.SetCellSize esriRasterEnvValue, dCellSize
   penv.SetExtent esriRasterEnvValue, pExtent
     
    ' Create raster radius using variable distance
    Dim pRadius As IRasterRadius
   Set pRadius = New RasterRadius
   pRadius.SetVariable 12

    ' Using FeatureClassDescriptor as an input to the IInterpolationOp and
   ' Perform the interpolation
    Dim pInRaster As IRaster
   Set pInRaster = pIntOp.IDW(pFDescr, 2, pRadius)
   
     
   Dim pRasterProp As IRasterProps
   Set pRasterProp = pInRaster
   
   RULX = pRasterProp.Extent.xmin
   RULY = pRasterProp.Extent.ymax
   RLRX = pRasterProp.Extent.xmax
   RLRY = pRasterProp.Extent.ymin
   

   '判断strOutName是否存在,如果存在,删除先
   Call DeleteIfExists(strOutName)

   Dim pGeo As IGeometry
   Set pGeo = GetPolygon
   

   '用边界裁剪raster
   RasterExtraction pGeo, pInRaster
   
   Dim pOutDataset  As IDataset
   Set pOutDataset = pOutBands.SaveAs(strOutName, Nothing, "GRID")
 
     
   Set pFilt = Nothing
   Set pFDescr = Nothing
   Set pIntOp = Nothing
   Set pExtent = Nothing
   Set pFeatureLayer = Nothing
   Set pFClass = Nothing
   

   
End Function

喜欢0 评分0
默认头像
路人甲
路人甲
  • 注册日期2007-06-20
  • 发帖数64
  • QQ
  • 铜币58枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2007-07-10 18:24

我也做过类似的功能,做此类功能需要注意的是及时释放com对象,防止不必要的错误产生。

********************************** 喜欢有激情的生活 msn:hou.jiazte@hotmail.com 欢迎交流 **********************************
举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2006-03-27
  • 发帖数8
  • QQ
  • 铜币149枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2007-07-09 18:47
请问UsingRasterClassifyColorRampRenderer子程序是根据颜色渲染,怎样根据值进行分类渲染?谢谢!
举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2004-07-22
  • 发帖数92
  • QQ
  • 铜币423枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2006-05-20 09:44

太好了,我也要用engine 生成等值线

举报 回复(0) 喜欢(0)     评分
默认头像
论坛版主
论坛版主
  • 注册日期2003-08-01
  • 发帖数281
  • QQ
  • 铜币1027枚
  • 威望3点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2006-04-19 21:35

退出时要set pObj=nothing,不然要占用内在

你的代码不错,有机会探讨一下,我的QQ:230998,

不要看我噢
举报 回复(0) 喜欢(0)     评分
默认头像
论坛版主
论坛版主
  • 注册日期2003-08-01
  • 发帖数281
  • QQ
  • 铜币1027枚
  • 威望3点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2006-04-19 21:33
创建了对象,在退出时就要set pObj=nothing,wq r
不要看我噢
举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2006-02-15
  • 发帖数39
  • QQ
  • 铜币207枚
  • 威望0点
  • 贡献值0点
  • 银元0个
6楼#
发布于:2006-04-18 16:28

对阿,最后生成的就是等值线,保存为shapfile,等值面是Raster,文件

举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2004-08-11
  • 发帖数21
  • QQ
  • 铜币161枚
  • 威望0点
  • 贡献值0点
  • 银元0个
7楼#
发布于:2006-04-14 01:01

很好!!

LZ,用的就是插值分析吧?

请问最后生成的是线状数据吗?

举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2004-07-22
  • 发帖数92
  • QQ
  • 铜币423枚
  • 威望0点
  • 贡献值0点
  • 银元0个
8楼#
发布于:2006-04-11 05:39
请问用engine能实现arcmap中的空间分析功能吗?
举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2006-02-15
  • 发帖数39
  • QQ
  • 铜币207枚
  • 威望0点
  • 贡献值0点
  • 银元0个
9楼#
发布于:2006-03-22 21:12

请问你说的边界时什么意思,我原来生成的raster是矩形的,是被一个边界shapefile给裁成这样的

举报 回复(0) 喜欢(0)     评分
上一页
默认头像

返回顶部