原文: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. dagger和butterknife使用冲突

    两者会冲突的主要原因是因为两者都有:javax.annotation.processing.Processor 于是在build.gradle中添加如下配置即可: // 注释冲突 packagingO ...

  2. C#程序员整理的Unity 3D笔记(十):Unity3D的位移、旋转的3D数学模型

    遇到一个想做的功能,但是实现不了,核心原因是因为对U3D的3D数学概念没有灵活吃透.故再次系统学习之—第三次学习3D数学. 本次,希望实现的功能很简单: 如在小地图中,希望可以动态画出Player当前 ...

  3. 纯代码添加约束条件(Auto Layout)

    Auto Layout 是一种基于约束的.描述性的布局系统.也就是使用约束条件来描述布局,View的Frame会根据这些描述来进行计算. 在iOS6.0以后加入了一个新类: NSLayoutConst ...

  4. ios - cordova 简介

    Cordova 是一个可以让 JS 与原生代码(包括 Android 的 java,iOS 的 Objective-C 等)互相通信的一个库,并且提供了一系列的插件类,比如 JS 直接操作本地数据库的 ...

  5. Java多线程的安全问题

    /*多线程的安全问题1.为什么会出现安全问题?因为程序在运行时,会出现一个线程在判断条件满足后,具备了执行资格,但没有运行代码后一个线程也判断了条件,也具备了执行资格,后一个线程运行了代码,但这时候, ...

  6. java培训(1-4节课)

    课程安排:JavaEE方向(控制台程序,GUI程序,Web程序,手机程序)(dos命令是控制台程序:QQ是GUI程序,放在计算机上:QQ空间是Web程序,放在腾讯公司) 讲课的13本教材:C语言,Ja ...

  7. 6.5 k个已排好序链表合并为一个排序链表

    1 建立链表(带哨兵位的)2 建立最小堆方法3 合并已排好序的k个链表 typedef int DataType; //建立链表 class Link { private: struct Node { ...

  8. Lua脚本之语法基础快速入门

    要 1.基本数据类型 2.Lua中的常用语句结构以及函数 3.Lua中的常用语句结构介绍 4.Lua中的库函数 目录[-] 一.基本数据类型 二.Lua中的常用语句结构以及函数 1.Lua中的常用语句 ...

  9. SQL技巧之排名统计

    有一道SQL笔试题是这样子的: 已知表信息如下: Department(depID, depName),depID 系编号,DepName系名 Student(stuID, name, depID)  ...

  10. 纯原生js移动端图片压缩上传插件

    前段时间,同事又来咨询一个问题了,说手机端动不动拍照就好几M高清大图,上传服务器太慢,问问我有没有可以压缩图片并上传的js插件,当然手头上没有,别慌,我去网上搜一搜. 结果呢,呵呵...诶~又全是基于 ...