MapHandler.ashx
上传用户:sex100000
上传日期:2013-11-09
资源大小:1377k
文件大小:3k
源码类别:

GIS编程

开发平台:

C#

  1. <%@ WebHandler Language="C#" Class="MapHandler" %>
  2. using System;
  3. using System.Web;
  4. /// <summary>
  5. /// The maphandler class takes a set of GET or POST parameters and returns a map as PNG (this reminds in many ways of the way a WMS server work).
  6. /// Required parameters are: WIDTH, HEIGHT, ZOOM, X, Y, MAP
  7. /// </summary>
  8. public class MapHandler : IHttpHandler
  9. {
  10. internal static System.Globalization.NumberFormatInfo numberFormat_EnUS = new System.Globalization.CultureInfo("en-US", false).NumberFormat;
  11.     public void ProcessRequest (HttpContext context) {
  12. int Width = 0;
  13. int Height = 0;
  14. double centerX = 0;
  15. double centerY = 0;
  16. double Zoom = 0;
  17. //Parse request parameters
  18. if (!int.TryParse(context.Request.Params["WIDTH"], out Width))
  19. throw (new ArgumentException("Invalid parameter"));
  20. if (!int.TryParse(context.Request.Params["HEIGHT"], out Height))
  21. throw (new ArgumentException("Invalid parameter"));
  22. if (!double.TryParse(context.Request.Params["ZOOM"], System.Globalization.NumberStyles.Float, numberFormat_EnUS, out Zoom))
  23. throw (new ArgumentException("Invalid parameter"));
  24. if (!double.TryParse(context.Request.Params["X"], System.Globalization.NumberStyles.Float, numberFormat_EnUS, out centerX))
  25. throw (new ArgumentException("Invalid parameter"));
  26. if (!double.TryParse(context.Request.Params["Y"], System.Globalization.NumberStyles.Float, numberFormat_EnUS, out centerY))
  27. throw (new ArgumentException("Invalid parameter"));
  28. if (context.Request.Params["MAP"] == null)
  29. throw (new ArgumentException("Invalid parameter"));
  30. //Params OK
  31. SharpMap.Map map = InitializeMap(context.Request.Params["MAP"], new System.Drawing.Size(Width, Height));
  32. if (map == null)
  33. throw (new ArgumentException("Invalid map"));
  34. //Set visible map extents
  35. map.Center = new SharpMap.Geometries.Point(centerX, centerY);
  36. map.Zoom = Zoom;
  37. //Generate map
  38. System.Drawing.Bitmap img = (System.Drawing.Bitmap)map.GetMap();
  39. //Stream the image to the client
  40. context.Response.ContentType = "image/png";
  41. System.IO.MemoryStream MS = new System.IO.MemoryStream();
  42. img.Save(MS, System.Drawing.Imaging.ImageFormat.Png);
  43. // tidy up  
  44. img.Dispose();
  45. byte[] buffer = MS.ToArray();
  46. context.Response.OutputStream.Write(buffer, 0, buffer.Length);
  47.     }
  48. private SharpMap.Map InitializeMap(string MapID, System.Drawing.Size size)
  49. {
  50. //Set up the map. We use the method in the App_Code folder for initializing the map
  51. switch (MapID)
  52. {
  53. //Our simple world map was requested 
  54. case "SimpleWorld":
  55. return MapHelper.InitializeMap(size);
  56. //Gradient theme layer requested. Based on simplemap
  57. case "Gradient":
  58. return MapHelper.InitializeGradientMap(size);
  59. case "WmsClient":
  60. return MapHelper.InitializeWmsMap(size);
  61. default:
  62. throw new ArgumentException("Invalid map '" + MapID + "' requested"); ;
  63. }
  64. }
  65.     public bool IsReusable {
  66.         get {
  67.             return false;
  68.         }
  69.     }
  70. }