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

[讨论]内插等值线和等值面的奇怪现象

楼主#
更多 发布于:2006-03-31 16:28
<P><BR>最近在研究如何生成等值面,如果由等值线来生成的话,会比较麻烦,可是直接把栅格分类填色的话,和等值线不吻合,我无意中发现,如果把float栅格转换成integer型再填色,好像就没有这个问题,吻合的还不错,谁能解答?</P>
<P>Public Function ContourPolygon(sRasterPath As String, sRasterName As String, nInterval As Double, pMap As IMap)<BR>    <BR>    Dim pMathOp As IMathOp<BR>    Set pMathOp = New RasterMathOps</P>
<P>    Dim pInputDataset As IGeoDataset<BR>    <BR>    Set pInputDataset = OpenRasterDataset(sRasterPath, sRasterName)</P>
<P>    Dim pOutputDataset As IGeoDataset<BR>    Set pOutputDataset = pMathOp.Int(pInputDataset)<BR>    <BR>    Dim pRaster As IRaster<BR>    Set pRaster = pOutputDataset<BR>    Dim pRasterBands As IRasterBandCollection<BR>    Set pRasterBands = pRaster</P>
<P>    Dim pRasterBand As IRasterBand<BR>    Set pRasterBand = pRasterBands.Item(0)</P>
<P>    Dim pStats As IRasterStatistics<BR>    Set pStats = pRasterBand.Statistics</P>
<P>    Dim nClass As Long<BR>    nClass = CLng((pStats.Maximum - pStats.Minimum) / nInterval) + 1<BR>       <BR>    <BR>    Dim pRasterLy As IRasterLayer<BR>    Set pRasterLy = New RasterLayer<BR>    pRasterLy.CreateFromRaster pRaster<BR>    pRasterLy.Name = "等值面"<BR>    <BR>    'UsingRasterStretchColorRampRender:方法来自AO Help<BR>    ' Get raster input from layer<BR>    <BR>    ' 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 = nClass</P>
<P>'    pRasRen.Update</P>
<P>    ' Set raster for the renderer and update</P>
<P>    ' Define two colors<BR>    Dim pFromColor As IColor<BR>    Dim pToColor As IColor<BR>    Set pFromColor = New RgbColor<BR>    pFromColor.RGB = RGB(192, 101, 73)<BR>    Set pToColor = New RgbColor<BR>    pToColor.RGB = RGB(43, 255, 195)</P>
<P>    ' Create color ramp<BR>    Dim pRamp As IAlgorithmicColorRamp<BR>    Set pRamp = New AlgorithmicColorRamp<BR>    pRamp.Size = nClass<BR>    pRamp.FromColor = pFromColor<BR>    pRamp.ToColor = pToColor<BR>    pRamp.Algorithm = esriCIELabAlgorithm<BR>    pRamp.CreateRamp True</P>
<P>    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>        pClassRen.Label(i) = "vaule" ; CStr(i)<BR>    Next i</P>
<P>    pRasRen.Update</P>
<P>    ' Plug this colorramp into renderer and select a band</P>
<P><BR>    ' Update the renderer with new settings and plug into layer</P>
<P>    Set pRasterLy.Renderer = pClassRen<BR>    pMap.AddLayer pRasterLy<BR>    pMap.MoveLayer pRasterLy, pMap.LayerCount() - 1</P>
<P>    Set pRamp = Nothing<BR>    Set pClassRen = Nothing<BR>    Set pFSymbol = Nothing<BR></P>
喜欢0 评分0
cbh007
路人甲
路人甲
  • 注册日期2005-12-29
  • 发帖数3
  • QQ
  • 铜币114枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2006-04-13 12:12
等值线,应该是四舍五入后得到的整型值来画的,所以。。。
举报 回复(0) 喜欢(0)     评分
cbh007
路人甲
路人甲
  • 注册日期2005-12-29
  • 发帖数3
  • QQ
  • 铜币114枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2006-04-13 12:17
等值线,应该是四舍五入后得到的整型值来画的,所以。。。
举报 回复(0) 喜欢(0)     评分
游客

返回顶部