基于ArcGIS Server的ADF的异步回调机制实现基于动态数据显示问题

在高亮显示、选择中、或者动态数据的时候我们都会使用到GraphicsLayer中的ElementGraphicsLayer或者FeatureGraphicsLayer,我们如何增加动态点以及考虑回调的问题来解决刷新整个页面的问题呢?

 

 

一、我们加入一个element到ElementGraphicsLayer中可参考如下代码:

 public string drawPoint(double x, double y, string lableText)
    {
        ESRI.ArcGIS.ADF.Web.Geometry.Point pPt = new ESRI.ArcGIS.ADF.Web.Geometry.Point();
        pPt.X = x;
        pPt.Y = y;
        int nR = Convert.ToByte(System.Configuration.ConfigurationManager.AppSettings["TextColorR"]);
        int nG = Convert.ToByte(System.Configuration.ConfigurationManager.AppSettings["TextColorG"]);
        int nB = Convert.ToByte(System.Configuration.ConfigurationManager.AppSettings["TextColorB"]);
        int nFontSize = Convert.ToByte(System.Configuration.ConfigurationManager.AppSettings["TextFontSize"]);
        System.Drawing.Color myColor = System.Drawing.Color.FromArgb(nR, nG, nB);

        ESRI.ArcGIS.ADF.Web.Display.Graphics.GraphicElement ge = null;
        ESRI.ArcGIS.ADF.Web.Display.Graphics.GraphicElement ge1 = null;
        ESRI.ArcGIS.ADF.Web.FontInfo zoomFont = new ESRI.ArcGIS.ADF.Web.FontInfo("Arial", nFontSize, myColor, ESRI.ArcGIS.ADF.Web.FontStyle.Bold);
        ESRI.ArcGIS.ADF.Web.Display.Symbol.TextMarkerSymbol tMarkSyb = new ESRI.ArcGIS.ADF.Web.Display.Symbol.TextMarkerSymbol(zoomFont, lableText);     

        nR = Convert.ToByte(System.Configuration.ConfigurationManager.AppSettings["PointColorR"]);
        nG = Convert.ToByte(System.Configuration.ConfigurationManager.AppSettings["PointColorG"]);
        nB = Convert.ToByte(System.Configuration.ConfigurationManager.AppSettings["PointColorB"]);
        myColor = System.Drawing.Color.FromArgb(nR, nG, nB);

        ge = new ESRI.ArcGIS.ADF.Web.Display.Graphics.GraphicElement(pPt, tMarkSyb);
        ge1 = new ESRI.ArcGIS.ADF.Web.Display.Graphics.GraphicElement(pPt, myColor);

        IEnumerable gfc = m_map.GetFunctionalities();
        ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapResource gResource = null;
        foreach (IGISFunctionality gfunc in gfc)
        {
            if (gfunc.Resource is ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapResource)
            {
                gResource = (ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapResource)gfunc.Resource;
                break;
            }
        }
        if (gResource == null)
        {
            return "";
        }
        ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer glayer = null;
        foreach (System.Data.DataTable dt in gResource.Graphics.Tables)
        {
            if (dt is ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer)
            {
                glayer = (ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer)dt;
                break;
            }
        }
        if (glayer == null)
        {
            glayer = new ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer();
            gResource.Graphics.Tables.Add(glayer);
        }

        //清除已有数据
        glayer.Clear();
        glayer.TableName = SelectLyrName;
        glayer.Add(ge1);
        glayer.Add(ge);
         if (m_map.ImageBlendingMode == ImageBlendingMode.WebTier)
        { 
            m_map.Refresh(); 
        }
        else if (m_map.ImageBlendingMode == ImageBlendingMode.Browser)
        {
            //只刷新Graphics Resource
            m_map.RefreshResource(gResource.Name);
        }
        return m_map.CallbackResults.ToString();
    }

二、考虑回调的问题

在你触发事件的过程中加入,这里以一个控件CallbackButton1代替,在CallbackButton1_Clicked事件中加入下面一行:

CallbackButton1.CallbackResults.CopyFrom(Map1.CallbackResults); 

其中控件的回调机制可参考Asp.Net的相关文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值