zoukankan      html  css  js  c++  java
  • shp to txt arcgis

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.IO;
    using System.Text;
    using System.Windows.Forms;
    using ESRI.ArcGIS.Controls;
    using ESRI.ArcGIS.DataSourcesFile;
    using ESRI.ArcGIS.Carto;
    using ESRI.ArcGIS.Geometry;
    using ESRI.ArcGIS.Geodatabase;
    
    namespace ShpTxt
    {
        public partial class FrmShapfile : Form
        {
            public FrmShapfile()
            {
                InitializeComponent();
            }
            string InTxtpath;
            string InTxtName;
            string OutShapepath;
            string OutShapeName;
    
            string InShapepath;
            string InShapeName;
            string OutTxtPath;
            string OutTxtName;
    
            ISpatialReference pSRef = new ProjectedCoordinateSystemClass();
           
            private void btnCreate_Click(object sender, EventArgs e)
            {
                //获取要存储的txt文件
                string filepath = OutTxtPath+"\\"+OutTxtName+".txt";
                string AttributePth = OutTxtPath + "\\"+OutTxtName + "Attr.txt";          
                FileStream myStream = new FileStream(filepath, FileMode.Create, FileAccess.ReadWrite);
                StreamWriter myWrite = new StreamWriter(myStream);
                FileStream attrStream = new FileStream(AttributePth, FileMode.Create, FileAccess.Write);
                StreamWriter attriWrite = new StreamWriter(attrStream);
    
                //打开工作空间
                string fullpath = InShapepath;
                string filename =InShapeName ;
                IWorkspaceFactory pWSF = new ShapefileWorkspaceFactoryClass();
                IWorkspace pWS = pWSF.OpenFromFile(fullpath, 0);
                IFeatureWorkspace pFWS = pWS as IFeatureWorkspace;
                IFeatureClass pFeatClass = pFWS.OpenFeatureClass(filename);
                IFields pFields = pFeatClass.Fields;
                //获取字段的名称
                string FieldNameCol = "";
                for (int j = 2; j < pFields.FieldCount-1; j++)
                {                
                    IField pField = pFields.get_Field(j);
                    if (pField.Type != esriFieldType.esriFieldTypeGeometry)
                    {
                        string Name = pField.Name.Trim ();
                        FieldNameCol += Name + "\t"; 
                    }                
                }
                FieldNameCol += pFields.get_Field(pFields.FieldCount - 1).Name.Trim ();
                attriWrite.WriteLine(FieldNameCol);
                //获取字段的类型
                string FieldTypeCol = "";
                for (int j = 2; j < pFields.FieldCount-1; j++)
                {
                    IField pField = pFields.get_Field(j);
                    if (pField.Type != esriFieldType.esriFieldTypeGeometry)
                    {
                        string type = pField.Type.ToString().Trim();
                        FieldTypeCol += type + "\t";
                    }
                }
                FieldTypeCol += pFields.get_Field(pFields.FieldCount - 1).Type.ToString ().Trim ();
                attriWrite.WriteLine(FieldTypeCol);
    
                IFeatureCursor pFeatCursor = pFeatClass.Search(null, false);
                IFeature pFeat = pFeatCursor.NextFeature();
               myWrite.WriteLine( pFeat.Shape.GeometryType.ToString().Remove(0, 12));          
                while (pFeat != null)
                {
                    IGeometry pGeo = pFeat.Shape;
                    IPointCollection pPointCol = pGeo as IPointCollection;
                    string filedvalue = pFeat.get_Value(0).ToString().Trim();
                    myWrite.WriteLine(filedvalue);
                    attriWrite.WriteLine(filedvalue);
                    for (int i = 0; i < pPointCol.PointCount; i++)
                    {
                        IPoint pPoint = pPointCol.get_Point(i);
                        myWrite.Write(i.ToString() + "\t");
                        string corrdinate = "";
                        corrdinate += pPoint.X.ToString() + "\t";
                        corrdinate += pPoint.Y.ToString();
                        myWrite.WriteLine(corrdinate);
                    }
                    myWrite.Flush();
                    //获得属性值
                    string ValueCol = "";
                    for (int k = 2; k < pFeat.Fields.FieldCount - 1; k++)
                    {
                        ValueCol += pFeat.get_Value(k).ToString().Trim() + "\t";
                    }
                    ValueCol += pFeat.get_Value(pFeat.Fields.FieldCount - 1).ToString().Trim();
                    attriWrite.WriteLine(ValueCol);
                    attriWrite.Flush();
                    pFeat = pFeatCursor.NextFeature();
    
                }
                attriWrite.Close();
                attrStream.Close();
    
                myWrite.Close();
                myStream.Close();
                MessageBox.Show("成功!");
                //this.Close();
    
    
            }
    
            private void btnTransfer_Click(object sender, EventArgs e)
            {
                //创建一个新的shapfile工作空间
                string fullpath = OutShapepath;
                IWorkspaceFactory pWSF = new ShapefileWorkspaceFactoryClass();
                IWorkspace pWS = pWSF.OpenFromFile(fullpath, 0);
    
                IFields pFields = new FieldsClass();
                IFieldsEdit pFEdits = pFields as IFieldsEdit;
                IField pField = new FieldClass();
                IFieldEdit pFEdit = pField as IFieldEdit ;
                pFEdit.Name_2 = "Shape";
                pFEdit.Type_2  = esriFieldType.esriFieldTypeGeometry;
                
             
                IGeometryDef pGeoDef = new GeometryDefClass();
                IGeometryDefEdit pGeoDefEdit = pGeoDef as IGeometryDefEdit ;
                //获取几何类型
                string filepath = InTxtpath + "\\" + InTxtName + ".txt";  
                StreamReader myReader = new StreamReader(filepath, System.Text.Encoding.GetEncoding("GB2312"), true);
                string data = myReader.ReadLine().Trim();
                if (data == "Polyline")
                    pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline;
                else if (data == "Polygon")
                    pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon;
                else if (data == "Point")
                    pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint; 
    
                pGeoDefEdit.SpatialReference_2 = pSRef;
                pFEdit.GeometryDef_2 = pGeoDef;
                pFEdits.AddField(pField);
                //获取字段的名称和类型
                string AtrtiPath = InTxtpath + "\\" + InTxtName + "Attr.txt";
                StreamReader AttriReader = new StreamReader(AtrtiPath, System.Text.Encoding.Default, true);
                AttriReader.BaseStream.Seek(0, SeekOrigin.Begin);
                string AReader = AttriReader.ReadLine();
                string[] NameCol = AReader.Split('\t');
                AReader = AttriReader.ReadLine();
                string[] TypeCol = AReader.Split('\t');        
                for (int i = 0; i < NameCol.GetLength(0); i++)
                {
                    pField = new FieldClass();
                    pFEdit = pField as IFieldEdit;
                    pFEdit.Name_2 = NameCol[i].Trim();
                    string type = TypeCol[i].Trim() ;
                    switch (type)
                    {
                        case "esriFieldTypeString":
                            pFEdit.Type_2 = esriFieldType.esriFieldTypeString;
                            break ;
                        case "esriFieldTypeDouble":
                            pFEdit.Type_2 = esriFieldType.esriFieldTypeDouble;
                            break ;
                        case "esriFieldTypeDate":
                            pFEdit.Type_2 = esriFieldType.esriFieldTypeDate;
                            break ;
                        case "esriFieldTypeInteger":
                            pFEdit.Type_2= esriFieldType.esriFieldTypeInteger ;
                            break ;
                        case "esriFieldTypeSmallInteger":
                            pFEdit.Type_2 = esriFieldType.esriFieldTypeSmallInteger;
                            break;
                        
                    }
                    pFEdits.AddField(pField);
                }
    
                IFeatureWorkspace pFeatWS = pWS as IFeatureWorkspace;
                IFeatureClass pFeatClass = pFeatWS.CreateFeatureClass(OutShapeName, pFields, null, null, esriFeatureType.esriFTSimple, "Shape", "");
                     
                IPointCollection pPointCol = new MultipointClass();
                while (data !="" && data !=null)
                {              
                    string[] d = data.Split('\t');
                    if (d.GetLength(0) == 1)
                    {                   
                        if (pPointCol.PointCount > 0)
                        {
                            AReader = AttriReader.ReadLine();
                            AReader = AttriReader.ReadLine();
                            string []AttriCol = AReader.Split('\t');
                            addFeature(pPointCol, pWS, pFeatClass,AttriCol);
                            pPointCol = new MultipointClass();                     
    
                        }                  
                    }
                    else
                    {
                        string X = d[1];
                        string Y = d[2];
                        IPoint pPoint = new PointClass();
                        pPoint.X = Convert.ToDouble(X);
                        pPoint.Y = Convert.ToDouble(Y);
                       object missing= Type.Missing ;
                        pPointCol.AddPoint(pPoint,ref  missing, ref missing);  
                    }
                    data = myReader.ReadLine();
                }
    
                if (pPointCol.PointCount > 0)
                {
                    AReader = AttriReader.ReadLine();
                    AReader = AttriReader.ReadLine();
                    string[] AttriCol = AReader.Split('\t');
                    addFeature(pPointCol, pWS, pFeatClass,AttriCol);
                    pPointCol = new MultipointClass();
                }
    
                myReader.Close();
                MessageBox.Show("完成!");
                //this.Close();
    
            }
    
            private void addFeature(IPointCollection pPointCol, IWorkspace pWS, IFeatureClass pFeatClass, string[] ACol)
            {
                IWorkspaceEdit pWSEdit = pWS as IWorkspaceEdit;
                pWSEdit.StartEditOperation();
                IFeature pFeat = pFeatClass.CreateFeature();
                if (pFeat.Shape.GeometryType == esriGeometryType.esriGeometryPolygon)
                    pFeat.Shape = AddPloygon(pPointCol);
                else if (pFeat.Shape.GeometryType == esriGeometryType.esriGeometryPolyline)
                    pFeat.Shape = AddPolyline(pPointCol);
                else if (pFeat.Shape.GeometryType == esriGeometryType.esriGeometryPoint)
                    pFeat.Shape = pPointCol.get_Point(0) as IGeometry; 
    
                for (int i = 0; i < ACol.GetLength(0); i++)
                {
                    pFeat.set_Value(i + 2, ACol[i].ToString());
                }
    
                pFeat.Store();
                pWSEdit.StopEditOperation();
            }
    
            private IGeometry AddPloygon(IPointCollection pPointCol)
            {
                object missing = Type.Missing;
                IPolygon pPolygon = new PolygonClass();
                ISegmentCollection pSegCol = pPolygon as ISegmentCollection;
                for (int i = 0; i < pPointCol.PointCount - 1; i++)
                {
                    ILine pLine = new LineClass();
                    IPoint pFrom = pPointCol.get_Point(i);
                    IPoint pTo = pPointCol.get_Point(i + 1);
                    pLine.FromPoint = pFrom;
                    pLine.ToPoint = pTo;
                    ISegment pSeg = pLine as ISegment;
                    pSegCol.AddSegment(pSeg, ref missing, ref missing);
                }
                ILine pLastLine = new LineClass();
                IPoint pFromP = pPointCol.get_Point(pPointCol.PointCount - 1);
                IPoint pToP = pPointCol.get_Point(0);
                pLastLine.FromPoint = pFromP;
                pLastLine.ToPoint = pToP;
                ISegment pLastSeg = pLastLine as ISegment;
                pSegCol.AddSegment(pLastSeg, ref missing, ref missing);
                pPolygon.Close();
                IGeometry pGeometry = pPolygon as IGeometry;
                return pGeometry;
     
            }
            private IGeometry AddPolyline(IPointCollection pPointCol)
            {
                object missing = Type.Missing;
                IPolyline pPolline = new PolylineClass();
                ISegmentCollection pSegCol = pPolline as ISegmentCollection;
                for (int i = 0; i < pPointCol.PointCount - 1; i++)
                {
                    ILine pLine = new LineClass();
                    IPoint pFrom = pPointCol.get_Point(i);
                    IPoint pTo = pPointCol.get_Point(i + 1);
                    pLine.FromPoint = pFrom;
                    pLine.ToPoint = pTo;
                    ISegment pSeg = pLine as ISegment;
                    pSegCol.AddSegment(pSeg, ref missing, ref missing);
                }
                IGeometry pGeometry = pPolline as IGeometry;
                return pGeometry; 
            }
           
            private void btnTxtOpen_Click(object sender, EventArgs e)
            {
                OpenFileDialog InputTxt = new OpenFileDialog();
                InputTxt.Filter = "Text file(*.txt)|*.txt";
                InputTxt.Multiselect = false;
                DialogResult txtResult = InputTxt.ShowDialog();
                if (txtResult != DialogResult.OK)
                    return;
                string    InTxtfullpath = InputTxt.FileName;
                InTxtpath = System.IO.Path.GetDirectoryName(InTxtfullpath);
                InTxtName = System.IO.Path.GetFileNameWithoutExtension(InTxtfullpath);
                 txtInputTxt.Text = InTxtfullpath;
    
             
            }
    
            private void btnInputShape_Click(object sender, EventArgs e)
            {
                SaveFileDialog OutPutShape = new SaveFileDialog();
                OutPutShape.Filter = "Shapefile(*.shp)|*.shp";
                DialogResult shapeResult = OutPutShape.ShowDialog();
                if (shapeResult != DialogResult.OK)
                    return;
                string Shapefullpath = OutPutShape.FileName;
                OutShapepath = System.IO.Path.GetDirectoryName(Shapefullpath);
                OutShapeName = System.IO.Path.GetFileNameWithoutExtension(Shapefullpath);
                txtOutputShape.Text = Shapefullpath;
    
            }
    
            private void btnCnacel_Click(object sender, EventArgs e)
            {
                this.Close();
            }
    
            private void btnCoordinate_Click(object sender, EventArgs e)
            {
               
                OpenFileDialog OpenRef = new OpenFileDialog();
                OpenRef.Filter = "Shapefile(*.shp)|*.shp|坐标系统(*.prj)|*.prj";
                OpenRef.Multiselect = false;
                DialogResult RefResult = OpenRef.ShowDialog();
                if (RefResult != DialogResult.OK)
                    return;
                string fullpath = OpenRef.FileName;
                string filepath = System.IO.Path.GetDirectoryName(fullpath);
                string filename = System.IO.Path.GetFileNameWithoutExtension(fullpath);
                if (OpenRef.FilterIndex == 1)
                {
                    IWorkspaceFactory pWSF = new ShapefileWorkspaceFactoryClass();
                    IWorkspace pWS = pWSF.OpenFromFile(filepath, 0);
                    IFeatureWorkspace pFWS = pWS as IFeatureWorkspace;
                    IFeatureClass pFeatClass = pFWS.OpenFeatureClass(filename);
                    IGeoDataset pGeoDataset = pFeatClass as IGeoDataset;
                    pSRef = pGeoDataset.SpatialReference;
                    ISpatialReferenceInfo pSRFInfo = pSRef as ISpatialReferenceInfo;
                    txtCoordinate.Text = pSRFInfo.Name;
    
                }
                else
                {
                    ISpatialReferenceFactory pSRF = new SpatialReferenceEnvironmentClass();
                    pSRef= pSRF.CreateESRISpatialReferenceFromPRJFile(fullpath);
                    txtCoordinate.Text = filename;
                }
    
               
    
    
            }
    
            private void btnClose_Click(object sender, EventArgs e)
            {
                this.Close();
            }
    
            private void btnInShape_Click(object sender, EventArgs e)
            {
                OpenFileDialog OpenShape = new OpenFileDialog();
                OpenShape.Filter = "Shapefile(*.shp)|*.shp";
                OpenShape.Multiselect = false;
                DialogResult OpenResult = OpenShape.ShowDialog();
                if (OpenResult != DialogResult.OK)
                    return;
                string fullpath = OpenShape.FileName;
                InShapepath = System.IO.Path.GetDirectoryName(fullpath);
                InShapeName = System.IO.Path.GetFileNameWithoutExtension(fullpath);
                txtInShape.Text = fullpath;
    
            }
    
            private void btnOutTxt_Click(object sender, EventArgs e)
            {
                SaveFileDialog SaveTxt = new SaveFileDialog();
                SaveTxt.Filter = "Text file(*.txt)|*.txt";
                DialogResult SaveResult = SaveTxt.ShowDialog();
                if (SaveResult != DialogResult.OK)
                    return;
                string fullpath = SaveTxt.FileName;
                OutTxtPath = System.IO.Path.GetDirectoryName(fullpath);
                OutTxtName = System.IO.Path.GetFileNameWithoutExtension(fullpath);
                txtOutTxt.Text = fullpath;
    
            }
    
    
    
        }
    } ...
    
  • 相关阅读:
    学习笔记-Python-Django-环境搭建、路由
    Python数据科学-技术详解与商业实践(文末附资源)
    09 Django 模型(数据库)
    pandas入门
    08 Django 模板进阶
    Django学习中常见问题
    07 Django 模板
    06 Django URL name详解
    05 Django 视图与网址进阶
    04 Django 视图与网址-urls.py
  • 原文地址:https://www.cnblogs.com/hl3292/p/1965566.html
Copyright © 2011-2022 走看看