IWorkspaceFactory pShpWksFact = new ShapefileWorkspaceFactory();
IFeatureWorkspace pFeatWks;
pFeatWks = (IFeatureWorkspace)pShpWksFact.OpenFromFile(filePath, 0);
const
string strShapeFieldName = "Shape";
//定义属性字段
IFields pFields = new Fields();
IFieldsEdit pFieldsEdit;
pFieldsEdit = pFields as IFieldsEdit;
IField pField = new Field();
IFieldEdit pFieldEdit = new Field() as IFieldEdit;
pFieldEdit.Name_2 = strShapeFieldName;
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
pField = pFieldEdit as IField;
//定义几何属性
IGeometryDef pGeomDef = new GeometryDef();
IGeometryDefEdit pGeomDefEdit = new GeometryDef() as IGeometryDefEdit;
pGeomDefEdit = pGeomDef as IGeometryDefEdit;
switch (shpTypeComboBox.Text)
{
case "Point":
pGeomDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;
break;
case "Polyline":
pGeomDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline;
break;
case "Polygon":
pGeomDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon;
break;
}
pGeomDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline;
pGeomDefEdit.SpatialReference_2 = new UnknownCoordinateSystem() as ISpatialReference;
pFieldEdit.GeometryDef_2 = pGeomDef;
pFieldsEdit.AddField(pField);
pFields = pFieldsEdit as IFields;
IFeatureClass pFeatureClass;
pFeatureClass = pFeatWks.CreateFeatureClass(fileName, pFields, null, null,
esriFeatureType.esriFTSimple, strShapeFieldName, "");
//添加属性字段
for (int i = 0; i < addFieldListBox.Items.Count; i++)
{
IField pfield = new Field();
IFieldEdit pfieldEdit = new Field() as IFieldEdit;
pfieldEdit.Name_2 = addFieldListBox.Items[i].ToString();
pfieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
pfield = pfieldEdit as IField;
pFeatureClass.AddField(pfield);
}
//绘制线
IFeatureClassWrite fr = pFeatureClass as IFeatureClassWrite;
IWorkspaceEdit w = (pFeatureClass as IDataset).Workspace as IWorkspaceEdit;
IFeature f;
//可选参数的设置
object Missing = Type.Missing;
IPoint p = new PointClass();
w.StartEditing(true);
w.StartEditOperation();
//定义一个多义线对象
IPolyline PlyLine = new PolylineClass();
//定义一个点的集合
IPointCollection ptclo = PlyLine as IPointCollection;
ISpatialReferenceFactory spatialReferenceFactory = new SpatialReferenceEnvironmentClass();
ISpatialReference spatialReference = spatialReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984);
for (int i = 0; i < excelDataGridViewX.Rows.Count - 1; i++)
{
f = pFeatureClass.CreateFeature();
DataGridViewRow dataRow = excelDataGridViewX.Rows[i];
double pointX, pointY;
pointX = double.Parse(dataRow.Cells[xComboBoxEx.Text].Value.ToString());
pointY = double.Parse(dataRow.Cells[yComboBoxEx.Text].Value.ToString());
p.PutCoords(pointX,pointY);
ptclo.AddPoint(p, ref Missing, ref Missing);
for (int j = 0; j < addFieldListBox.Items.Count; j++)
{
string fieldName = addFieldListBox.Items[j].ToString();
f.set_Value(f.Fields.FindField(fieldName),
dataRow.Cells[fieldName].Value.ToString());
}
IPolyline ppolyline = new PolylineClass();
ppolyline = (IPolyline)ptclo;
ppolyline.SpatialReference = spatialReference;
f.Shape = ppolyline;
fr.WriteFeature(f);
}
//f.Store();
w.StopEditOperation();
w.StopEditing(true);
//添加新建的数据至Map中
axMapControl.AddShapeFile(filePath, fileName);
//this.Hide();
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· Vite CVE-2025-30208 安全漏洞
· 《HelloGitHub》第 108 期
· MQ 如何保证数据一致性?
· 一个基于 .NET 开源免费的异地组网和内网穿透工具