SuperMap IS.NET保存地图之Ajax篇(转)

软件版本:SuperMap IS.NET 5.3.0.9628

问题源起:在SuperMap IS.NET 5.3中WebControl和AjaxControl分别提供了两组控件来实现地图的打印功能,分别名为PrintToolControl和MapPrintControl。两者配合即能实现地图控件(MapControl)内容打印和另存为图片。

在AjaxControl中,因为地图控件内容是由多个256*256px的图片组成,采用瓦片金字塔技术组织。所以地图控件显示的内容并不是一张完整的地图,所以也为保存当前地图提出了一个难题。

不是有控件吗?呵呵~的确有控件,不过控件存在以下问题:1.可能拖拽了PrintToolControl导致NullReferenceException;2.PrintToolControl能实例化,不过点击后无响应。

 

所以还得自己干,才能丰衣足食啊!

 

首先咱们采用AjaxControl的方法,用一个Button来实现保存地图,代码如下:

[Csharp] view plain copy print ?
  1. protected void Button1_Click(object sender, EventArgs e)  
  2.     {  
  3.         MapParam param = MapControl1.GetCurrentMapParam();  
  4.         param.ReturnImage = true;  
  5.         param.Viewer = new PixelRect((int)MapControl1.Width.Value, (int)MapControl1.Height.Value);  
  6.         param.ViewBounds = new MapRect(MapControl1.ViewBounds.LeftBottom, MapControl1.ViewBounds.RightTop);  
  7.   
  8.         //Response.Write(MapControl1.ViewBounds.LeftBottom.X.ToString());   
  9.   
  10.         MapImage mi = MapControl1.GetMapImage(param, 100);  
  11.   
  12.         if (mi != null)  
  13.         {  
  14.             Response.Write(mi.MapUrl);   //输出地图控件图片地址   
  15.         }  
  16.     }  
protected void Button1_Click(object sender, EventArgs e) { MapParam param = MapControl1.GetCurrentMapParam(); param.ReturnImage = true; param.Viewer = new PixelRect((int)MapControl1.Width.Value, (int)MapControl1.Height.Value); param.ViewBounds = new MapRect(MapControl1.ViewBounds.LeftBottom, MapControl1.ViewBounds.RightTop); //Response.Write(MapControl1.ViewBounds.LeftBottom.X.ToString()); MapImage mi = MapControl1.GetMapImage(param, 100); if (mi != null) { Response.Write(mi.MapUrl); //输出地图控件图片地址 } } 再采用AjaxScript脚本方式实现下(我更喜欢这个),后台发送一个xmlhttpRequest请求到服务器端的MapHandler,生成一张图片,并返回地图地址。
[JScript] view plain copy print ?
  1. // 保存当前地图   
  2. function saveMap()  
  3. {  
  4.     var param = new Object();  
  5.     param = MapControl1.GetMapParam();  
  6.       
  7.     var pixelRect = MapControl1.GetSize();  
  8.     param.SetPixelRect(pixelRect);      
  9.   
  10.     MapControl1.GetMapImage(param, onSaveMapComplete, onSaveMapError);  
  11. }  
  12.   
  13. function onSaveMapComplete(URL)  
  14. {  
  15.     if(URL != null)  
  16.     {  
  17.         if( URL.length > 0)  
  18.         {  
  19.             window.open(URL,'地图保存','menubar=yes,titlebar=yes,toolbar=no,scrollbars=no,location=no,status=no');  
  20.         }  
  21.     }  
  22. }  
  23.   
  24. function onSaveMapError(responseText)  
  25. {  
  26.     alert(responseText);  
  27. }  
// 保存当前地图
function saveMap()
{
    var param = new Object();
    param = MapControl1.GetMapParam();
    
    var pixelRect = MapControl1.GetSize();
    param.SetPixelRect(pixelRect);    

    MapControl1.GetMapImage(param, onSaveMapComplete, onSaveMapError);
}

function onSaveMapComplete(URL)
{
    if(URL != null)
    {
        if( URL.length > 0)
        {
            window.open(URL,'地图保存','menubar=yes,titlebar=yes,toolbar=no,scrollbars=no,location=no,status=no');
        }
    }
}

function onSaveMapError(responseText)
{
    alert(responseText);
}

 

补充下,如果保存的地图需要打印,可以采用GetMapImageByDpi方法,并设定合适的Dpi即可。不过AjaxScript的GetMapImageByDpi方法的输入参数有误,大家稍微注意下!

据说控件的问题在5.3.2版本得以解决,咱们一起试目以待吧:)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值