根据离散点画直线_AE根据离散点绘制等值线

AE绘制等值线的方法有两种:一种是通过TIN,一种是使用IDW等算法构造出Raster,再生成等值线图。

这里展示的是第二种方法。

///

/// 根据离散点生成等值线

///

public class Dengzhixian

{

public void DrawDZX(AxMapControl mapControl, ILayer layer)

{

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

string ls_TempSavePath = @"C:\cem\dzx";

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 = mapControl.Map;

//提供访问成员,控制一个GeoDataset插值

IInterpolationOp3 pInterpolationOp = new RasterInterpolationOpClass();

IFeatureLayer pFeatLayer = layer as IFeatureLayer;

// Calls function to open the point dataset from disk

IFeatureClass pFeatCla = pFeatLayer.FeatureClass;

// Create the input point object

//创建输入点对象

IGeoDataset pInputDataset = pFeatLayer as IGeoDataset;

// Define the search radius

//定义搜索半径,这个搜索是个什么搜索,尚未知。

IRasterRadius pRadius = new RasterRadiusClass();

object Missing = Type.Missing;

//这个数值是设置搜索范围,7表示离该点最近的7个点为搜索范围

pRadius.SetVariable(7, ref Missing);

//Create FeatureClassDescriptor using a value field

//根据数值字段创建一个FeatureClassDescriptor

IFeatureClassDescriptor pFCDescriptor = new FeatureClassDescriptorClass();

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

//Set cellsize for output raster in the environment

//设置栅格图像的单位大小,如果是以米为单位,大概就是25米,如果以度为单位就是0.001度

object cellSizeProvider = 0.06;

IRasterAnalysisEnvironment pEnv = pInterpolationOp as IRasterAnalysisEnvironment;

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

//Perform the interpolation

//差值计算

//出自帮助文档:指数距离。控制周围的意义插值后的价值点。不到一个百分点的影响力从遥远的高功率的结果。它可以是任何实数大于零,但最合理的结果将利用获得的0.5值3。一个常用的功率为2

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

//Add output into ArcMap as a raster layer

//IRasterLayer pOutRasLayer = new RasterLayerClass();

//pOutRasLayer.CreateFromRaster(pOutRaster);

//pOutRasLayer.Name = "栅格";

//pMap.AddLayer(pOutRasLayer);

IGeoDataset pGeoDataSet = pOutRaster as IGeoDataset;

IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory();

IWorkspace pShpWorkspace = pWorkspaceFactory.OpenFromFile(ls_TempSavePath, 0);

ISurfaceOp2 pSurfaceOp2 = new RasterSurfaceOpClass();

IRasterAnalysisEnvironment pRasterAnalysisEnvironment = pSurfaceOp2 as IRasterAnalysisEnvironment;

pRasterAnalysisEnvironment.Reset();

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

pRasterAnalysisEnvironment.OutWorkspace = pShpWorkspace;

double dInterval = 5; //间距

IGeoDataset pOutputDataSet = pSurfaceOp2.Contour(pGeoDataSet, dInterval, ref Missing, ref Missing);

IFeatureClass pFeatureClass = pOutputDataSet as IFeatureClass;

IFeatureLayer pFeatureLayer = new FeatureLayerClass();

pFeatureLayer.FeatureClass = pFeatureClass;

IGeoFeatureLayer pGeoFeatureLayer = pFeatureLayer as IGeoFeatureLayer;

pGeoFeatureLayer.DisplayAnnotation = true;

pGeoFeatureLayer.DisplayField = "Contour";

pGeoFeatureLayer.Name = "等值线";

pMap.AddLayer(pGeoFeatureLayer);

mapControl.Refresh();

}

}

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_39602615

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值