using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using NewDistrict;
using System.IO; using System.Threading.Tasks;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.DataSourcesFile;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geometry; namespace SignalDeal
{
public partial class Formtxt2shp : Form
{
public Formtxt2shp()
{
ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);
InitializeComponent();
} //选择Txt文件
private void btn_TxtPath_Click(object sender, EventArgs e)
{
OpenFileDialog xjTxtOpenFileDialog = new OpenFileDialog();
xjTxtOpenFileDialog.Multiselect = false;
xjTxtOpenFileDialog.Title = "打开txt坐标文件";
xjTxtOpenFileDialog.Filter = "txt坐标文件(*.txt)|*.txt";
if (xjTxtOpenFileDialog.ShowDialog() == DialogResult.OK)
{
txt_TxtPath.Text = xjTxtOpenFileDialog.FileName;
}
} //Shp矢量点保存路径
private void btn_ShpPath_Click(object sender, EventArgs e)
{
SaveFileDialog xjShpSaveFileDialog = new SaveFileDialog();
xjShpSaveFileDialog.Filter = "Shape文件(*.shp)|*.shp";
if (File.Exists(txt_TxtPath.Text))
{
xjShpSaveFileDialog.FileName = System.IO.Path.GetFileNameWithoutExtension(txt_TxtPath.Text);
}
if (xjShpSaveFileDialog.ShowDialog() == DialogResult.OK)
{
txt_ShpPath.Text = xjShpSaveFileDialog.FileName;
}
} //显示保存
//检查数据和路径
private bool Check()
{
if (txt_TxtPath.Text == "" || !File.Exists(txt_TxtPath.Text))
{
MessageBox.Show("数据无效,重选", "提示", MessageBoxButtons.OK);
return false;
}
if (txt_ShpPath.Text == "" || System.IO.Path.GetExtension(txt_ShpPath.Text).ToLower() != ".shp")
{
MessageBox.Show("Shp矢量点保存路径无效,重选", "提示", MessageBoxButtons.OK);
return false;
}
return true;
}
//结构体
struct Point
{
public string Name;
public double X;
public double Y;
}
List<string> xjColumn = new List<string>();
//获取点数据
private List<Point> GetPoint(string surveyDataFullName)
{
List<Point> xjList = new List<Point>();
char[] xjchar = new char[] { ',', ' ', '\t' }; //常用的分隔符为逗号、空格、制位符
//读取
FileStream xjFileStream = new FileStream(surveyDataFullName, FileMode.Open);
StreamReader xjStreamReader = new StreamReader(xjFileStream, Encoding.Default);
string xjstringLine = xjStreamReader.ReadLine();
if (xjstringLine != null)
{
string[] xjstrArray = xjstringLine.Split(xjchar);
if (xjstrArray.Length > )
{
for (int i = ; i < xjstrArray.Length; i++)
{
xjColumn.Add(xjstrArray[i]);
}
} while ((xjstringLine = xjStreamReader.ReadLine()) != null)
{
//点信息的读取
xjstrArray = xjstringLine.Split(xjchar);
Point xjPoint = new Point();
xjPoint.Name = xjstrArray[].Trim();
xjPoint.X = Convert.ToDouble(xjstrArray[]);
xjPoint.Y = Convert.ToDouble(xjstrArray[]); xjList.Add(xjPoint);
}
}
else
{
return null;
}
xjStreamReader.Close();
return xjList;
//catch (Exception ex)
//{
// MessageBox.Show(ex.Message);
// return null;
//}
}
//创建Shp矢量图层
private IFeatureLayer CreateShpFromPoints(List<Point> xjPointList, string xjFilePath)
{
int index = xjFilePath.LastIndexOf('\\');
string xjFolder = xjFilePath.Substring(, index);
string xjShapeName = xjFilePath.Substring(index + );
IWorkspaceFactory xjWsF = new ShapefileWorkspaceFactoryClass();
IFeatureWorkspace xjFWs = (IFeatureWorkspace)xjWsF.OpenFromFile(xjFolder, ); IFields xjFields = new FieldsClass();
IFieldsEdit xjFieldsEdit;
xjFieldsEdit = (IFieldsEdit)xjFields; IField xjField = new FieldClass();
IFieldEdit xjFieldEdit = (IFieldEdit)xjField;
xjFieldEdit.Name_2 = "Shape";
xjFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
IGeometryDef xjGeometryDef = new GeometryDefClass();
IGeometryDefEdit xjGDefEdit = (IGeometryDefEdit)xjGeometryDef;
xjGDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;
//定义坐标系
ISpatialReferenceFactory pSRF = new SpatialReferenceEnvironmentClass();
ISpatialReference pSpatialReference = pSRF.CreateProjectedCoordinateSystem((int)esriSRProjCS4Type.esriSRProjCS_Beijing1954_3_Degree_GK_CM_114E);
xjGDefEdit.SpatialReference_2 = pSpatialReference; xjFieldEdit.GeometryDef_2 = xjGeometryDef;
xjFieldsEdit.AddField(xjField); IFeatureClass xjFeatureClass;
xjFeatureClass = xjFWs.CreateFeatureClass(xjShapeName, xjFields, null, null, esriFeatureType.esriFTSimple, "Shape", ""); IPoint xjPoint = new PointClass(); for (int j = ; j < xjPointList.Count; j++)
{ xjPoint.X = xjPointList[j].X;
xjPoint.Y = xjPointList[j].Y; IFeatureBuffer xjFeature = xjFeatureClass.CreateFeatureBuffer();
IFeatureCursor featureCursor = xjFeatureClass.Insert(true); xjFeature.Shape = xjPoint;
xjFeature.set_Value(xjFeature.Fields.FindField("id"), xjPointList[j].Name);
featureCursor.InsertFeature(xjFeature);
} IFeatureLayer xjFeatureLayer = new FeatureLayerClass();
xjFeatureLayer.Name = xjShapeName;
xjFeatureLayer.FeatureClass = xjFeatureClass;
return xjFeatureLayer;
}
//单击显示保存
private void btn_ShowSave_Click(object sender, EventArgs e)
{
if (Check())
{
List<Point> xjPointList = GetPoint(txt_TxtPath.Text);
if (xjPointList == null)
{
MessageBox.Show("选择文件是空的!");
}
else
{
IFeatureLayer pFeatureLayer = CreateShpFromPoints(xjPointList, txt_ShpPath.Text);
//MainForm.m_mapControl.Map.AddLayer(pFeatureLayer);
}
}
MessageBox.Show("完成!");
}
}
}

Formtxt2shp.cs

得到的txt包括shp属性表所有数据。(首行为字段名)

窗体如下:

AE开发之shp转txt的更多相关文章

  1. AE开发之txt转shp

    实现坐标txt文件转shp点集数据文件的窗体Form txt格式为:首行为“id,x,y” 第二行开始输入具体数值:id,x,y(x,y为具体的xy坐标) using System; using Sy ...

  2. Android安全开发之ZIP文件目录遍历

    1.ZIP文件目录遍历简介 因为ZIP压缩包文件中允许存在“../”的字符串,攻击者可以利用多个“../”在解压时改变ZIP包中某个文件的存放位置,覆盖掉应用原有的文件.如果被覆盖掉的文件是动态链接s ...

  3. ArcGIS Engine开发之旅04---ARCGIS接口详细说明

    原文:ArcGIS Engine开发之旅04---ARCGIS接口详细说明 ArcGIS接口详细说明... 1 1.      IField接口(esriGeoDatabase)... 2 2.    ...

  4. Android 安全开发之 ZIP 文件目录遍历

    1.ZIP文件目录遍历简介 因为ZIP压缩包文件中允许存在"../"的字符串,攻击者可以利用多个"../"在解压时改变ZIP包中某个文件的存放位置,覆盖掉应用原 ...

  5. Android 异步开发之 AsyncQueryHandler 批量添加联系人

    AsyncQueryHandler: 官方解释是一个异步帮助类(A helper class to help make handling asynchronous ContentResolver qu ...

  6. [Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘终结篇:UniLua热更新全然解读

    ---------------------------------------------------------------------------------------------------- ...

  7. [Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(下)

    ---------------------------------------------------------------------------------------------------- ...

  8. 微信公众号开发之VS远程调试

    目录 (一)微信公众号开发之VS远程调试 (二)微信公众号开发之基础梳理 (三)微信公众号开发之自动消息回复和自定义菜单 前言 微信公众平台消息接口的工作原理大概可以这样理解:从用户端到公众号端一个流 ...

  9. Android混合开发之WebViewJavascriptBridge实现JS与java安全交互

    前言: 为了加快开发效率,目前公司一些功能使用H5开发,这里难免会用到Js与Java函数互相调用的问题,这个Android是提供了原生支持的,不过存在安全隐患,今天我们来学习一种安全方式来满足Js与j ...

随机推荐

  1. (二十一)JSP基础

    定义 JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. JSP这门技术的最大的特点在于,写jsp就像在写html,但它相 ...

  2. android 自动化测试案例之 MonkeyScript

    #文件名 MonkeyScript.mks #功能: 使用monkey script测试app,此案例是测试搜索功能(输入关键字,然后点击搜索按钮)#参考: http://blog.csdn.net/ ...

  3. Angularjs 省市区级联

    Json 地区文件:http://blog.csdn.net/youshi520000/article/details/70808580 angularjs angular.module('app') ...

  4. Angularjs 中 ng-repeat 循环绑定事件

    用ng-repeat循环是如果有ng-click之类的事件需要传入参数我们一般这样写 <span class='del' ng-click="RemoveCost({{item.Id} ...

  5. centos安装mysql(for 小白)

    安装前提: 安装号centos.SecureCRT 安装准备: centos自带数据库Mariadb,先将其移除 下载mysql: 镜像网址:http://mirrors.sohu.com/mysql ...

  6. 11. Java方法的定义与使用

    1.1方法的定义 方法是一段可以被重复调用的代码块. 方法的声明: public static 方法返回值 方法名称 ([参数类型 变量...]) 方法体代码: [return 返回值]: 当方法以v ...

  7. oracle学习笔记:update一整列 关联更新

    普通的 update 都是根据条件来对部分列的内容进行修改,用法如下: update temp_cwh_table set name = 'xxx' where id = 1; 假设现在有2张表:A. ...

  8. S2-033、S2-037

    前言 S2-033漏洞和S2-032类似,也是由于开启了动态方法调用,action mapper中的执行的方法名可控,导致了ognl表达式注入. 正文 Rest插件中获取action mapper是用 ...

  9. QT 定时器的使用方法

    在界面程序中很容易使用到,定时刷新或者更新什么东西,此时应该使用定时器的功能,定时器是在指定时间触发定时器函数,来达到定时的效果 接下来介绍两种定时器的使用,废话不说直接上代码 代码结构: dialo ...

  10. redis修改大key报Argument list too long的解决办法:

    线上一个业务出现异常:redis的一个大大大大大key数据有问题,所以导出修改再导入,但遇到了问题: [root@ ~]# /usr/local/redis/bin/redis-cli -h 127. ...