阅读:1342回复:0
MapXtreme 2005学习(7):Web页面中实现鼠标中键缩放
在MapXtreme 2005中,在Windows应用程序中自带鼠标中键缩放的功能,而有Web应用程序中却没有,如果能够实现会显得更加人性化。在百度里面一搜,还真有位高人实现了,于是借鉴了一下,作了一些修改,在这里和大家共享一下,你可能通过修改程序代码,控制每次缩放的比例,也可以选择等差或等比的方式进行缩放,代码比较简单,只要稍作修改就可以实现。<br><br> <br><br>(1)在页面的</form>之前添加如下JavaScript代码:<br><br> <br><script type="text/javascript"> <br>var Img = document.getElementById("MapControl1_Image");<br>if(Img != null)<br>{<br> Img.attachEvent('onmousewheel', GetMouseWheelEvent);<br>}<br>function GetMouseWheelEvent()<br>{<br> var mapImage = document.getElementById("MapControl1_Image");<br> var url = "MapController.ashx?Command=WheelZoom;Width=" + mapImage.width +";Height=" + mapImage.height<br> + ";ExportFormat=" + mapImage.exportFormat + ";Ran=" + Math.random() + ";wheelvalue=" + event.wheelDelta;<br> if (mapImage.mapAlias) <br> url += ";MapAlias=" + mapImage.mapAlias; <br> try <br> {<br> mapImage.src = url;<br> }<br> catch(e)<br> { <br> alert("Error!");<br> }<br>}<br></script><br><br> <br><br>(2)在后台代码中,如自定义命令的文件CustomerCommands.cs中的添加如下类:<br><br> <br> [Serializable]<br> public class WheelZoom : MapBaseCommand<br> {<br> public WheelZoom()<br> {<br> Name = "WheelZoom";<br> }<br><br> public override void Process()<br> {<br> int wheelvalue = int.Parse(System.Convert.ToString(HttpContext.Current.Request["wheelvalue"]));<br> <br> MapControlModel model = MapControlModel.GetModelFromSession();<br> model.SetMapSize(MapAlias, MapWidth, MapHeight);<br> try<br> {<br> MapInfo.Mapping.Map map = model.GetMapObj(MapAlias);<br><br> MapInfo.Geometry.Distance d;<br> if (wheelvalue > 0)<br> {<br> d = new MapInfo.Geometry.Distance(map.Zoom.Value * 0.5, map.Zoom.Unit);<br> }<br> else<br> {<br> d = new MapInfo.Geometry.Distance(map.Zoom.Value * 2, map.Zoom.Unit);<br> }<br> map.Zoom = d;<br> }<br> finally<br> {<br> System.IO.MemoryStream ms = model.GetMap(MapAlias, MapWidth, MapHeight, ExportFormat);<br> StreamImageToClient(ms);<br> }<br> }<br> }<br><br> <br><br>(3)在页面加载处注册Command:<br><br> <br>if(Session.IsNewSession)<br>{<br> MapControlModel model = MapControlModel.SetDefaultModelInSession();<br> model.Commands.Add(new WheelZoom());<br>}<br><br> <br><br>完毕,运行在页面地图上滚动鼠标中间键即可看到效果。
|
|
|