原文: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#)的更多相关文章

  1. ArcGIS Engine开发之图形查询

    图形查询是以用户通过鼠标操作生成的图形几何体为输入条件进行查询的查询,其查询结果为该几何体空间范围内的所有要素.常用的查询方式包括点选.线选.多边形选择.圆形选择和矩形选择等. 相关类与接口 图像查询 ...

  2. ArcGIS Engine开发之属性查询

    属性查询即基于空间数据的属性数据的查询,通过用户提交SQL语言中的where语句定义的查询条件,对属性数据进行搜索,从而得到查询结果的操作. 相关的类与接口 与属性查询功能相关的类主要有QureyFi ...

  3. ArcGIS Engine开发之地图基本操作(4)

    ArcGIS Engine开发中数据库的加载 1.加载个人地理数据库数据 个人地理数据库(Personal Geodatabase)使用Miscrosoft Access文件(*.mdb)进行空间数据 ...

  4. ArcGIS Engine开发前基础知识(3)

    对象模型图 一.对象模型图中的类与接口 ArcGIS Engine 提供大量的对象,这些对象之间存在各种各样的关系,如继承.组合.关联等.对象模型图(Object model diagram,ODM) ...

  5. ArcGIS Engine开发前基础知识(2)

    ArcGIS基本控件简介 ArcGIS Engine控件是一组可视化的开发组件,每个ArcGIS Engine控件都是一个COM组件.这些组件包括MapControl,PageLayoutContro ...

  6. ArcGIS Engine开发前基础知识(1)

    ArcGIS二次开发是当前gis领域的一项重要必不可少的技能.下面介绍它的基本功能 一.ArcGIS Engine功能 在使用之前首先安装和部署arcgis sdk,(在这里不在赘述相关知识)可以实现 ...

  7. 【转载】Python与ArcGIS Engine的集成

    本文转载自Fransico<Python与ArcGIS Engine的集成>   1 在Python中调用AO类库 1.1  准备工作 本文所使用环境:ArcGIS 10.0.Python ...

  8. ArcGIS Engine控件运行许可(转)

    ArcGIS Engine控件运行许可   Runtime绑定: 在ArcGIS Engine10.0中,许可方式发生了一定的变化,ArcGis10有一个新的要求---runtime绑定.就是在任何A ...

  9. ArcGIS Engine开发之旅03--ArcGIS Engine中的控件

    原文:ArcGIS Engine开发之旅03--ArcGIS Engine中的控件 制图控件,如MapControl.PageLayoutControl,其中MapControl控件主要用于地理数据的 ...

随机推荐

  1. Error:(6, 0) No such property: outputDir for class: org.gradle.api.internal.project.DefaultProject_Decorated

    在学习greenDao过程中build.gradle文件中出现这个错误,找了半天不知道为什么.代码我是在git上下载的Demo,按理说应该是没问题的.到最后发现缺少了一个关键字Def // 这样有问题 ...

  2. SQL Server高级内容之表表达式和复习

    1. 表表达式 (1) 将表作为一个源或将查询的一个结果集作为一个源,对源做处理,然后得到一个新的数据源,对其进行查询.  (2)表表达式放在from子句中 (3)派生表,将表的查询得到的结果集作为一 ...

  3. linux字符设备驱动学习笔记(一):简单的字符设备驱动

    最近在鼓捣lnux字符设备驱动,在网上搜集的各种关于linux设备驱动的代码和注释,要么是针对2.4的,要么是错误百出,根本就不能运行成功,真希望大家在发博客的时候能认真核对下代码的正确性,特别是要把 ...

  4. SVN服务器从Windows迁移到Linux

    gerui 2013.9.14 ge-rui@sohu.com 一.备份VisualSVN项目 1. 现在要使用Linux作为svn服务器,之前是在windows Server 2008上的,用的是V ...

  5. 第21条:理解Objective-C错误模型

    首先要注意的是: “自动引用计数”(Automatic Reference Counting, ARC,参见第30条)在默认情况下不是“异常安全的”(exception safe).具体来说,这意味着 ...

  6. ios数据库FMDB

    一.下载fmdb类库 二.添加libsqulite3.0.dylib 三.添加头文件#import "FMDB.h" 四.打开数据库 a.设置路径NSString *path = ...

  7. 问题解决:form表单的button按钮问题

    最近写了一个KendoUI 的kendowindow组件,组件里包含了一个form表单,表单里有一个button,不是提交保存的按钮,而是链接到另一个kendowindow的按钮,跟请求提交毫无关系, ...

  8. JavaScript实现点击按钮弹出输入框,点确定后添加li组件到ul组件里

    JavaScript实现点击按钮弹出输入框,点确定后添加li组件到ul组件里 <!doctype html> <html manifest="lab4.manifest&q ...

  9. SharePoint Client Add Folder,file to Library

    public void UploadDocument(string siteURL, string documentListName, string documentListURL, string d ...

  10. Google设计理念

    Google的十大信条 我们首次拟就这“十大信条”还是在Google刚刚成立没几年的时候.此后,我们时常重新审视这份清单,看看它是否依然适用.我们希望这些信条永不过时,而您也可以监督我们是否遵守了这些 ...