求C#里面读出GIS SHP文件里的所有点线面数据的过程(带代码)。。

求C#里面读出GIS SHP文件里的所有点线面数据的过程(带代码)。。,第1张

string strFielPath = "C:\\aashp";

FileInfo fileInfo = new FileInfo(strFielPath);

string fileDirectoryName = fileInfoDirectoryName;

string fileName = fileInfoName;

IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactoryClass();

IWorkspace workspace = workspaceFactoryOpenFromFile(fileDirectoryName, 0);

IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace;

IFeatureClass featureClass = featureWorkspaceOpenFeatureClass(fileName);

IFeatureCursor featureCursor = featureClassSearch(null, false);

IFeature feature = featureCursorNextFeature();

while (feature != null)

{

IGeometry geoMetry = featureShape;//得到的每个数据

feature = featureCursorNextFeature();

}

下面是批量加点的代码,如有疑问请与我持联系。希望对你有帮助!

/// <summary>

/// 点坐标 结构

/// </summary>

public struct PointXY

{

public double dX;

public double dY;

}

/// <summary>

/// 建立 ESRI中的 点类型 并 将其转化为基类接口 IGeometry

/// </summary>

/// <param name="point">点坐标 结构体</param>

/// <returns></returns>

public IGeometry BuildPoint(PointXY point)

{

IPoint pPoint = new PointClass();

pPointX = pointdX;

pPointY = pointdY;

IGeometry pGeometry = pPoint as IGeometry;

return pGeometry;

}

/// <summary>

/// 批量加入 点坐标 结构体

/// </summary>

/// <param name="pLayer">点图层</param>

/// <param name="pointCol">泛型集合点坐标 结构体</param>

/// <returns></returns>

public bool AddPointsToLayer(ILayer pLayer, List<PointXY> pointCol)

{

IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer;

if (pFeatureLayer == null)

{

SystemWindowsFormsMessageBoxShow(pLayerName + "不是矢量图层!"); return false;

}

//

IFeatureClass pFeatureClass = pFeatureLayerFeatureClass;

if (pFeatureClassShapeType != esriGeometryTypeesriGeometryPoint)

{

SystemWindowsFormsMessageBoxShow(pLayerName + "不是点图层!"); return false;

}

//

IFeatureCursor pFeatureCursor = pFeatureClassInsert(true);

IFeatureBuffer pFeatureBuffer = null;

foreach(PointXY one in pointCol)

{

pFeatureBuffer = pFeatureClassCreateFeatureBuffer();

IFeature pNewFeature = pFeatureBuffer as IFeature;

pNewFeatureShape = BuildPoint(one);

//

pFeatureCursorInsertFeature(pFeatureBuffer);

}

pFeatureCursorFlush();

return true;

}

private void OnDeleteFeatureMethod(object o) { IFeature pFeature = o as IFeature; IFeatureClass pFeatureClass = pFeatureClass as IFeatureClass; for (int i = 0; i < axMapControl1MapLayerCount;i++ ) { IFeatureLayer iFeatureLayer = axMapControl1get_Layer(i) as IFeatureLayer; IFeatureClass iFeatureCla = iFeatureLayerFeatureClass; if (iFeatureCla == pFeatureClass) { IWorkspace pWorkSpace = m_EngineEditorEditWorkspace; textBox3Text += " *** 作的文件全路径:" + pWorkSpacePathName + "\\" + axMapControl1get_Layer(i)Name + "shp " + "\r\n"; break; } } if (pFeatureShapeGeometryType == esriGeometryTypeesriGeometryPoint) { IGeometry iGe = pFeatureShape; IPoint ipo = new PointClass(); ipo = iGe as IPoint; int a = 0; int b = 0; axMapControl1FromMapPoint(ipo, ref a, ref b); textBox3Text += "删除的点的ID号:" + pFeatureOID + ",坐标:(" + a + "," + b + ")" + "\r\n"; } else if (pFeatureShapeGeometryType == esriGeometryTypeesriGeometryPolygon) { textBox3Text += "删除的多边形对象的ID号:" + pFeatureOID + ",坐标:"; IPolygon pPolygon = (IPolygon)pFeatureShape; int a = 0; int b = 0; //把该feature强制转换为一个点的集合,再取点的坐标 IPointCollection pPointCollection = pPolygon as IPointCollection; for (int i = 0; i < pPointCollectionPointCount - 1; i++) { IPoint ipo = pPointCollectionget_Point(i); axMapControl1FromMapPoint(ipo, ref a, ref b); textBox3Text += "(" + a + "," + b + ")" + "\t"; } textBox3Text += "\r\n"; } else if (pFeatureShapeGeometryType == esriGeometryTypeesriGeometryPolyline) { textBox3Text += "删除的线对象的ID号:" + pFeatureOID + ",其坐标:"; IPolyline pPolygon = (IPolyline)pFeatureShape; int a = 0; int b = 0; //把该feature强制转换为一个点的集合,再取点的坐标 IPointCollection pPointCollection = pPolygon as IPointCollection; for (int i = 0; i < pPointCollectionPointCount; i++) { IPoint ipo = pPointCollectionget_Point(i); axMapControl1FromMapPoint(ipo, ref a, ref b); textBox3Text += "(" + a + "," + b + ")" + "\t"; } textBox3Text += "\r\n"; } axMapControl1ActiveViewPartialRefresh(esriViewDrawPhaseesriViewGeography, null, null); }

以上就是关于求C#里面读出GIS SHP文件里的所有点线面数据的过程(带代码)。。全部的内容,包括:求C#里面读出GIS SHP文件里的所有点线面数据的过程(带代码)。。、C#中已知点的坐标,如何通过编程向一个指定的SHP图层上批量添加这些点啊ArcEngine/C#、AE中如何由IFeature 如何获取所对应的FeatureClass等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9274037.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存