arcgisengine+C#新建点图层,添加要素并且给要素赋值

男怕选错行 2017-07-22 01:25:59

int bz = 0;
private IWorkspace2 pWorkspace2;
private IWorkspaceFactory wf;
private IFeatureWorkspace fws;
private IFields pFields;
private IFieldsEdit pFieldsEdit;
private IFeatureClass pFeatClass;
private void button9_Click(object sender, EventArgs e)
{

object text = this.comboBox1.Text;
//IWorkspaceFactory wf = new ShapefileWorkspaceFactoryClass();
//IWorkspaceName wname = wf.Create("C:\\temp\\", "biaozhu", null, 0);
//IName name_ = wname as IName;
//IWorkspace workspace = (IWorkspace)name_.Open();
if (bz == 0)
{
wf = new ShapefileWorkspaceFactoryClass();
IWorkspaceName wName = wf.Create(Application.StartupPath, "bz", null, 0);
fws = (IFeatureWorkspace)wf.OpenFromFile(Application.StartupPath + "\\bz", 0);
pWorkspace2 = fws as IWorkspace2;
//设置字段集
pFields = new FieldsClass();
pFieldsEdit = (IFieldsEdit)pFields;

//设置字段
IField pField = new FieldClass();
IFieldEdit pFieldEdit = (IFieldEdit)pField;

//创建类型为几何类型的字段
pFieldEdit.Name_2 = "shape";
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;

////设置投影坐标系为51N
//ISpatialReferenceFactory spatialReferenceFactory = new SpatialReferenceEnvironmentClass();
//IProjectedCoordinateSystem pcs = spatialReferenceFactory.CreateProjectedCoordinateSystem((int)esriSRProjCSType.esriSRProjCS_WGS1984UTM_51N);

//设置地理坐标系为WGS84
ISpatialReferenceFactory spatialReferenceFactory = new SpatialReferenceEnvironmentClass();
IGeographicCoordinateSystem pcs = spatialReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984);

//设置几何类型为点类型, 坐标系为上述
IGeometryDef pGeoDef = new GeometryDefClass();
IGeometryDefEdit pGeoDefEdit = (IGeometryDefEdit)pGeoDef;
pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;
pGeoDefEdit.SpatialReference_2 = pcs;
//pGeoDefEdit.SpatialReference_2 = geographicCoordinateSystem;
pFieldEdit.GeometryDef_2 = pGeoDef;
pFieldsEdit.AddField(pField);

//添加其他的字段
pField = new FieldClass();
pFieldEdit = (IFieldEdit)pField;
pFieldEdit.Name_2 = "biaozhu";
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
pFieldsEdit.AddField(pField);

//创建shapefile
pFeatClass = fws.CreateFeatureClass("bz", pFields, null, null, esriFeatureType.esriFTSimple, "shape", "");
bz = 1;
}



IWorkspaceEdit wedit;
//IFeatureCursor featurecursor;
wedit = pWorkspace2 as IWorkspaceEdit;
wedit.StartEditing(false);
wedit.StartEditOperation();
//IFeature pFeature = pFeatClass.CreateFeature();
IFeatureBuffer featureBuffer = pFeatClass.CreateFeatureBuffer();
IFeatureCursor featurecursor = pFeatClass.Insert(true);
IPoint pt = new PointClass();
pt.X = Convert.ToDouble(this.textBox2.Text);
pt.Y = Convert.ToDouble(this.textBox1.Text);
pt.PutCoords(pt.X, pt.Y);
int fieldIndex = pFields.FindField("biaozhu");
object featureOID;
featureBuffer.Shape = pt;
featureBuffer.set_Value(fieldIndex, text);
featureOID = featurecursor.InsertFeature(featureBuffer);
featurecursor.Flush();
wedit.StopEditOperation();
wedit.StopEditing(true);
System.Runtime.InteropServices.Marshal.ReleaseComObject(pFields);
System.Runtime.InteropServices.Marshal.ReleaseComObject(pFieldsEdit);
System.Runtime.InteropServices.Marshal.ReleaseComObject(fws);
System.Runtime.InteropServices.Marshal.ReleaseComObject(wf);


}
...全文
746 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
llllinlink 2020-01-02
  • 打赏
  • 举报
回复
报的什么错呀? 打断点看一下fieldIndex的值
fatlinee 2020-01-01
  • 打赏
  • 举报
回复
大佬6666666呀
男怕选错行 2017-07-22
  • 打赏
  • 举报
回复
大佬们,帮忙看看,就是新建个点图层,给图层添加点要素,赋值属性
男怕选错行 2017-07-22
  • 打赏
  • 举报
回复
setvalue()一直报错,好久没搞出来了,谁能帮帮我

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧