建立shape文件(c#+AE)

本文介绍如何使用ArcGIS API创建Shapefile文件,并演示了创建点和线要素的具体步骤。包括设置工作空间、定义几何类型、创建字段及写入数据的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

           string strFolder = "D://zt";
            string strName = "MyShape";
            string strShapeFieldName = "Shape";

            IFeatureWorkspace pFWS;
            IWorkspaceFactory pWorkSpaceF;

            pWorkSpaceF = new ShapefileWorkspaceFactoryClass();
            pFWS = pWorkSpaceF.OpenFromFile(strFolder, 0) as IFeatureWorkspace;

            IFields pFields;
            IFieldsEdit pFieldsEdit;
            pFields = new FieldsClass();

            pFieldsEdit = pFields as IFieldsEdit;

            IField pField;
            IFieldEdit pFieldEdit;
            pField = new FieldClass();
            pFieldEdit = pField as IFieldEdit;

            pFieldEdit.Name_2 = strShapeFieldName;
            pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;

            IGeometryDef pGeomDef;
            IGeometryDefEdit pGeomDefEdit;
            pGeomDef = new GeometryDefClass();

            pGeomDefEdit = pGeomDef as IGeometryDefEdit;
            pGeomDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon;
            pGeomDefEdit.SpatialReference_2 = new UnknownCoordinateSystemClass();


            pFieldEdit.GeometryDef_2 = pGeomDef;

            pFieldsEdit.AddField(pField);


            IFeatureClass pFeatureClass;

            pFeatureClass = pFWS.CreateFeatureClass(strName, pFields, null, null, esriFeatureType.esriFTSimple, strShapeFieldName, "");

 

==========================================================================

public   void   ShpPointSave3(string   LC,   string   LE,   object   id1,   object   id2,   object   id3,   object   idEle)  
                  {  
                          //  
                          object   newVert   =   null;  
                          object   newField   =   null;  
                          string   gpxPath   =   "";  
                          string   shpPath   =   "";  
                          string   pointId   =   "";  
                          string   pointName   =   "";  
                          string   pointEle   =   "";  
                          string   pointCode   =   "";  
                          string   s   =   "";  
                          double   pointLon   =   0;  
                          double   pointLat   =   0;  
                          int   pos   =   0;  
                          gpxPath   =   txtGpxPath.Text.ToString().Trim()   +   "//"   +   LC   +   ".gpx";  
                          shpPath   =   txtShpPath.Text.ToString().Trim()   +   "//"   +   LC   +   ".shp";  
   
                          //if()  
                          axShapeFiles1.OpenShape(shpPath,   ArcViewShapeFileOCX_crp.eNew.shpCreate,   ArcViewShapeFileOCX_crp.eShapeType.shpPoint);  
                          newField   =   axShapeFiles1.ShapeFields.CreateField(id1.ToString(),   ArcViewShapeFileOCX_crp.eFieldType.shpText,   30,   0);  
                          newField   =   axShapeFiles1.ShapeFields.CreateField(id2.ToString(),   ArcViewShapeFileOCX_crp.eFieldType.shpText,   50,   0);  
                          newField   =   axShapeFiles1.ShapeFields.CreateField(id3.ToString(),   ArcViewShapeFileOCX_crp.eFieldType.shpText,   30,   0);  
                          newField   =   axShapeFiles1.ShapeFields.CreateField(idEle.ToString(),   ArcViewShapeFileOCX_crp.eFieldType.shpText,   30,   0);  
                          axShapeFiles1.AppendFieldDefs();  
   
                          DataSet   ds   =   new   DataSet();  
                          DataTable   dt   =   new   DataTable();  
                          ds.ReadXml(gpxPath);  
                          dt   =   ds.Tables["wpt"];  
                          if   (dt   ==   null)  
                          {  
                                  ds.Dispose();  
                                  return;  
                          }  
                          for   (int   i   =   0;   i   <   dt.Rows.Count;   i++)  
                          {  
                                  s   =   dt.Rows[i]["name"].ToString().Trim();  
                                  pos   =   s.IndexOf("   ");  
                                  pointCode   =   s.Substring(0,   pos);  
                                  s   =   s.Replace(pointCode,   "").Trim();  
                                  pos   =   s.IndexOf("   ");  
                                  pointName   =   s.Substring(0,   pos);  
                                  pointId   =   s.Substring(pos);  
                                  pointEle   =   dt.Rows[i]["ele"].ToString().Trim();  
                                  //  
   
                                  object   o_pointId   =   (object)pointId;  
                                  object   o_pointName   =   (object)pointName;  
                                  object   o_pointEle   =   (object)pointEle;  
                                  object   o_pointCode   =   (object)pointCode;  
                                  axShapeFiles1.ShapeFields.get_Item(ref(id1)).set_Value(ref(o_pointId));  
                                  axShapeFiles1.ShapeFields.get_Item(ref(id2)).set_Value(ref(o_pointName));  
                                  axShapeFiles1.ShapeFields.get_Item(ref(id3)).set_Value(ref(o_pointCode));  
                                  axShapeFiles1.ShapeFields.get_Item(ref(idEle)).set_Value(ref(o_pointEle));  
   
                                  pointLat   =   Convert.ToDouble(dt.Rows[i]["lat"]);  
                                  pointLon   =   Convert.ToDouble(dt.Rows[i]["lon"]);  
                                  newVert   =   axShapeFiles1.Vertices.AddVertice(pointLon,   pointLat,   0,   null,   null,   0,   null);  
                                  axShapeFiles1.CreateShape();  
                          }  
                  }  
   
                  public   void   ShpLineSave2(string   LC,   string   LE)  
                  {  
                          //  
                          object   newField   =   null;  
                          object   newVert   =   null;  
                          object   Code   =   "Code";  
                          object   Name   =   "Name";  
                          string   gpxPath   =   "";  
                          string   shpPath   =   "";  
                          string   lineId   =   "";  
                          string   lineName   =   "";  
                          //string   s   =   "";  
                          string   lineLon   =   "";  
                          string   lineLat   =   "";  
                          int   pos   =   0;  
                          gpxPath   =   txtGpxPath.Text.ToString().Trim()   +   "//"   +   LC   +   ".gpx";  
                          shpPath   =   txtShpPath.Text.ToString().Trim()   +   "//"   +   LC   +   ".shp";  
   
                          //if()  
                          axShapeFiles1.OpenShape(shpPath,   ArcViewShapeFileOCX_crp.eNew.shpCreate,   ArcViewShapeFileOCX_crp.eShapeType.shpPolyLine);  
                          newField   =   axShapeFiles1.ShapeFields.CreateField(Code.ToString(),   ArcViewShapeFileOCX_crp.eFieldType.shpText,   20,   0);  
                          newField   =   axShapeFiles1.ShapeFields.CreateField(Name.ToString(),   ArcViewShapeFileOCX_crp.eFieldType.shpText,   50,   0);  
                          axShapeFiles1.AppendFieldDefs();  
   
                          DataSet   ds   =   new   DataSet();  
                          DataTable   dt   =   new   DataTable();  
                          ds.ReadXml(gpxPath);  
                          dt   =   ds.Tables["trk"];  
                          if   (dt   ==   null)  
                          {  
                                  ds.Dispose();  
                                  return;  
                          }  
                          /*for   (int   i   =   0;   i   <   dt.Rows.Count;   i++)  
                          {  
                                  s   =   dt.Rows[i]["name"].ToString().Trim();  
                                  pos   =   s.IndexOf("   ");  
                                  lineId   =   s.Substring(0,   pos);  
                                  lineName   =   s.Substring(pos);  
   
                                  DataRelation   dr   =   ds.Tables["trk"].ChildRelations[0];  
                                  for   (int   j   =   0;   j   <   ds.Tables["trk"].Rows.Count;   j++   )  
                                  {  
                                          //lineLat=Convert.ToDouble()  
                                          //newVert=axShapeFiles1.Vertices.AddVertice()  
                                  }  
                                  //foreach(DataRow   row   in   dt.Rows[i]["trkseg"])  
                          }*/  
                          DataRelation   dralTrk   =   ds.Tables["trk"].ChildRelations[0];  
                          string   trkname   =   "";  
                          string   trkcode   =   "";  
                          string   trkpname   =   "";  
                          double   trklon   =   0;  
                          double   trklat   =   0;  
                          double   trkele   =   0;  
                          //short   n   =   0;  
   
                          //trk  
                          foreach   (DataRow   drTrk   in   ds.Tables["trk"].Rows)  
                          {  
                                  //DataTable   dtTrk   =   new   DataTable();  
                                  trkname   =   drTrk["name"].ToString();  
                                  string[]   s   =   trkname.Split('   ');  
                                  trkcode   =   s[0];  
                                  trkpname   =   s[1];  
   
                                  object   o_trkcode   =   (object)trkcode;  
                                  object   o_trkpname   =   (object)trkpname;  
                                  axShapeFiles1.ShapeFields.get_Item(ref(Code)).set_Value(ref(o_trkcode));  
                                  axShapeFiles1.ShapeFields.get_Item(ref(Name)).set_Value(ref(o_trkpname));  
                                   
                                  //trkreg  
                                  foreach   (DataRow   drTrkreg   in   drTrk.GetChildRows(dralTrk))  
                                  {  
                                          DataRelation   dralTrkreg   =   ds.Tables[drTrkreg.Table.TableName].ChildRelations[0];  
   
                                          /*object   o_trkcode   =   null;  
                                          object   o_trkpname   =   null;  
                                          axShapeFiles1.ShapeFields.get_Item(ref(Code)).set_Value(ref())*/  
                                          //point  
                                          int   n   =   1;  
                                          foreach   (DataRow   drLine   in   drTrkreg.GetChildRows(dralTrkreg))  
                                          {  
                                                  trklat   =   Convert.ToDouble(drLine["lat"].ToString());  
                                                  trklon   =   Convert.ToDouble(drLine["lon"].ToString());  
                                                  trkele   =   Convert.ToDouble(drLine["ele"].ToString());  
                                                  short   m   =   (short)n;  
                                                  newVert   =   axShapeFiles1.Vertices.AddVertice(trklon,   trklat,   m,   null,   trkele,   0,   null);  
                                                  n   =   (int)m;  
                                                  n   =   n   +   1;  
                                          }  
                                          axShapeFiles1.CreateShape();  
                                  }  
                          }  
                  }  

 

 

 

 

栅格计算器是一种常见的计算机应用程序,它允许用户在一个矩形的网格中输入数值,然后对这些数值进行各种计算。在本文中,我们将使用C#AE(Adobe After Effects)来实现一个简单的栅格计算器功能。 首先,在AE中创建一个新的合成(Composition),并添加一个文本层(Text Layer)。将文本层的内容设置为“栅格计算器”,并将其放置在合成的顶部。 接下来,我们需要创建一个矩形网格,以便用户可以输入数值。我们可以使用AE中的形状层(Shape Layer)来创建一个矩形。在AE中,选择“Layer”->“New”->“Shape Layer”来创建一个新的形状层。选择“Rectangle Tool”(矩形工具),并在画布上绘制一个矩形。然后,选择矩形图层,打开“Add”->“Fill”属性,选择一种颜色填充矩形。 现在,我们需要将矩形网格分成若干个小格子,以便用户可以在其中输入数值。我们可以使用C#编写一个简单的脚本来完成这个任务。在Visual Studio中创建一个新的C#控制台应用程序,并将其命名为“GridCalculator”。 在GridCalculator项目中,我们需要添加一个引用,以便我们可以访问AE中的COM(Component Object Model)对象。选择“Project”->“Add Reference”,然后在“COM”选项卡中找到“Adobe After Effects XX.X Type Library”(其中XX.X表示你的AE版本号),并添加它。 接下来,我们需要编写一个C#脚本来创建网格。以下是一个示例脚本: ```csharp using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using AE_COM; namespace GridCalculator { class Program { static void Main(string[] args) { // Create a new AE project var ae = new Application(); var proj = ae.NewProject(); // Create a new composition var comp = proj.Items.AddComp("Grid Calculator", 1920, 1080, 1.0, 10.0, 30); // Add a new shape layer var shapeLayer = comp.Layers.AddShape(); shapeLayer.Name = "Grid"; // Create a new rectangle shape var rect = new Shape(); var rectGroup = new ShapeGroup(); rectGroup.AddShape(rect); shapeLayer.Property("Contents").AddProperty("ADBE Vector Group").SetValue(rectGroup); // Set the rectangle size rect.Size = new PointF(400, 400); // Create the grid var rows = 10; var cols = 10; var cellSize = new PointF(rect.Size.X / cols, rect.Size.Y / rows); for (int row = 0; row < rows; row++) { for (int col = 0; col < cols; col++) { // Create a new rectangle shape for each cell var cell = new Shape(); var cellGroup = new ShapeGroup(); cellGroup.AddShape(cell); shapeLayer.Property("Contents").AddProperty("ADBE Vector Group").SetValue(cellGroup); // Set the cell position and size var pos = new PointF(col * cellSize.X, row * cellSize.Y); cell.Position = pos; cell.Size = cellSize; } } // Save the project proj.Save(@"C:\GridCalculator.aep"); // Quit AE ae.Quit(); } } } ``` 在上面的脚本中,我们首先创建了一个新的AE项目和一个新的合成。然后,我们添加了一个新的形状层,并在其中创建了一个矩形。接下来,我们使用嵌套循环创建了一个网格,其中每个单元格都是一个独立的矩形。 最后,我们保存了AE项目,并退出AE应用程序。 现在,我们可以在AE中打开“GridCalculator.aep”文件,并将生成的网格图层拖放到我们之前创建的合成中。用户现在可以在每个单元格中输入数值,并使用AE中的表达式(Expressions)功能对这些数值进行计算。 总的来说,使用C#AE来创建栅格计算器功能是非常简单的。通过利用AE的COM对象和C#的编程能力,我们可以轻松地创建一个自定义的栅格计算器工具,以满足我们的具体需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值