一、读取数据库中的要素类
string gdb path = @"C:\Temp.gdb";
await QueuedTask.Run( () =>
{
using (Geodatabase gdb = new Geodatabase(new FileGeodatabaseConnectionPath(new Uri(gdbPath))))
{
using (FeatureClass featureClass = gdb.OpenDataset<FeatureClass>(featureClassName))
{
}
}
});
二、创建要素
方法1:使用回调函数
editOperation.Callback(context =>
{
FeatureClassDefinition featureClassDefinition = featureClass.GetDefinition();
RowBuffer rowBuffer_zcx = featureClass.CreateRowBuffer();
rowBuffer_zcx["RNAME"] = name;
rowBuffer_zcx["MANAGE"] = manage;
rowBuffer_zcx[featureClassDefinition.GetShapeField()] = normalLine;
using (Feature feature_zcx = featureClass_zcx.CreateRow(rowBuffer_zcx))
{
feature_zcx.Store();
context.Invalidate(feature_zcx);
}
}, featureClass);
try
{
string message = string.Empty;
bool editResult = editOperation.Execute();
if (!editResult)
message = editOperation.ErrorMessage;
}
catch (GeodatabaseException exObj)
{
string message = exObj.Message;
}
方法2:使用geodatabase的applyedits方法(shapefile文件不可用)
gdb.ApplyEdits(() =>
{
FeatureClassDefinition featureClassDefinition = featureClass.GetDefinition();
RowBuffer rowBuffer = featureClass.CreateRowBuffer();
rowBuffer["DKMC"] = shpData.dkmc;
rowBuffer["DKDM"] = shpData.dkdm;
rowBuffer["XZQDM"] = shpData.xzqdm;
rowBuffer["XZQMC"] = shpData.xzqmc;
rowBuffer["YDMJ"] = shpData.ydmj;
rowBuffer["DH"] = shpData.dh;
rowBuffer["SCRQ"] = shpData.scrq;
rowBuffer["SCDW"] = shpData.scdw;
rowBuffer["BZ"] = shpData.bz;
rowBuffer["File"] = shpData.file;
rowBuffer["Folder"] = shpData.folder;
if (shpData.geometry.HasZ == true)
{
PolygonBuilderEx polygonBuilder = new PolygonBuilderEx(shpData.geometry as ArcGIS.Core.Geometry.Polygon); ;
polygonBuilder.HasZ = false;
ArcGIS.Core.Geometry.Polygon newPolygon = polygonBuilder.ToGeometry() as ArcGIS.Core.Geometry.Polygon;
rowBuffer[featureClassDefinition.GetShapeField()] = newPolygon;
}
else
{
rowBuffer[featureClassDefinition.GetShapeField()] = shpData.geometry;
}
using (ArcGIS.Core.Data.Feature feature = featureClass.CreateRow(rowBuffer))
{
feature.Store();
}
});