ArcGIS Engine生成等值线(C#)
本文介绍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();
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);
axMapControl1.Refresh();
//删除【降雨量】字段
IFields pFields = pFeatCla.Fields;
int lFieldnumber = pFields.FindField("降雨量");
IField pField1 = pFields.get_Field(lFieldnumber);
pFeatCla.DeleteField(pField);
}
acelee
ArcGIS Engine生成等值线(C#)的更多相关文章
- ArcGIS Engine开发之图形查询
图形查询是以用户通过鼠标操作生成的图形几何体为输入条件进行查询的查询,其查询结果为该几何体空间范围内的所有要素.常用的查询方式包括点选.线选.多边形选择.圆形选择和矩形选择等. 相关类与接口 图像查询 ...
- ArcGIS Engine开发之属性查询
属性查询即基于空间数据的属性数据的查询,通过用户提交SQL语言中的where语句定义的查询条件,对属性数据进行搜索,从而得到查询结果的操作. 相关的类与接口 与属性查询功能相关的类主要有QureyFi ...
- ArcGIS Engine开发之地图基本操作(4)
ArcGIS Engine开发中数据库的加载 1.加载个人地理数据库数据 个人地理数据库(Personal Geodatabase)使用Miscrosoft Access文件(*.mdb)进行空间数据 ...
- ArcGIS Engine开发前基础知识(3)
对象模型图 一.对象模型图中的类与接口 ArcGIS Engine 提供大量的对象,这些对象之间存在各种各样的关系,如继承.组合.关联等.对象模型图(Object model diagram,ODM) ...
- ArcGIS Engine开发前基础知识(2)
ArcGIS基本控件简介 ArcGIS Engine控件是一组可视化的开发组件,每个ArcGIS Engine控件都是一个COM组件.这些组件包括MapControl,PageLayoutContro ...
- ArcGIS Engine开发前基础知识(1)
ArcGIS二次开发是当前gis领域的一项重要必不可少的技能.下面介绍它的基本功能 一.ArcGIS Engine功能 在使用之前首先安装和部署arcgis sdk,(在这里不在赘述相关知识)可以实现 ...
- 【转载】Python与ArcGIS Engine的集成
本文转载自Fransico<Python与ArcGIS Engine的集成> 1 在Python中调用AO类库 1.1 准备工作 本文所使用环境:ArcGIS 10.0.Python ...
- ArcGIS Engine控件运行许可(转)
ArcGIS Engine控件运行许可 Runtime绑定: 在ArcGIS Engine10.0中,许可方式发生了一定的变化,ArcGis10有一个新的要求---runtime绑定.就是在任何A ...
- ArcGIS Engine开发之旅03--ArcGIS Engine中的控件
原文:ArcGIS Engine开发之旅03--ArcGIS Engine中的控件 制图控件,如MapControl.PageLayoutControl,其中MapControl控件主要用于地理数据的 ...
随机推荐
- C#学习笔记9:C#中的变量、转义符、显式转换和隐式转换
1.变量的特性:可以重复的赋值 int a=4; a=9; 2.常量:const int number=10:这个常量不可变 如果你声明的变量,不想被其他人修改,那么就修饰为常量 声明在类的下面, ...
- poj2594 (最小路径覆盖 + floyd)
题目链接 http://poj.org/problem?id=2594) 题目大意: 一个有向图中, 有若干条连接的路线, 问最少放多少个机器人,可以将整个图上的点都走过. 最小路径覆盖问题. 分析 ...
- 解决从linux本地文件系统上传文件到HDFS时的权限问题
当使用 hadoop fs -put localfile /user/xxx 时提示: put: Permission denied: user=root, access=WRITE, inode=& ...
- THP Transparent HugePages关闭
ambari 安装Hortonworks HDP 时在检测host异常 The following hosts have Transparent Huge Pages (THP) enabled.TH ...
- Switch的表达式的要求
在java中switch后的表达式的类型只能为以下几种:byte.short.char.int(在Java1.6中是这样),在java1.7后支持了对string的判断.
- c# 中模拟一个模式匹配及匹配值抽取
摘一段模式的说明, F#的: msdn是这么描述它的:“模式”是用于转换输入数据的规则.模式将在整个 F# 语言中使用,采用多种方式将数据与一个或多个逻辑结构进行比较.将数据分解为各个构成部分,或从数 ...
- props验证
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- C#与C++相比较之STL篇
引言 Program into Your Language, Not in It--<代码大全>.如何深入一门语言去编程?我认为有三步:熟悉它:知道它的局限性:扩展它.如何熟悉?不必说,自 ...
- Python3 面向对象 高级编程
正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性. class Student(object): pass 然后,尝试 ...
- NOSQL之【Redis学习:配置说明】
# yes:后台运行:no:不是后台运行(老版本默认) daemonize yes # redis的进程文件 pidfile /var/run/redis.pid # 端口 port # bind_a ...