MapHandler.ashx
上传用户:sex100000
上传日期:2013-11-09
资源大小:1377k
文件大小:3k
- <%@ WebHandler Language="C#" Class="MapHandler" %>
- using System;
- using System.Web;
- /// <summary>
- /// 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).
- /// Required parameters are: WIDTH, HEIGHT, ZOOM, X, Y, MAP
- /// </summary>
- public class MapHandler : IHttpHandler
- {
- internal static System.Globalization.NumberFormatInfo numberFormat_EnUS = new System.Globalization.CultureInfo("en-US", false).NumberFormat;
- public void ProcessRequest (HttpContext context) {
- int Width = 0;
- int Height = 0;
- double centerX = 0;
- double centerY = 0;
- double Zoom = 0;
- //Parse request parameters
- if (!int.TryParse(context.Request.Params["WIDTH"], out Width))
- throw (new ArgumentException("Invalid parameter"));
- if (!int.TryParse(context.Request.Params["HEIGHT"], out Height))
- throw (new ArgumentException("Invalid parameter"));
- if (!double.TryParse(context.Request.Params["ZOOM"], System.Globalization.NumberStyles.Float, numberFormat_EnUS, out Zoom))
- throw (new ArgumentException("Invalid parameter"));
- if (!double.TryParse(context.Request.Params["X"], System.Globalization.NumberStyles.Float, numberFormat_EnUS, out centerX))
- throw (new ArgumentException("Invalid parameter"));
- if (!double.TryParse(context.Request.Params["Y"], System.Globalization.NumberStyles.Float, numberFormat_EnUS, out centerY))
- throw (new ArgumentException("Invalid parameter"));
- if (context.Request.Params["MAP"] == null)
- throw (new ArgumentException("Invalid parameter"));
- //Params OK
- SharpMap.Map map = InitializeMap(context.Request.Params["MAP"], new System.Drawing.Size(Width, Height));
- if (map == null)
- throw (new ArgumentException("Invalid map"));
- //Set visible map extents
- map.Center = new SharpMap.Geometries.Point(centerX, centerY);
- map.Zoom = Zoom;
- //Generate map
- System.Drawing.Bitmap img = (System.Drawing.Bitmap)map.GetMap();
- //Stream the image to the client
- context.Response.ContentType = "image/png";
- System.IO.MemoryStream MS = new System.IO.MemoryStream();
- img.Save(MS, System.Drawing.Imaging.ImageFormat.Png);
- // tidy up
- img.Dispose();
- byte[] buffer = MS.ToArray();
- context.Response.OutputStream.Write(buffer, 0, buffer.Length);
- }
- private SharpMap.Map InitializeMap(string MapID, System.Drawing.Size size)
- {
- //Set up the map. We use the method in the App_Code folder for initializing the map
- switch (MapID)
- {
- //Our simple world map was requested
- case "SimpleWorld":
- return MapHelper.InitializeMap(size);
- //Gradient theme layer requested. Based on simplemap
- case "Gradient":
- return MapHelper.InitializeGradientMap(size);
- case "WmsClient":
- return MapHelper.InitializeWmsMap(size);
- default:
- throw new ArgumentException("Invalid map '" + MapID + "' requested"); ;
- }
- }
-
- public bool IsReusable {
- get {
- return false;
- }
- }
- }