建立shape文件(c#+AE)

  • Post author:
  • Post category:其他



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();

}

}

}