由坐标数据生成点SHP文件,并由多组点生成线SHP文件(上)
在最近的公司项目中,老板要求将外业采集的管线连接点坐标表格数据生成线状的shp文件,上网查了下都是生成点状shp文件的例子,作为一个小白根据例子苦逼摸索了半个星期终于搞定了,放上来和大家分享一下。
实现思路
- 连接Excel表格,将表格中需要的数据生成DataTable
- 获取DataTable中的坐标数据,根据要求获取坐标对
- 创建空的点shp文件,设置属性信息,加载空的点layer
- 编辑点layer的属性信息,添加点要素
- 获取DataTable中的坐标数据,根据要求获取点对
- 创建空的线shp文件,设置属性信息,加载空的线layer
- 编辑线layer的属性信息,添加线要素
实现步骤
1.连接Excel表格,将表格中需要的数据生成DataTable
本项目是基于.NET平台的AE开发,使用的语言为C#。C#读取Excel表格有三种经典的方法,具体大家可以自行百度,这里不再详细介绍,我采用的是通过OleDB读取Excel文件的方法。实例方法如下:
public DataTable ExcelToDataTable(string strExcelFileName, string strSheetName)
{
string strConn="Provider=Microsoft.ACE.OLEDB.12.0;"+"Data Source="+strExcelFileName+";"+"Extended Properties='Excel 8.0;HDR=NO;IMEX=1';";
String strExcel="select * from ["+strSheetName+"$]";
DataSet ds=new DataSet();
OleDbConnection conn=new OleDbConnection(strConn);
conn.Open();
OleDbDataAdapter adapter=new OleDbDataAdapter(strExcel,strConn);
adapter.Fill(ds,strSheetName);
conn.Close();
return ds.Tables[strSheetName];
}
这里有个小地方需要注意一下,Excel的版本不同,源语句的定义也不同,我用的是07以后的版本,如果是97-03的版本应该将部分代码换成
Provider=Microsoft.Jet.OLEDB.4.0;
2.获取DataTable中的坐标数据,根据要求获取坐标对
步骤1中得到的DataTable实质上就是一张二维表,它的格式和Excel表是一样的,我这里的表格数据中一共包含了七项数据,分别是管线起始点的ID,管线起始点代号,管线连接点代号,管线起始点X坐标,管线起始点Y坐标,管线起始点高程,管线起始点埋深,如图: