AE开发之txt转shp
实现坐标txt文件转shp点集数据文件的窗体Form

txt格式为:首行为“id,x,y”
第二行开始输入具体数值:id,x,y(x,y为具体的xy坐标)
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
Formtxt2shp.cs
AE开发之txt转shp的更多相关文章
- AE开发之shp转txt
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Android安全开发之ZIP文件目录遍历
1.ZIP文件目录遍历简介 因为ZIP压缩包文件中允许存在“../”的字符串,攻击者可以利用多个“../”在解压时改变ZIP包中某个文件的存放位置,覆盖掉应用原有的文件.如果被覆盖掉的文件是动态链接s ...
- ArcGIS Engine开发之旅04---ARCGIS接口详细说明
原文:ArcGIS Engine开发之旅04---ARCGIS接口详细说明 ArcGIS接口详细说明... 1 1. IField接口(esriGeoDatabase)... 2 2. ...
- Android 安全开发之 ZIP 文件目录遍历
1.ZIP文件目录遍历简介 因为ZIP压缩包文件中允许存在"../"的字符串,攻击者可以利用多个"../"在解压时改变ZIP包中某个文件的存放位置,覆盖掉应用原 ...
- Android 异步开发之 AsyncQueryHandler 批量添加联系人
AsyncQueryHandler: 官方解释是一个异步帮助类(A helper class to help make handling asynchronous ContentResolver qu ...
- [Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘终结篇:UniLua热更新全然解读
---------------------------------------------------------------------------------------------------- ...
- [Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(下)
---------------------------------------------------------------------------------------------------- ...
- 微信公众号开发之VS远程调试
目录 (一)微信公众号开发之VS远程调试 (二)微信公众号开发之基础梳理 (三)微信公众号开发之自动消息回复和自定义菜单 前言 微信公众平台消息接口的工作原理大概可以这样理解:从用户端到公众号端一个流 ...
- Android混合开发之WebViewJavascriptBridge实现JS与java安全交互
前言: 为了加快开发效率,目前公司一些功能使用H5开发,这里难免会用到Js与Java函数互相调用的问题,这个Android是提供了原生支持的,不过存在安全隐患,今天我们来学习一种安全方式来满足Js与j ...
随机推荐
- CAN总线上的消息单帧某个信号的值计算(C#)
public static ulong GetMotorolaSignalValue(byte[] data, int startBit, int bitLength) { ; , j =; i ...
- Abp SSO
官方的文档有个坑. 首先建立的应该是 .net core MPA版本. 把文档上的startup.cs配置写入 MVC 项目中. 这样测试才能通过.不然,测试项目 var disco = a ...
- JDBC 学习复习7 学习 Apache 开源DBCP 数据源
DBCP(DataBase connection pool),数据库连接池.是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件.单独使用dbcp需要2个包:comm ...
- vue 实现的评分小星星组件,包括半星
github源码地址:https://github.com/13476075014/node-vue/blob/master/mynodeproject/13.sell/sell/src/compon ...
- from表单中checkbox的多选,ajax转入后台,后台接受
var check = [];//定义一个空数组 $("input[name='category']:checked").each(function(i){//把所有被选中的复选框 ...
- nginx__的简单搭建和 wsgi
4 部署 1 配置 uwsig(配置文件) pip3 install uwsgi 1 mkdir uwsgi 2 cd uwsgi 3 touch test_uwsig.ini [uwsgi] # 指 ...
- IDEA光标跟随原因是jdk载入的问题BUG 修正 需要I安装最新版本1.8JDK 1.9之后的不清楚 谨慎
解决方法是 选择jdk本地版本 重启就好了 https://blog.csdn.net/Utopia_Zq/article/details/81190300?utm_source=blogxgwz2 ...
- “高可用性”(High Availability)??
“高可用性”(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性. 计算机的高可用性 计算机系统的可用性用平均无故障时间(MTTF)来度量 ...
- CentOS 7 根目录分区扩容
查看现有磁盘信息,可以看出根分区有96G [root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mappe ...
- springboot 学习小结
springboot 默认自动扫描和配置根包下面的类.如果启动配置不在根包目录下,得把对应的类进行配置扫描生成对应的bean. 主要的扫描注解有: @SpringBootApplication //s ...