利用ARCENGINE生成等值线

  • 格式:doc
  • 大小:41.50 KB
  • 文档页数:4

我想利用ARCENGINE生成等值线,在生成等值线前需要先生成表面(surface),利用IInterpolationOp.IDW方法生成表面,可是在这个地方怎么设置Z字段和网格单位大小啊,请教!

已成功,谢谢

'--------------------生成等值线--------------------------

Public Sub Contour()

Dim pInterpolationOp As IInterpolationOp

Set pInterpolationOp = New RasterInterpolationOp

' Create the input point object

Dim pInputDataset As IGeoDataset

Dim pFeatLayer As IFeatureLayer

' Calls function to open the point dataset from disk

Set pFeatLayer = basSub.FindLayerName(frmMain.MapControl1, "水准测量点")

Set pInputDataset = pFeatLayer

' Define the search radius

Dim pRadius As IRasterRadius

Set pRadius = New RasterRadius

pRadius.SetVariable 12

'Create FeatureClassDescriptor using a value field

Dim pFCDescriptor As IFeatureClassDescriptor

Set pFCDescriptor = New FeatureClassDescriptor

pFCDescriptor.Create pFeatLayer.FeatureClass, Nothing, "沉降量"

'Set cellsize for output raster in the environment

Dim dCellSize As Double

dCellSize = 200

Dim pEnv As IRasterAnalysisEnvironment

Set pEnv = pInterpolationOp

pEnv.SetCellSize esriRasterEnvValue, dCellSize

'Perform the interpolation

Dim pOutRaster As IRaster

Set pOutRaster = pInterpolationOp.IDW(pFCDescriptor, 2, pRadius)

'Add output into ArcMap as a raster layer

Dim pOutRasLayer As IRasterLayer

Set pOutRasLayer = New RasterLayer

pOutRasLayer.CreateFromRaster pOutRaster

frmMain.MapControl1.AddLayer pOutRasLayer

End Sub 本文介绍c#写的利用ArcGIS Engine生成等值线的方法。

c#写的根据雨量站的降雨量值内插出降雨量等值线的功能。做几点说明:

根据离散点生成等值线:

(1)判断等值线shapefile图层临时存放路径是否存在,如果不存在则创建,如果存在并不为空则删除重建;

(2)加【降雨量】字段并赋值,生成等值线后删除所加字段;

(3)根据所选的字段利用IDW内插生成raster,再设定间距生成contour并标注。

---------------------------------以下是源代码------------------------

private void button1_Click(object sender, EventArgs e)

{

//定义等值线临时shapefile图层存放路径

string ls_TempSavePath = @"C:\HNYTTEMP" ;

if (!Directory.Exists(ls_TempSavePath))//如果目录不存在,则创建

Directory.CreateDirectory(ls_TempSavePath);

DirectoryInfo di = new DirectoryInfo(ls_TempSavePath);

FileInfo[] fi = null;

fi = di.GetFiles();

if (fi.Length != 0)//如果目录不为空,则删除目录,然后重建

{

Directory.Delete(ls_TempSavePath, true);

Directory.CreateDirectory(ls_TempSavePath);

}

IMap pMap = axMapControl1.Map;

IInterpolationOp pInterpolationOp = new RasterInterpolationOpClass();

// Create the input point object

IGeoDataset pInputDataset ;

//雨量站图层【点】

IFeatureLayer pFeatLayer = axMapControl1.get_Layer(0) as IFeatureLayer;

// Calls function to open the point dataset from disk

IFeatureClass pFeatCla = pFeatLayer.FeatureClass;

IFeature pFeature ;

IField pField = new FieldClass();

IFieldEdit pFieldEdit = pField as IFieldEdit;

pFieldEdit .Name_2 = "降雨量"; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;

pFieldEdit.Length_2 = 12;

pFieldEdit.IsNullable_2 = false;

pFieldEdit.DefaultValue_2 = 1111;

pFeatCla.AddField(pFieldEdit); //添加那个要用的字段进去

for(int ii=0;ii<pFeatCla.FeatureCount(null) - 1;ii++)

{

pFeature = pFeatCla.GetFeature(ii);

pFeature.set_Value(pFeature.Fields.FindField("降雨量"), 22+1999/(ii+2));

//要素字段赋值,这里是自己随便赋的值,仅做测试用

pFeature.Store();

}

pInputDataset = pFeatLayer as IGeoDataset;

// Define the search radius

IRasterRadius pRadius = new RasterRadiusClass();

object Missing = Type.Missing;

pRadius.SetVariable(12, ref Missing);

//Create FeatureClassDescriptor using a value field

IFeatureClassDescriptor pFCDescriptor = new FeatureClassDescriptorClass();

pFCDescriptor.Create( pFeatLayer.FeatureClass, null, "降雨量");

//Set cellsize for output raster in the environment

object cellSizeProvider = 20;

IRasterAnalysisEnvironment pEnv = pInterpolationOp as IRasterAnalysisEnvironment;

pEnv.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref cellSizeProvider);

//Perform the interpolation

IRaster pOutRaster = pInterpolationOp.IDW(pFCDescriptor as IGeoDataset, 2, pRadius, ref Missing) as IRaster;

//Add output into ArcMap as a raster layer

RasterLayer pOutRasLayer = new RasterLayerClass();