ArcEngine将含有点坐标的Excel表导出成线(Line)要素
转行做GIS二次开发的第一个需求,不算特别复杂的需求,但是对于新手的我来说也用了半天的时间,但是对于理解GIS中的图形的原理很有帮助,废话不多说,直接上干货。
需求:将excel中的点数据连接成线并导出,excel中的记录如图所示:
Excel中的“townfrom”列和“townto”列分别表示出发点编号和到达点编号,“PF”表示权重,这三列对于这个需求并不是特别重要,因此可以忽略,“LONFROM”和“LATFROM”表示起始点的经度和纬度,“LONTO”和“LATTO”分别表示终点的经度和纬度。我们要做的就是将每一个记录连接成线,以便下游人员分析。
这个需求总的说来可以分两步实现,首先需要将Excel中的数据导入,再将起始点和终点的经纬度值生成线并保存。
导入Excel需要引用“Aspose.Cells.dll”动态链接库,下载链接:链接:https://pan.baidu.com/s/1UeMJeHJ1Rt5DnJuofh8DIQ 提取码:2i43 。
1、读取Excel
//读取excel
private void ReadExcel(string path)
{
Workbook workbook = new Workbook(path);
cells = workbook.Worksheets[0].Cells;
for (int i = 1; i < cells.MaxDataRow + 1; i++)
{
Data2Line(cells[i, 3].DoubleValue, cells[i, 4].DoubleValue,
cells[i, 5].DoubleValue, cells[i, 6].DoubleValue);
}
}
2、各行的点坐标生成线:
//各行数据生成线
private void Data2Line(double lonF, double latF, double lonT, double latT)
{
IPoint point_From = new PointClass();
IPoint point_To = new PointClass();
IPolyline pPolyline = new PolylineClass();
point_From.PutCoords(lonF, latF);
point_To.PutCoords(lonT, latT);
pPolyline.FromPoint = point_From;
pPolyline.ToPoint = point_To;
ILayer layer = this.axMapControl1.Map.Layer[0];
IFeatureLayer featureLayer = (IFeatureLayer)layer;
IFeature feature = featureLayer.FeatureClass.CreateFeature();
feature.Shape = pPolyline;
feature.Store();
}
源代码已上传至github:https://github.com/ranhongwu/190618ExcelToLine
(注:为了方便我直接是创建的一个新的shp文件和axMapControl关联,如果有其他的用途可以自行修改)