www.pudn.com > GIS.rar > MapHandler.ashx, change:2006-11-14,size:3041b


<%@ 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; 
        } 
    } 
 
}