一、根据路径打开shp文件,并编辑
添加引用
- using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.DataSourcesFile;
using System.IO;
1、根据路径加载shp文件
private void reSetMap()
{
//1、创建工作空间工厂
IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory();
string path = Application.StartupPath + @"\Data\Map\shp\水质基本站.shp";
string pFolder = Path.GetDirectoryName(path);
string pFileName = Path.GetFileName(path);
//2打开shapeFile工作空间
IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(pFolder, 0);
IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace;
//3、打开要素类
IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass(pFileName);
//4、创建要素图层
IFeatureLayer pFLayer = new FeatureLayerClass();
//5、关联图层和要素类
pFLayer.FeatureClass = pFeatureClass;
pFLayer.Name = pFeatureClass.AliasName;
//6、删除所有要素
DeleteAllFeatures(pLayer);//方法调用
//7、添加点要素
**其中dt存放的是经纬度数据和要写入的值,本例为字段【STNM】写入值**
AddNewFeatureFromPoint(DataTable dt,IFeatureClass pFeatureClass);//方法调用
}
2、删除所有要素 (方法一)
/// <summary>
/// 删除图层中所有要素
/// </summary>
/// <param name="pLayer">要删除的图层</param>
public void DeleteAllFeatures(IFeatureLayer pLayer)
{
//过滤器
IQueryFilter pQueryFilter = new QueryFilterClass();
pQueryFilter.WhereClause = "\"FID\">-1";
ITable pTable = pLayer.FeatureClass as ITable;
pTable.DeleteSearchedRows(pQueryFilter);
}
3、根据经纬度添加要素 ,并对[STNM]字段写入值
/// <summary>
/// 在【水质基本站】图层中添加要素,图层中已存在
/// </summary>
/// <param name="dt">存放经纬度数据的表</param>
/// <param name="pFeature">要添加要素的图层</param>
public void AddNewFeatureFromPoint(DataTable dt,IFeatureClass pFeatureClass)
{
IPoint pPoint = new PointClass();
string lat = ""; //经度
string lng = ""; //纬度
string stnm=" "; //要写入值的字段
for (int i = 0; i < dt.Rows.Count; i++)
{
lat = dt.Rows[i]["LGTD"].ToString();
lng = dt.Rows[i]["LTTD"].ToString();
stnm = dt.Rows[i]["STNM"].ToString();
pPoint.X = Convert.ToDouble(lat);
pPoint.Y = Convert.ToDouble(lng);
IFeature pFeature = pFeatureClass.CreateFeature();
pFeature.Shape = pPoint;
pFeature.set_Value(pFeature.Fields.FindField("STNM"), stnm);
pFeature.Store();
}
}