天厚地宽无限美,怎么可与你相比......

我们的故事不能忘,太多的回忆和希望,不管它有多疯狂,我们的故事不能忘,太多的情节要发展.....

 

去年写的server9.2编辑工具条代码,现在贴出来

protected void Toolbar2_CommandClick(object sender, ToolbarCommandClickEventArgs args)
    {
        switch (args.CommandName)
        {
            case "deletePolygon":
                ESRI.ArcGIS.ADF.Web.UI.WebControls.Map mapCtrl;
                mapCtrl =Map1;
                MapFunctionality mapFunc = (MapFunctionality)mapCtrl.GetFunctionality(0);
                MapResourceLocal mapResLocal = mapFunc.Resource as MapResourceLocal;
                ESRI.ArcGIS.ADF.ArcGISServer.MapDescription mapDesc;
                mapDesc = mapFunc.MapDescription;
                IServerContext pSOC;
                IMapServer pMapServer;
                IMap pMap;
                pSOC = mapResLocal.ServerContextInfo.ServerContext;
                pMapServer = pSOC.ServerObject as IMapServer;
                IMapServerObjects pMapServerObjs = pMapServer as IMapServerObjects;
                pMap = pMapServerObjs.get_Map(pMapServer.DefaultMapName);
                ILayer pLayer = pMap.get_Layer(1);
                IFeatureLayer pFeatureLyr = pLayer as IFeatureLayer;
                IFeatureClass pFeatCls = pFeatureLyr.FeatureClass;
                IDataset pDataset = pFeatCls as IDataset;
                IWorkspace pWS = pDataset.Workspace;
                IWorkspaceEdit pWorkspaceEdit = pWS as IWorkspaceEdit;
                pWorkspaceEdit.StartEditing(false);
                pWorkspaceEdit.StartEditOperation();
                //IFeatureBuffer pFeatureBuffer;
                //IFeatureCursor pFeatureCuror;
                IFeature pFeature;
                ESRI.ArcGIS.ADF.ArcGISServer.LayerDescription featureLayer = mapDesc.LayerDescriptions[1];
               // pFeature = featureLayer.SelectionFeatures[0];
                //pFeatureCuror = pFeatCls.GetFeature(featureLayer.SelectionFeatures[0]);
               // pFeature=pFeatureCuror.NextFeature();
                pFeature = pFeatCls.GetFeature(featureLayer.SelectionFeatures[0]);
                pFeature.Delete();
                pWorkspaceEdit.StopEditOperation();
                pWorkspaceEdit.StopEditing(true);
                mapCtrl.Refresh();
                break;
            case "back":
                zoomback();
                break;
            case "forward":
                zoomforward();
                break;
        }
    }

前后视图

private ArrayList ExtentList = new ArrayList();
    private ArrayList m_extenthistory;
    private ESRI.ArcGIS.ADF.Web.Geometry.Envelope m_lastextent;
    private bool isPooled = false;
    internal const int MAXIMUM_EXTENT_HISTORY_COUNT = 10;


//地图视图改变
    protected void Map1_ExtentChanged(object sender, ExtentEventArgs args)
    {
        m_extenthistory = Session["extenthistory"] as ArrayList;
        int index = 0;
        if (Session["index"] != null)
        {
            index = (int)Session["index"];
        }
        if (m_extenthistory == null)
        {
            m_extenthistory = new ArrayList();
        }
        if (m_extenthistory.Count >= MAXIMUM_EXTENT_HISTORY_COUNT)
            m_extenthistory.RemoveAt(0);
        m_extenthistory.Add(Map1.Extent);
        index++;
        if (index == m_extenthistory.Count)
        {
            index = m_extenthistory.Count - 1;
        }
        // Add extent history and index to Session
        Session.Add("index", index);
        Session.Add("extenthistory", m_extenthistory);
        m_lastextent = Map1.Extent as ESRI.ArcGIS.ADF.Web.Geometry.Envelope;
        UpdateViewerSessionObjects();
    }
    private void UpdateViewerSessionObjects()
    {
        Session.Add("Map1_CurrentExtent", this.Map1.Extent);
    }
    //前一视图
    public void zoomback()
    {
        int index = 0;
        if (Session["index"] != null) index = (int)Session["index"];
        m_extenthistory = Session["extenthistory"] as ArrayList;
        if (m_extenthistory == null)
            return;
        index--;
        if (index < 0)
            index = 0;
        ESRI.ArcGIS.ADF.Web.Geometry.Envelope myencelope = m_extenthistory[index] as ESRI.ArcGIS.ADF.Web.Geometry.Envelope;
        this.Map1.Extent = myencelope;
        this.Map1.Refresh();
        Session["index"] = index;
        UpdateViewerSessionObjects();
    }
    //后一视图
    public void zoomforward()
    {
        int index = 0;
        if (Session["index"] != null) index = (int)Session["index"];
        m_extenthistory = Session["extenthistory"] as ArrayList;
        if (m_extenthistory == null)
            return;
        index++;
        if (index == m_extenthistory.Count)
            index = m_extenthistory.Count - 1;
        ESRI.ArcGIS.ADF.Web.Geometry.Envelope myencelope = m_extenthistory[index] as ESRI.ArcGIS.ADF.Web.Geometry.Envelope;
        this.Map1.Extent = myencelope;
        this.Map1.Refresh();
        Session["index"] = index;
        UpdateViewerSessionObjects();
    }


选中
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Collections.Generic;
using System.Text;
using System.Collections;
//引用arcgis类
using ESRI.ArcGIS.ADF.Web.UI.WebControls.Tools;
using ESRI.ArcGIS.ADF.Web.UI.WebControls;
using ESRI.ArcGIS.ADF.Web.DataSources;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using ESRI.ArcGIS.ADF.ArcGISServer;
/// <summary>
/// selectPolygon 的摘要说明
/// </summary>
public class selectPolygon : IMapServerToolAction
{
public selectPolygon()
{
  //
  // TODO: 在此处添加构造函数逻辑
  //
}
    void IMapServerToolAction.ServerAction(ToolEventArgs args)
    {
        int resource_index = 0;
        ESRI.ArcGIS.ADF.Web.UI.WebControls.Map mapctrl = (ESRI.ArcGIS.ADF.Web.UI.WebControls.Map)args.Control;
        //按名称取得图层
        string sourcelayername = "房屋层";
        ESRI.ArcGIS.ADF.Web.DataSources.IMapFunctionality mf = (ESRI.ArcGIS.ADF.Web.DataSources.IMapFunctionality)mapctrl.GetFunctionality(resource_index);
        ESRI.ArcGIS.ADF.Web.DataSources.IGISResource gisresource = mf.Resource;
        RectangleEventArgs rectargs = (RectangleEventArgs)args;
        System.Drawing.Rectangle myrect = rectargs.ScreenExtent;
        ESRI.ArcGIS.ADF.Web.Geometry.Point minpnt = ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(myrect.Left, myrect.Bottom, mapctrl.Extent, (int)mapctrl.Width.Value, (int)mapctrl.Height.Value);
        ESRI.ArcGIS.ADF.Web.Geometry.Point maxpnt = ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(myrect.Right, myrect.Top, mapctrl.Extent, (int)mapctrl.Width.Value, (int)mapctrl.Height.Value);
        //ESRI.ArcGIS.ADF.Web.Geometry.Point minpnt = ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(myrect.Left, myrect.Bottom, mapctrl.Extent, mf.DisplaySettings.ImageDescriptor.Width, mf.DisplaySettings.ImageDescriptor.Height);
        //ESRI.ArcGIS.ADF.Web.Geometry.Point maxpnt = ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(myrect.Right, myrect.Top, mapctrl.Extent, mf.DisplaySettings.ImageDescriptor.Width, mf.DisplaySettings.ImageDescriptor.Height);
        ESRI.ArcGIS.ADF.Web.Geometry.Envelope mappoly = new ESRI.ArcGIS.ADF.Web.Geometry.Envelope(minpnt, maxpnt);
        bool supported = gisresource.SupportsFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality));
        if (supported)
        {
            ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality qfunc = (ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality)gisresource.CreateFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality), null);
            string[] lids;
            string[] lnames;
            qfunc.GetQueryableLayers(null, out lids, out lnames);
            int layer_index = 0;
            for (int i = 0; i < lnames.Length; i++)
            {
                if (lnames == sourcelayername)
                {
                    if (lids is string)
                    {
                        if (!int.TryParse((string)lids, out layer_index))
                            layer_index = i;
                    }
                    else
                    {
                        layer_index = i;
                    }
                    break;
                }
            }
            if (qfunc.Resource is ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapResourceLocal)
            {
                ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapFunctionality ags_mf = (ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapFunctionality)mf;
                ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapResourceBase ags_mr = (ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapResourceBase)qfunc.Resource;
                ESRI.ArcGIS.ADF.ArcGISServer.MapDescription mapdescription;
                mapdescription = ags_mf.MapDescription;
                LayerDescription[] layerdescs = mapdescription.LayerDescriptions;
                MapLayerInfo[] mli = ags_mr.MapServerInfo.MapLayerInfos;
                LayerDescription featureLayer = layerdescs[layer_index];
                if (featureLayer == null)
                {
                    // 图层为空
                    throw new Exception("featurelayer null");
                }
                else
                {
                    EnvelopeN envelopen = ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.Converter.FromAdfEnvelope(mappoly);
                    SpatialFilter sf = new SpatialFilter();
                    sf.FilterGeometry = envelopen;
                    sf.GeometryFieldName = "SHAPE";
                    sf.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
                    MapServerProxy msdp = ags_mr.MapServerProxy;
                    RgbColor irgbc = new RgbColor();
                    irgbc.Red = 250;
                    irgbc.Green = 250;
                    irgbc.Blue = 0;
                    irgbc.AlphaValue = 255;
                    featureLayer.SelectionColor = irgbc;
                    FIDSet ifid = msdp.QueryFeatureIDs(mapdescription.Name, featureLayer.LayerID, sf);
                    featureLayer.SelectionFeatures = ifid.FIDArray;
                    args.Control.Page.Session.Add("fid", ifid.FIDArray[0].ToString().Trim());
                    mapctrl.Refresh();
                }
            }
        }
    }
}
分割
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
//引用arcgis类
using ESRI.ArcGIS.ADF.Web.UI.WebControls.Tools;
using ESRI.ArcGIS.ADF.Web.UI.WebControls;
using ESRI.ArcGIS.ADF.ArcGISServer;
using ESRI.ArcGIS.Server;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Display;
using System.Collections;
using ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.ADF.Web;
using ESRI.ArcGIS.ADF.Web.DataSources;
using ESRI.ArcGIS.ADF.Web.Geometry;
using ESRI.ArcGIS.ADF.Web.Display.Graphics;
using System.Collections.Generic;
/// <summary>
/// splitPolygon 的摘要说明
/// </summary>
public class splitPolygon:IMapServerToolAction
{
public splitPolygon()
{
  //
  // TODO: 在此处添加构造函数逻辑
  //
}
    void IMapServerToolAction.ServerAction(ToolEventArgs args)
    {
        //取得所画屏幕线的点集
        ESRI.ArcGIS.ADF.Web.UI.WebControls.Map mapCtrl = args.Control as ESRI.ArcGIS.ADF.Web.UI.WebControls.Map;
        PolylineEventArgs peag = (PolylineEventArgs)args;
        System.Drawing.Point[] screen_points = peag.Vectors;
        //定义地图参数
        MapFunctionality mapFunc = (MapFunctionality)mapCtrl.GetFunctionality(0);
        MapResourceLocal mapResLocal = mapFunc.Resource as MapResourceLocal;
        ESRI.ArcGIS.ADF.ArcGISServer.MapDescription mapDesc;
        mapDesc = mapFunc.MapDescription;
        IServerContext pSOC;
        IMapServer pMapServer;
        IMap pMap;
        pSOC = mapResLocal.ServerContextInfo.ServerContext;
        pMapServer = pSOC.ServerObject as IMapServer;
        IMapServerObjects pMapServerObjs = pMapServer as IMapServerObjects;
        pMap = pMapServerObjs.get_Map(pMapServer.DefaultMapName);
        //转化屏幕线为地图线
        IPointCollection pPointColl;
        pPointColl = (IPointCollection)pSOC.CreateObject("esriGeometry.Polyline");
        for (int i = 0; i < screen_points.Length; i++)
        {
            IPoint pPoint;
            ESRI.ArcGIS.ADF.Web.Geometry.Point mappnt = ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(screen_points, mapCtrl.Extent, (int)mapCtrl.Width.Value, (int)mapCtrl.Height.Value);
            pPoint = (IPoint)pSOC.CreateObject("esriGeometry.Point");
            pPoint.X = mappnt.X;
            pPoint.Y = mappnt.Y;
            object missingVal = System.Reflection.Missing.Value;
            pPointColl.AddPoint(pPoint, ref missingVal, ref missingVal);
        }
        IGeometry pPolylineGeo = pPointColl as IGeometry;
        //取得要分割的feature
        IFeatureLayer featurelayer = pMap.get_Layer(1) as IFeatureLayer;
        IFeatureClass featureclass = featurelayer.FeatureClass;
        IFeature feature = featureclass.GetFeature(Convert.ToInt32(args.Control.Page.Session["fid"].ToString().Trim()));
        //打开工作空间
        IDataset pDataset = featureclass as IDataset;
        IWorkspace pWS = pDataset.Workspace;
        IWorkspaceEdit pWorkspaceEdit = pWS as IWorkspaceEdit;
        pWorkspaceEdit.StartEditing(false);
        pWorkspaceEdit.StartEditOperation();
        //开始分割
        ESRI.ArcGIS.Geometry.ITopologicalOperator tt;
        tt = feature.Shape as ESRI.ArcGIS.Geometry.ITopologicalOperator;
        IGeometry t1, t2;
        t1 = pSOC.CreateObject("esriGeometry.Polygon") as IGeometry;
        t2 = pSOC.CreateObject("esriGeometry.Polygon") as IGeometry;
        IPolyline pline =pSOC.CreateObject("esriGeometry.Polyline") as IPolyline;
        pline = pPolylineGeo as IPolyline;
        tt.Cut(pline,out t1, out t2);
        feature.Shape = t1;
        IFeature feature2 = featureclass.CreateFeature();
        feature2.Shape = t2;
      
        //保存分割结果及刷新地图
        feature.Store();
        feature2.Store();
        pWorkspaceEdit.StopEditOperation();
        pWorkspaceEdit.StopEditing(true);
        mapCtrl.Refresh();  
    }
}


合并
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
//引用arcgis类
using ESRI.ArcGIS.ADF.Web.UI.WebControls.Tools;
using ESRI.ArcGIS.ADF.Web.UI.WebControls;
using ESRI.ArcGIS.ADF.ArcGISServer;
using ESRI.ArcGIS.Server;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Display;
using System.Collections;
using ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.ADF.Web;
using ESRI.ArcGIS.ADF.Web.DataSources;
using ESRI.ArcGIS.ADF.Web.Geometry;
using ESRI.ArcGIS.ADF.Web.Display.Graphics;
using System.Collections.Generic;
/// <summary>
/// unionPolygon 的摘要说明
/// </summary>
public class unionPolygon : IMapServerToolAction
{
public unionPolygon()
{
  //
  // TODO: 在此处添加构造函数逻辑
  //
}
    void IMapServerToolAction.ServerAction(ToolEventArgs args)
    {
        //取屏幕点
        ESRI.ArcGIS.ADF.Web.UI.WebControls.Map mapCtrl;
        mapCtrl = (ESRI.ArcGIS.ADF.Web.UI.WebControls.Map)args.Control;
        PointEventArgs peag = (PointEventArgs)args;
        System.Drawing.Point screen_point = peag.ScreenPoint;
        //定义地图参数
        MapFunctionality mapFunc = (MapFunctionality)mapCtrl.GetFunctionality(0);
        MapResourceLocal mapResLocal = mapFunc.Resource as MapResourceLocal;
        ESRI.ArcGIS.ADF.ArcGISServer.MapDescription mapDesc;
        mapDesc = mapFunc.MapDescription;
        IServerContext pSOC;
        IMapServer pMapServer;
        IMap pMap;
        pSOC = mapResLocal.ServerContextInfo.ServerContext;
        pMapServer = pSOC.ServerObject as IMapServer;
        IMapServerObjects pMapServerObjs = pMapServer as IMapServerObjects;
        pMap = pMapServerObjs.get_Map(pMapServer.DefaultMapName);
        //转屏幕点到地图点
        IPoint pPoint;
        ESRI.ArcGIS.ADF.Web.Geometry.Point mappnt = ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(screen_point, mapCtrl.Extent, (int)mapCtrl.Width.Value, (int)mapCtrl.Height.Value);
        pPoint = (IPoint)pSOC.CreateObject("esriGeometry.Point");
        pPoint.X = mappnt.X;
        pPoint.Y = mappnt.Y;

        //另外一种转换方法
        ESRI.ArcGIS.ADF.Web.Geometry.Point mapPoint = ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(screen_point.X, screen_point.Y, mapCtrl.GetTransformationParams(TransformationDirection.ToMap));
        IdentifyOption m_idOption = IdentifyOption.VisibleLayers;
        IGISResource resource;
        IQueryFunctionality query;
        string[] layerIds;
        string[] layerNames;
        
        resource = mapFunc.Resource;
        query = resource.CreateFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality), "select") as IQueryFunctionality;
        query.GetQueryableLayers(null, out layerIds, out layerNames);
        //根据fid查找另外一个feature
        DataTable[] ds=null;
        ds = query.Identify(mapFunc.Name, mapPoint, 5, m_idOption, null);
        string my="";
        if (ds.Length < 2)
        {
            my = ds[0].Rows[0]["OBJECTID"].ToString().Trim();
        }
        ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapResourceBase ags_mr = (ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapResourceBase)mapFunc.Resource;
        MapServerProxy msdp = ags_mr.MapServerProxy;
        ESRI.ArcGIS.ADF.ArcGISServer.SpatialFilter sf = new ESRI.ArcGIS.ADF.ArcGISServer.SpatialFilter();
        sf.GeometryFieldName = "SHAPE";
        sf.WhereClause = "OBJECTID = '" + my + "'";
        sf.SpatialRel = ESRI.ArcGIS.ADF.ArcGISServer.esriSpatialRelEnum.esriSpatialRelIntersects;
        ESRI.ArcGIS.ADF.ArcGISServer.FIDSet fidset = msdp.QueryFeatureIDs(mapDesc.Name,1,sf);
        //取得原来选中的feature
        int selected_fid = Convert.ToInt32(args.Control.Page.Session["fid"].ToString().Trim());
        IFeatureLayer featurelayer = pMap.get_Layer(1) as IFeatureLayer;
        IFeatureClass featureclass = featurelayer.FeatureClass;
        //打开工作空间
        IDataset pDataset = featureclass as IDataset;
        IWorkspace pWS = pDataset.Workspace;
        IWorkspaceEdit pWorkspaceEdit = pWS as IWorkspaceEdit;
        pWorkspaceEdit.StartEditing(false);
        pWorkspaceEdit.StartEditOperation();
        //开始合并
        IFeature feature1 = featureclass.GetFeature(Convert.ToInt32(my));
        IFeature feature2 = featureclass.GetFeature(selected_fid);
        
        ESRI.ArcGIS.Geometry.IPolygon un1,un2;
        un1 = feature1.Shape as ESRI.ArcGIS.Geometry.IPolygon;
        if (un1.SpatialReference == null)
        {
            un1.SpatialReference = mapCtrl.SpatialReference as ISpatialReference;
        }
        un2 = feature2.Shape as ESRI.ArcGIS.Geometry.IPolygon;
        if (un2.SpatialReference == null)
        {
            un2.SpatialReference = mapCtrl.SpatialReference as ISpatialReference;
        }
        un1.Project(feature2.Shape.SpatialReference);
        un1.SnapToSpatialReference();
        un2.SnapToSpatialReference();
      
        ESRI.ArcGIS.Geometry.ITopologicalOperator tt=un1 as ESRI.ArcGIS.Geometry.ITopologicalOperator;
        try
        {
            feature1.Shape = tt.Union((IGeometry)un2) as IGeometry;
        }
        catch
        {
            args.Control.Page.Response.Write("不能合并");
        }
            feature1.Store();
            feature2.Delete();
            pWorkspaceEdit.StopEditOperation();
            pWorkspaceEdit.StopEditing(true);
            mapCtrl.Refresh();  
    }
}

修改属性就不写了,只要选中feature,然后feature.setvalue()就好了

posted on 2008-05-07 16:58  草样年华........  阅读(1178)  评论(4编辑  收藏  举报

导航