
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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)