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

 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, nullnull , 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, nullnull"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

 

 

 

posted @ 2010-04-07 09:00    阅读(1106)  评论(2编辑  收藏  举报