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

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

楼主#
更多 发布于:2006-03-20 21:54
<P>最近再弄等值线问题,有点眉目了,我是用点shp文件生成IDW(范围比实际大),然后用边界shp文件来裁剪raster,最后用raster生成等值线,保存为shp,同时也在图层里显示,下面把源码显上来,大家一起学习进步!</P>
<P>Public Function CreateRasterFromPoint(pMap As IMap, sName As String, sFieldName As String, dCellSize As Double, strOutName As String)<BR>  <BR>  <BR>    CheckSpatialAnalystLicense<BR>    <BR>    Dim pFilt As IQueryFilter<BR>    Set pFilt = New QueryFilter<BR>    <BR>    Dim i As Integer<BR>    Dim nLayerIndex As Integer<BR>    <BR>    nLayerIndex = -1<BR>    <BR>    For i = 0 To pMap.LayerCount() - 1<BR>    <BR>      If pMap.Layer(i).Name = sName Then<BR>            nLayerIndex = i<BR>            Exit For<BR>       End If<BR>       <BR>    Next i<BR>    <BR>    If nLayerIndex = -1 Then<BR>     MsgBox "生成等值线的原始数据不存在!"<BR>     Exit Function<BR>    End If<BR>    <BR>    Dim pFeatureLayer As IFeatureLayer<BR>    Set pFeatureLayer = pMap.Layer(nLayerIndex)<BR>    <BR>    Dim pFClass As IFeatureClass<BR>    Set pFClass = pFeatureLayer.FeatureClass<BR>    </P>
<P>     ' Create FeatureClassDescriptor using a value field<BR>     Dim pFDescr As IFeatureClassDescriptor<BR>    Set pFDescr = New FeatureClassDescriptor<BR>    <BR>    <BR>    If Len(m_sWhereClause) > 0 Then<BR>       pFilt.whereClause = m_sWhereClause<BR>       pFDescr.Create pFClass, pFilt, sFieldName<BR>    Else<BR>       pFDescr.Create pFClass, Nothing, sFieldName<BR>    End If<BR>    <BR>    <BR>    <BR>     ' 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>    <BR>    Dim pExtent As IEnvelope<BR>    Set pExtent = New Envelope<BR>    <BR>    Dim xmin As Double<BR>    Dim xmax As Double<BR>    Dim ymin As Double<BR>    Dim ymax As Double</P>
<P>    xmin = 20360000<BR>    xmax = 20550000<BR>    ymin = 4340000<BR>    ymax = 4557000<BR>    <BR>    pExtent.PutCoords xmin, ymin, xmax, ymax<BR>    <BR>      <BR>    Dim penv As IRasterAnalysisEnvironment<BR>    Set penv = pIntOp<BR>    penv.SetCellSize esriRasterEnvValue, dCellSize<BR>    penv.SetExtent esriRasterEnvValue, pExtent<BR>      <BR>     ' 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 pInRaster As IRaster<BR>    Set pInRaster = pIntOp.IDW(pFDescr, 2, pRadius)<BR>    <BR>       <BR>    Dim pRasterProp As IRasterProps<BR>    Set pRasterProp = pInRaster<BR>    <BR>    RULX = pRasterProp.Extent.xmin<BR>    RULY = pRasterProp.Extent.ymax<BR>    RLRX = pRasterProp.Extent.xmax<BR>    RLRY = pRasterProp.Extent.ymin<BR>    </P>
<P>    '判断strOutName是否存在,如果存在,删除先<BR>    Call DeleteIfExists(strOutName)</P>
<P>    Dim pGeo As IGeometry<BR>    Set pGeo = GetPolygon<BR>    </P>
<P>    '用边界裁剪raster<BR>    RasterExtraction pGeo, pInRaster<BR>    <BR>    Dim pOutDataset  As IDataset<BR>    Set pOutDataset = pOutBands.SaveAs(strOutName, Nothing, "GRID")<BR>   <BR>      <BR>    Set pFilt = Nothing<BR>    Set pFDescr = Nothing<BR>    Set pIntOp = Nothing<BR>    Set pExtent = Nothing<BR>    Set pFeatureLayer = Nothing<BR>    Set pFClass = Nothing<BR>    </P>
<P>    <BR>End Function<BR></P>
喜欢0 评分0
小波变换
路人甲
路人甲
  • 注册日期2007-06-20
  • 发帖数64
  • QQ
  • 铜币58枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2007-07-10 18:24
<P>我也做过类似的功能,做此类功能需要注意的是及时释放com对象,防止不必要的错误产生。</P>
********************************** 喜欢有激情的生活 msn:hou.jiazte@hotmail.com 欢迎交流 **********************************
举报 回复(0) 喜欢(0)     评分
lizhihong
路人甲
路人甲
  • 注册日期2006-03-27
  • 发帖数8
  • QQ
  • 铜币149枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2007-07-09 18:47
请问UsingRasterClassifyColorRampRenderer子程序是根据颜色渲染,怎样根据值进行分类渲染?谢谢!
举报 回复(0) 喜欢(0)     评分
Christie72
路人甲
路人甲
  • 注册日期2004-07-22
  • 发帖数92
  • QQ
  • 铜币423枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2006-05-20 09:44
<P>太好了,我也要<STRONG>用engine 生成等值线</STRONG></P>
举报 回复(0) 喜欢(0)     评分
zhousky
论坛版主
论坛版主
  • 注册日期2003-08-01
  • 发帖数281
  • QQ
  • 铜币1027枚
  • 威望3点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2006-04-19 21:35
<P>退出时要set pObj=nothing,不然要占用内在</P>
<P>你的代码不错,有机会探讨一下,我的QQ:230998,</P>
不要看我噢
举报 回复(0) 喜欢(0)     评分
zhousky
论坛版主
论坛版主
  • 注册日期2003-08-01
  • 发帖数281
  • QQ
  • 铜币1027枚
  • 威望3点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2006-04-19 21:33
创建了对象,在退出时就要set pObj=nothing,wq r
不要看我噢
举报 回复(0) 喜欢(0)     评分
Yoyozwf
路人甲
路人甲
  • 注册日期2006-02-15
  • 发帖数39
  • QQ
  • 铜币207枚
  • 威望0点
  • 贡献值0点
  • 银元0个
6楼#
发布于:2006-04-18 16:28
<P>对阿,最后生成的就是等值线,保存为shapfile,等值面是Raster,文件</P>
举报 回复(0) 喜欢(0)     评分
knight_sl
路人甲
路人甲
  • 注册日期2004-08-11
  • 发帖数21
  • QQ
  • 铜币161枚
  • 威望0点
  • 贡献值0点
  • 银元0个
7楼#
发布于:2006-04-14 01:01
<P>很好!!</P>

<P>LZ,用的就是插值分析吧?</P>
<P>请问最后生成的是线状数据吗?</P><img src="images/post/smile/dvbbs/em06.gif" />
举报 回复(0) 喜欢(0)     评分
Christie72
路人甲
路人甲
  • 注册日期2004-07-22
  • 发帖数92
  • QQ
  • 铜币423枚
  • 威望0点
  • 贡献值0点
  • 银元0个
8楼#
发布于:2006-04-11 05:39
请问用engine能实现arcmap中的空间分析功能吗?
举报 回复(0) 喜欢(0)     评分
Yoyozwf
路人甲
路人甲
  • 注册日期2006-02-15
  • 发帖数39
  • QQ
  • 铜币207枚
  • 威望0点
  • 贡献值0点
  • 银元0个
9楼#
发布于:2006-03-22 21:12
<P>请问你说的边界时什么意思,我原来生成的raster是矩形的,是被一个边界shapefile给裁成这样的</P>
举报 回复(0) 喜欢(0)     评分
上一页
游客

返回顶部