软件版本: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来实现保存地图,代码如下:
- 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); //输出地图控件图片地址
- }
- }
- // 保存当前地图
- 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);
- }
// 保存当前地图 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版本得以解决,咱们一起试目以待吧:)