kisssy
卧底
卧底
  • 注册日期2004-04-18
  • 发帖数235
  • QQ
  • 铜币614枚
  • 威望2点
  • 贡献值0点
  • 银元0个
阅读:6783回复:14

[原创]自己做插值程序,想和大家分享

楼主#
更多 发布于:2005-09-02 20:33
<FONT color=#1a6be6> </FONT>
<P>'''''by kisssy</P>
<P>'''''Kriging         以克里金插值为例</P>
<P>''''strName1:A string that represents your FeatureClass Path</P>
<P>''''strName2:A string that represents the FeatureClass Name</P>
<P>''''sFieldName:the field for Interpolation<BR>Public Function Kriging(strName1 As String, strName2 As String,sFieldName As String) As IRasterLayer   '克里金<BR>    '''''''''''''''''''''''''''''''''操作符<BR>    Dim pInterpolationOp As IInterpolationOp<BR>    Set pInterpolationOp = New RasterInterpolationOp<BR>    '''''''''''''''''''''''''''''''''操作环境<BR>    Dim pEnv As IRasterAnalysisEnvironment<BR>    Set pEnv = pInterpolationOp</P>
<P>    '''''add shape for setting mask , <FONT color=#ff0033>this is optional</FONT><BR>    Dim pFlayer As IFeatureLayer<BR>    Set pFlayer = addShp(App.Path + "\Data\BaseDB\JiChuDiLi\city", "大同")  'your shp 'path<BR>    Dim pGeoDB As IGeoDataset<BR>    Set pGeoDB = pFlayer.FeatureClass</P>
<P>    Dim pEnvelop As IEnvelope<BR>    Set pEnvelop = pGeoDB.Extent<BR>    pEnv.SetExtent esriRasterEnvValue, pEnvelop<BR>    Set pEnv.Mask = pGeoDB</P>
<P>    ''''set cell size<BR>    pEnv.SetCellSize esriRasterEnvValue, 600     '600:cellsize</P>
<P>    '''''''''''''''''''''''''''''''''''设置FeatureClassDescriptor<BR>    Dim pFClass As IFeatureClass<BR>    Set pFClass = OpenFC2(strName1, strName2)<BR>    <BR>    Dim pFDescriptor As IFeatureClassDescriptor<BR>    Set pFDescriptor = New FeatureClassDescriptor<BR>    pFDescriptor.Create pFClass, Nothing, sFieldName<BR>    '''''''''''''''''''''''''''''''''设置搜索半径<BR>    Dim pRadius As IRasterRadius<BR>    Set pRadius = New RasterRadius<BR>    pRadius.SetVariable 12                               'your variant<BR>    ''''''''''''''''''''''''''''''调用Kriging<BR>    Dim pOutputRaster As IRaster<BR>    Set pOutputRaster = pInterpolationOp.Krige(pFDescriptor, <STRONG>esriGeoAnalysisSphericalSemiVariogram</STRONG>, pRadius, True)  </P>
<P>'<STRONG>esriGeoAnalysisSphericalSemiVariogram is 'esriGeoAnalysisSemiVariogramEnum</STRONG></P>
<P>    '''''''''''''''''''''''''''''输出Raster</P>
<P>    Dim pOutRasLayer As IRasterLayer<BR>    Set pOutRasLayer = New RasterLayer<BR>    pOutRasLayer.CreateFromRaster pOutputRaster<BR>    '''''''''''''''''''''''''着色<BR>    UsingRasterClassifyColorRampRenderer pOutRasLayer<BR>    Set Kriging = pOutRasLayer</P>
<P>End Function</P>
<P><FONT color=#226ddd>Public Function addShp(strPath As String, strFcname As String) As IFeatureLayer<BR>    ''''Open WorkSpace<BR>    Dim myFWKS As IFeatureWorkspace<BR>    Dim myWKSF As IWorkspaceFactory<BR>    Set myWKSF = New ShapefileWorkspaceFactory<BR>    Set myFWKS = myWKSF.OpenFromFile(strPath, 0)<BR>    If Not myFWKS Is Nothing Then<BR>        ''''Open<BR>        Dim myFC As IFeatureClass<BR>        Set myFC = myFWKS.OpenFeatureClass(strFcname)<BR>        Dim myDS As IDataset<BR>        Set myDS = myFC<BR>        Dim myFLayer As IFeatureLayer<BR>        Set myFLayer = New FeatureLayer<BR>        Set myFLayer.FeatureClass = myFC<BR>        myFLayer.Name = myDS.Name<BR>        Set addShp = myFLayer<BR>    End If<BR>End Function</FONT></P><FONT color=#1a6be6>
<P>Public Function OpenFC2(strPath As String, strFcname As String) As IFeatureClass<BR>    ''''Open WorkSpace<BR>    Dim myFWKS As IFeatureWorkspace<BR>    Dim myWKSF As IWorkspaceFactory<BR>    Set myWKSF = New ShapefileWorkspaceFactory<BR>    Set myFWKS = myWKSF.OpenFromFile(strPath, 0)<BR>    If Not myFWKS Is Nothing Then<BR>        ''''Open</P>
<P>        Set OpenFC2 = myFWKS.OpenFeatureClass(strFcname)</P>
<P>    End If<BR>End Function</P>
<P>Public Sub UsingRasterClassifyColorRampRenderer(pRlayer As IRasterLayer)</P>
<P>    '  ' We're going to create StatsHistogram<BR>    <BR>    Dim pRaster As IRaster<BR>    Set pRaster = pRlayer.Raster<BR>    Dim pStatsHist As IStatsHistogram<BR>    Set pStatsHist = New StatsHistogram<BR>    Dim pCalStatsHist As IRasterCalcStatsHistogram<BR>    Set pCalStatsHist = New RasterCalcStatsHistogram<BR>    pCalStatsHist.ComputeFromRaster pRaster, 0, pStatsHist</P>
<P>   '  ' and then classify this data</P>
<P>    Dim pClassify As IClassify<BR>    Set pClassify = New EqualInterval<BR>    Dim pClassMaxMin As IClassifyMinMax<BR>    Set pClassMaxMin = pClassify<BR>    pClassMaxMin.Maximum = pStatsHist.Max<BR>    pClassMaxMin.Minimum = pStatsHist.Min<BR>    Dim Classes() As Double<BR>    Dim ClassesCount As Long<BR>    Dim numDesiredClasses As Long<BR>    'pClassify.Classify numDesiredClasses<BR>    pClassify.Classify 8                                     'class count<BR>    Classes = pClassify.ClassBreaks<BR>    ClassesCount = UBound(Classes)</P>
<P>    'Create classfy renderer and QI RasterRenderer interface<BR>    Dim pClassRen As IRasterClassifyColorRampRenderer<BR>    Set pClassRen = New RasterClassifyColorRampRenderer<BR>    Dim pRasRen As IRasterRenderer<BR>    Set pRasRen = pClassRen</P>
<P>    'Set raster for the render and update<BR>    Set pRasRen.Raster = pRaster<BR>    pClassRen.ClassCount = ClassesCount<BR>    pRasRen.Update</P>
<P>    'Create a color ramp to use<BR>    Dim pRamp As IAlgorithmicColorRamp<BR>    Dim pColor As IColor<BR>    Set pColor = New RgbColor<BR>    Set pRamp = New AlgorithmicColorRamp<BR>    pRamp.Size = ClassesCount</P>
<P>    pColor.RGB = RGB(0, 0, 255)             'your color<BR>    pRamp.FromColor = pColor<BR>    pColor.RGB = RGB(255, 0, 0)<BR>    pRamp.ToColor = pColor<BR>    pRamp.Algorithm = 1<BR>    pRamp.CreateRamp True<BR>    'Create symbol for the classes<BR>    Dim pFSymbol As IFillSymbol<BR>    Set 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><BR>        pClassRen.Break(i) = Classes(i + 1)<BR>    Next i</P>
<P>    'Update the renderer and plug into layer<BR>    pRasRen.Update<BR>    Set pRlayer.Renderer = pClassRen</P>
<P>    Set pRaster = Nothing<BR>    Set pRasRen = Nothing<BR>    Set pClassRen = Nothing<BR>    Set pRamp = Nothing<BR>    Set pFSymbol = Nothing<BR>End Sub</P>
<P></FONT> </P>
喜欢0 评分0
个人专栏: https://zhuanlan.zhihu.com/c_165676639
xc_zhao
路人甲
路人甲
  • 注册日期2007-11-22
  • 发帖数5
  • QQ
  • 铜币115枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2008-12-17 11:49
<P><img src="images/post/smile/dvbbs/em02.gif" /> 厉害</P>
举报 回复(0) 喜欢(0)     评分
coverage
路人甲
路人甲
  • 注册日期2008-07-03
  • 发帖数14
  • QQ
  • 铜币180枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2008-09-04 14:10
<P>非常有用!</P><img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em02.gif" />
举报 回复(0) 喜欢(0)     评分
license
路人甲
路人甲
  • 注册日期2003-08-20
  • 发帖数235
  • QQ33281522
  • 铜币366枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2006-12-01 00:44
ding
Gis的小石块 QICQ:33281522 EMAIL:license@vip.sina.com GIS的麦田守望者,希望和大家交流。 〓〓〓〓〓〓〓〓〓 〓 GISEMPIRE 〓 〓 灌水★波菜 〓 〓 专 用 章 〓 〓〓〓〓〓〓〓〓〓
举报 回复(0) 喜欢(0)     评分
jone1017
路人甲
路人甲
  • 注册日期2005-05-05
  • 发帖数5
  • QQ
  • 铜币129枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2006-11-27 19:39
<P>顶!!!!!111</P>
举报 回复(0) 喜欢(0)     评分
liaokobe
路人甲
路人甲
  • 注册日期2006-01-17
  • 发帖数36
  • QQ
  • 铜币52枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2006-03-25 11:03
cellsize的值是怎么计算出来的?就好像ArcMap的插值操作里面载入一个点集,自动就有一个cellsize数据,程序中如何获取这个数据呢?
举报 回复(0) 喜欢(0)     评分
Yoyozwf
路人甲
路人甲
  • 注册日期2006-02-15
  • 发帖数39
  • QQ
  • 铜币207枚
  • 威望0点
  • 贡献值0点
  • 银元0个
6楼#
发布于:2006-02-27 08:35
<P>我正在研究vc的算法,不过我用的是IDW方法生成的Raster,由于用的是对话框设置的一些属性,所以想整理下再贴上来,先贴一段检验license的代码,可以直接用的</P>
<P>BOOL GetSpatialAnalystLicense()<BR>{<BR> HRESULT hr;<BR> IUIDPtr ipUID(CLSID_UID);<BR> hr = ipUID->put_Value(CComVariant("esricore.SAExtension.1"));<BR> if(FAILED(hr))<BR>  return false;</P>
<P> IExtensionManagerAdminPtr ipExtManAdmResult(CLSID_ExtensionManager);</P>
<P> hr = ipExtManAdmResult->AddExtension(ipUID,0);<BR>    if(FAILED(hr))<BR>  return false;</P>
<P> IExtensionManagerPtr ipExtManSpa(ipExtManAdmResult);<BR> if(ipExtManSpa == 0)<BR>  return false;</P>
<P> IExtensionPtr ipExt;<BR> hr = ipExtManSpa->FindExtension(CComVariant("Spatial Analyst"),;ipExt);<BR> if(FAILED(hr))<BR>  return false;</P>
<P> IExtensionConfigPtr ipExtConfig(ipExt);<BR> if(ipExtConfig == 0)<BR>  return false;</P>
<P> esriExtensionState esriSpaExt;<BR> hr = ipExtConfig->get_State(;esriSpaExt);<BR> if(FAILED(hr))<BR>  return false;</P>
<P> if(esriSpaExt!= esriESUnavailable)<BR> {<BR>  hr = ipExtConfig->put_State(esriESEnabled);<BR>  if(FAILED(hr))<BR>   return false;<BR>  else <BR>   return true;</P>
<P> }</P>
<P> else<BR> {<BR>  MessageBox("no license!");<BR>  return false;<BR> }</P>
<P>}<BR></P>
举报 回复(0) 喜欢(0)     评分
Yoyozwf
路人甲
路人甲
  • 注册日期2006-02-15
  • 发帖数39
  • QQ
  • 铜币207枚
  • 威望0点
  • 贡献值0点
  • 银元0个
7楼#
发布于:2006-02-16 23:22
<P>支持!</P>
举报 回复(0) 喜欢(0)     评分
wavvylia
路人甲
路人甲
  • 注册日期2003-07-28
  • 发帖数384
  • QQ
  • 铜币555枚
  • 威望0点
  • 贡献值0点
  • 银元0个
8楼#
发布于:2005-11-03 15:26
<P>哪种语言不重要,关键是算法和思路。</P>
举报 回复(0) 喜欢(0)     评分
sulin
路人甲
路人甲
  • 注册日期2003-07-28
  • 发帖数158
  • QQ
  • 铜币501枚
  • 威望0点
  • 贡献值0点
  • 银元0个
9楼#
发布于:2005-10-17 10:08
<P>大家都是VB代码的多,又没有VC++代码的,希望大侠贴出来,参考参考!</P>
<P>好贴,狂顶!</P><img src="images/post/smile/dvbbs/em05.gif" />
举报 回复(0) 喜欢(0)     评分
上一页
游客

返回顶部