比如 在一个多边形的图层中 新增一个多边形
我的方法是 点击toolbar中一个tool,执行画多边形的客户端代码,然后在map的polygon事件中取得我画的多边形,存如当前的多边形图层,polygon事件响应代码如下:
private void Map1_Polygon(object sender, ESRI.ArcGIS.Server.WebControls.PolygonEventArgs args)
{
if (args.ToolName == "newpolygon")
{
ESRI.ArcGIS.Server.WebControls.WebMap webmap = Map1.CreateWebMap();
IFeatureLayer flayer = (webmap.MapServer as IMapServerObjects).get_Layer(webmap.DataFrame,0) as IFeatureLayer; //获取当前活动图层了函数,这里就不贴了,就是调用GetFeatureLayer(int lyid)函数
if (flayer == null) return;
if (flayer.FeatureClass.ShapeType != ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon)
{
string sc;
sc = "";
Page.RegisterClientScriptBlock("ShapeTypeError",sc);
return;
}
//生成多边形
ESRI.ArcGIS.Server.IServerContext context;
webmap.ManageLifetime(flayer);
context = webmap.ServerContext;
ESRI.ArcGIS.Geometry.IPolygon poly = context.CreateObject("esriGeometry.Polygon") as ESRI.ArcGIS.Geometry.IPolygon; //'new ag.PolygonClass();
webmap.ManageLifetime(poly);
ESRI.ArcGIS.Geometry.IPoint pt;
ESRI.ArcGIS.Geometry.IGeometryCollection ringcol = context.CreateObject("esriGeometry.Polygon") as ESRI.ArcGIS.Geometry.IGeometryCollection;// new PolygonClass();
webmap.ManageLifetime(ringcol);
ESRI.ArcGIS.Geometry.IPointCollection ptcol =context.CreateObject("esriGeometry.Ring") as ESRI.ArcGIS.Geometry.IPointCollection;// new RingClass();
webmap.ManageLifetime(ptcol);
object obj=Type.Missing;
for (int i=0;i<=args.Vectors.Length-1;i++)
{
pt = webmap.ToMapPoint(args.Vectors.X,args.Vectors.Y);
ptcol.AddPoint(pt,ref obj,ref obj);
}
ringcol.AddGeometry(ptcol as IGeometry,ref obj,ref obj);
poly = ringcol as IPolygon;
//将多边形写入到图层中
ESRI.ArcGIS.Geodatabase.IDataset dataset=flayer.FeatureClass as IDataset;
ESRI.ArcGIS.Geodatabase.IWorkspaceEdit edit=dataset.Workspace as IWorkspaceEdit;
edit.StartEditOperation();
ESRI.ArcGIS.Geodatabase.IFeature feature = flayer.FeatureClass.CreateFeature();
feature.Shape = poly as IGeometry;
feature.Store();
edit.StopEditOperation();
webmap.Refresh();
webmap.Dispose();
}
}
程序在红色处报错,麻烦各位帮忙看看