zoukankan      html  css  js  c++  java
  • 右击地图功能(全图和另存为)

    首先在页面上添加菜单控件:

      <esri:ContextMenu ID="ContextMenu1" runat="server" BackColor="White" OnItemClicked="ContextMenu1_ItemClicked1" />

    在后台pageload页面添加显示全图和另存为的按钮:

    //右击事件
    public string StringResultCallBack;

     StringResultCallBack = Page.ClientScript.GetCallbackEventReference(this, "message", "processCallbackResult", "context", "postBackError", true);

    if (IsPostBack)
    return;
    ContextMenu1.Items.Clear();
    ESRI.ArcGIS.ADF.Web.UI.WebControls.ContextMenuItem fullextMenuItem = new ESRI.ArcGIS.ADF.Web.UI.WebControls.ContextMenuItem("images/fullextent.jpg", "全图", null);
    ESRI.ArcGIS.ADF.Web.UI.WebControls.ContextMenuItem saveMenuItem = new ESRI.ArcGIS.ADF.Web.UI.WebControls.ContextMenuItem("images/save.jpg", "另存为图片", null);
    ContextMenu1.Items.Add(fullextMenuItem);
    ContextMenu1.Items.Add(saveMenuItem);

    string format = "esriShowContextMenu(event,'{0}','{1}','{2}');return false;";
    string showContextMenu = string.Format(format, ContextMenu1.ClientID, Map1.UniqueID, "");
    Map1.Attributes.Add("oncontextmenu", showContextMenu);

    右击触发的事件:

    protected void ContextMenu1_ItemClicked1(object sender, ESRI.ArcGIS.ADF.Web.UI.WebControls.ContextMenuItemEventArgs args)
    {
    switch (args.Item.Text)
    {
    case "全图":
    {
    MapHelper.ShowFullExtent(Map1);
    ContextMenu1.CallbackResults.CopyFrom(Map1.CallbackResults);
    break;
    }
    case "另存为图片":
    {

    MapHelper.SaveAsPicture(Map1);
    ContextMenu1.CallbackResults.CopyFrom(Map1.CallbackResults);
    break;
    }
    }
    }

    在app_code中添加MapHelper类,代码如下:

    /// <summary>
    /// 全图
    /// </summary>
    /// <param name="map"></param>
    public static void ShowFullExtent(Map map)
    {
    ESRI.ArcGIS.ADF.Web.Geometry.Envelope fullExtent = null;
    foreach (IMapFunctionality imf in map.GetFunctionalities())
    {
    MapFunctionality mf = imf as MapFunctionality;
    ESRI.ArcGIS.ADF.ArcGISServer.MapDescription mapDescription = mf.MapDescription;
    ESRI.ArcGIS.ADF.ArcGISServer.Envelope envServer = mapDescription.MapArea.Extent;
    ESRI.ArcGIS.ADF.Web.Geometry.Envelope env = null;
    env = ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.Converter.ToAdfGeometry(envServer) as ESRI.ArcGIS.ADF.Web.Geometry.Envelope;
    if (fullExtent == null)
    {
    fullExtent = env;
    }
    else
    {
    fullExtent.Union(env);
    }
    }
    map.Extent = fullExtent;
    map.Refresh();
    }
    /// <summary>
    /// 地图另存为
    /// </summary>
    /// <param name="map"></param>
    public static void SaveAsPicture(Map map)
    {
    int imgHeight = (int)map.Height.Value;//获得地图的高
    int imgWidth = (int)map.Width.Value;//获得地图的宽

    //将地图中的所有绘图功能进行循环,将生成的图片放入bitmap
    System.Collections.Generic.IList<Bitmap> bitmaps = new System.Collections.Generic.List<Bitmap>();
    foreach (IMapFunctionality mf in map.GetFunctionalities())
    {
    ESRI.ArcGIS.ADF.Web.MapImage mi = mf.DrawExtent(map.Extent);
    if (mi != null)
    bitmaps.Add(mi.GetImage());
    }
    Bitmap newImg = new Bitmap(imgWidth, imgHeight);//根据地图的宽、高创建一个新的图片
    Graphics imgGraphics = Graphics.FromImage(newImg);//封装一个新的GDI+ 绘图图面,并将bitmap列表中的图片放入
    imgGraphics.FillRectangle(new SolidBrush(System.Drawing.Color.LightGray), 0, 0, imgWidth, imgHeight);

    for (int j = bitmaps.Count - 1; j >= 0; j--)
    {
    Bitmap bmp = bitmaps[j];
    imgGraphics.DrawImage(bmp, 0, 0, imgWidth, imgHeight);
    }
    string fileNameVirtual = System.DateTime.Now.ToString() + ".jpg";//图片的名字
    fileNameVirtual = fileNameVirtual.Replace(":", "-");
    string fileName = map.Page.MapPath("Output\\" + fileNameVirtual);//存放路径
    newImg.Save(fileName, System.Drawing.Imaging.ImageFormat.Jpeg);//保存
    imgGraphics.Dispose();//释放资源
    newImg.Dispose();//释放资源

    //构造javascript代码
    string functionValue = "open('SavePicture.aspx?FileName=" + fileNameVirtual + "', 'SavePicture');";
    object[] oa = new object[1];
    oa[0] = functionValue;
    CallbackResult cr = new CallbackResult(null, null, "javascript", functionValue);
    map.CallbackResults.Add(cr);


    }

    记得要在项目中添加一个Output文件夹喔,用于放保存的地图图片

  • 相关阅读:
    医疗设备软件的安全性问答
    python使用技巧
    C++对象模型
    面向对象方法综述
    如何设计可扩展性系统架构
    敏捷过程
    python中import的相关知识总结
    软件架构的关键原则
    读后感——程序员的思维修炼
    LINUX系统备份工具
  • 原文地址:https://www.cnblogs.com/lff255356/p/2741160.html
Copyright © 2011-2022 走看看