关于泰森多边形(转两篇)

 1  private   void  CreatVoronoi()
 2          {
 3               // 判定图层是否存在
 4              IMap pMap  =  axMapControl1.Map;
 5               if  (pMap.LayerCount  ==   0 )
 6              {
 7                  MessageBox.Show( " 图层不存在! " " 提示 " , MessageBoxButtons.OK, MessageBoxIcon.Information);
 8                   return ;
 9              }
10               int  k;
11               for  (k  =   0 ; k  <  axMapControl1.LayerCount; k ++ )
12                   if  (axMapControl1.get_Layer(k).Name  ==  tbrCombo.Items[tbrCombo.SelectedIndex].ToString())
13                       break ;
14              IFeatureLayer pFeatureLayer  =  (IFeatureLayer)axMapControl1.get_Layer(k);
15               // IFeatureLayer pFeatureLayer = (IFeatureLayer)pMap.get_Layer(0);
16              IFeatureClass pFeatureClass  =  pFeatureLayer.FeatureClass;
17               // 判断图层的类型是否为点状图层
18               if  (pFeatureClass.ShapeType  !=  esriGeometryType.esriGeometryPoint)
19              {
20                  MessageBox.Show( " 图层的要素不是Point类型,请重新选择图层! " " 提示 " , MessageBoxButtons.OK, MessageBoxIcon.Information);
21                   return ;
22              }
23                       
24               int  featureCount  =  pFeatureClass.FeatureCount( null );
25               // 如果点数小于2则构不成三角形,退出程序
26               if  (featureCount  <   3 )
27              {
28                  MessageBox.Show( " 输入的点数小于3个,不能构成三角形! " " 提示 " , MessageBoxButtons.OK, MessageBoxIcon.Information);
29                   return ;
30              }
31              MessageBox.Show(featureCount.ToString());
32              IGeoDataset pGDS  =  (IGeoDataset)pFeatureClass;
33              IEnvelope pEnv  =  (IEnvelope)pGDS.Extent;
34              pEnv.SpatialReference  =  pGDS.SpatialReference;
35              IFields pFields  =  pFeatureClass.Fields;
36              IField pHeightFiled  =  pFields.get_Field(pFields.FindField( " ELEV " ));
37              ITinEdit pTinEdit  =   new  TinClass();
38              pTinEdit.InitNew(pEnv);
39               object  Missing  =  Type.Missing;
40              pTinEdit.AddFromFeatureClass(pFeatureClass,  null null  ,  null , esriTinSurfaceType.esriTinMassPoint,  ref  Missing  );
41             
42              IWorkspace pWorkspace  =  OpenWorkspace(InitialPath);
43              IFeatureClass pFClass;
44              pFClass  =  CreateFeatureClass(pWorkspace, esriGeometryType.esriGeometryPolygon,  " Voronoi " 1 );
45              ITinNodeCollection pTinNodeCollection  =  (ITinNodeCollection)pTinEdit;
46              MessageBox.Show(pTinNodeCollection.NodeCount.ToString());
47              pTinNodeCollection.ConvertToVoronoi;
48       Regions(pFClass,  null null " NodeIndex " " ddd " );
49              IFeatureLayer pFVLayer  =   new  FeatureLayerClass();
50              pFVLayer.FeatureClass  =  pFClass;
51              pFVLayer.Name  =  pFClass.AliasName;
52              ILayer pVLayer  =  (ILayer)pFVLayer;
53              axMapControl1.AddLayer(pFVLayer);
54              axTOCControl1.Update();
55  }

 

二篇:

 1  /* ArcEngin提供了TIN组件,可以利用等高线或离散的高程值生成TIN的方法,其实等高线和离散点都可以看作是要素类—feature class
 2  AE的组件TIN提供了一个非常重要的接口ITinEdit利用这个接口,可以方便地生成三维的TIN,
 3  思路:1找到一个数据集,作为生成TIN的数据源,我们用shp文件来做,它必须有一个字段里含用高程值,2.利用ITinEdit接口生成TIN
 4  重要的是这两个方法:InitNew(int pExtent,,IEnvelope)它需要一个IEnvelope接口的对象
 5 
 6  以及方法:SetSpatialReference(int pSpatialReference,ISPatialReference);因此我们首先创建一个ISpatialReference接口对象,利用get_SpatialReference属性得到要素类的空间引用并将空间引用赋给ISpatialReference接口对象,再创建一个IEnvelope接口对象,利用putref_ SpatialReference属性将前面创建的ISpatialReference接口对象的空间引用赋给IEnvelope接口对象,再创建一个TIN对象并得到其ITinEdit接口,利用此接口的InitNew方法创建TIN,而前面创建的IEnvelope接口对象作为该方法的输入对象,这样就可以生成TIN了.
 7  3.上面已能生成TIN,但生成的TIN并没有高程信息,要获得高程字段,再生成三维TIN,这要用到IFields接口和IField的指针,用其get_Fields方法获取高程信息.
 8 
 9  代码如下: */
10  // 创建TIN数据,同时根据以有的要素类来创建泰森多边形
11   
12  Public Sub CreateTin()
13    Dim TinSurface As ITin
14    Set TinSurface  =  New Tin
15    Dim FeatClass As IFeatureClass
16    Dim Pdocment As IMxDocument
17    Set Pdocment  =  ThisDocument
18    Dim pFeatureLayer As IFeatureLayer
19    Set pFeatureLayer  =  Pdocment.ActiveView.FocusMap.Layer( 0 )
20    
21    Dim pEnv As IEnvelope
22    Set pEnv  =  pFeatureLayer.AreaOfInterest.Envelope
23    
24    Dim pTinEdit As ITinEdit
25    Set pTinEdit  =  New Tin
26    pTinEdit.InitNew pEnv
27    pTinEdit.SaveAs  " H:\New Folder\tin\a3 " , False  ' 创建放的路径
28    pTinEdit.StartEditing
29      
30    
31    Set FeatClass  =  pFeatureLayer.FeatureClass
32    
33    Dim pTagFeild As IField
34    Set pTagFeild  =  New Field
35    
36    
37    Dim pHightFeild As IField
38    Set pHightFeild  =  FeatClass.Fields.Field( 0 )
39     ' MsgBox pHightFeild.Name
40    
41  ' //其中FeatClass.Fields.Field(2), 是要素类中的某一字段  作为Tin的高程信息
42    pTinEdit.AddFromFeatureClass FeatClass, Nothing, FeatClass.Fields.Field( 2 ), FeatClass.Fields.Field( 0 ), esriTinMassPoint
43    pTinEdit.StopEditing (True)
44    pTinEdit.Refresh
45    
46    Dim pTinNodeCollection As ITinNodeCollection
47    Set pTinNodeCollection  =  pTinEdit
48    MsgBox pTinNodeCollection.NodeCount
49    Dim ptin As ITin
50    Set ptin  =  pTinEdit
51    MsgBox ptin.DataNodeCount
52    Dim pNewfeatureclass As IFeatureClass
53    Set pNewfeatureclass  =  OpenFeatureClass_Example
54   
55    MsgBox ptin.DataEdgeCount
56        /// 创建泰森多边形  OpenFeatureClass_Example是 找到的要素类图层
57    pTinNodeCollection.ConvertToVoronoiRegions OpenFeatureClass_Example, Nothing, Nothing,  " NodeIndex " " asdf "
58    
59  End Sub
60   
61  // 添加要素类的图层函数
62  Public Function OpenFeatureClass_Example() As IFeatureClass
63    Dim pWorkspaceFactory As IWorkspaceFactory
64    Set pWorkspaceFactory  =  New ShapefileWorkspaceFactory
65    Dim pFeatureWorkspace As IFeatureWorkspace
66    Set pFeatureWorkspace  =  pWorkspaceFactory.OpenFromFile( " H:\New Folder " 0 )
67   
68  '   Dim pWorkspaceEdit  As IWorkspaceEdit
69  '   Set pWorkspaceEdit = pFeatureWorkspace
70  '   pWorkspaceEdit.StartEditing True
71    
72    Dim pFeatureClass As IFeatureClass
73    Set pFeatureClass  =  pFeatureWorkspace.OpenFeatureClass( " Vor3 " )
74    Set OpenFeatureClass_Example  =  pFeatureClass
75   end function

 

 

 

转载于:https://www.cnblogs.com/gxiang/archive/2010/04/07/1705947.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值