Click here to Skip to main content
15,895,557 members
Articles / Web Development / ASP.NET

Static Google Maps Web Control

Rate me:
Please Sign up or sign in to vote.
4.27/5 (6 votes)
1 May 2009CPOL2 min read 33.5K   485   35  
Static Google Maps web control without using a license key!!
using System.Drawing;
using System.Security.Permissions;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Reflection;
using System.Web;
using System.Web.UI;
using System.Collections.Specialized;
using System.Web.UI.WebControls;

namespace WCM.Core.Controls
{
    [ToolboxData("<{0}:GoogleMap runat=server></{0}:GoogleMap>")]
    public class GoogleMap : ControlBase, IPostBackEventHandler
    {

        public Unit Height
        {
            get
            {
                object value = ViewState["Height"];
                if (value == null) { return new Unit(400, UnitType.Pixel); }
                return (Unit)value;
            }
            set { ViewState["Height"] = value; }
        }

        public Unit Width
        {
            get
            {
                object value = ViewState["Width"];
                if (value == null) { return new Unit(600, UnitType.Pixel); }
                return (Unit)value;
            }
            set { ViewState["Width"] = value; }
        }

        public System.Int64 Latitude
        {
            get
            {
                object value = ViewState["Latitude"];
                if (value == null) { return 0; }
                return (System.Int64)value;
            }
            set { ViewState["Latitude"] = value; }
        }

        public bool ShowControlPanel
        {
            get
            {
                object value = ViewState["ShowControlPanel"];
                if (value == null) { return true; }
                return (bool)value;
            }
            set { ViewState["ShowControlPanel"] = value; }
        }

        public System.Int64 Longitude
        {
            get
            {
                object value = ViewState["Longitude"];
                if (value == null) { return 0; }
                return (System.Int64)value;
            }
            set { ViewState["Longitude"] = value; }
        }

        public int Zoom
        {
            get
            {
                object value = ViewState["Zoom"];
                if (value == null) { return 9600; }
                return (int)value;
            }
            set { ViewState["Zoom"] = value; }
        }

        public MapZoomLevel ZoomLevel
        {
            get
            {
                switch (this.Zoom)
                {
                    case 1200: return MapZoomLevel.Level0;
                    case 2400: return MapZoomLevel.Level1;
                    case 4800: return MapZoomLevel.Level2;
                    case 9600: return MapZoomLevel.Level3;
                    case 19200: return MapZoomLevel.Level4;
                    case 38400: return MapZoomLevel.Level5;
                    case 76800: return MapZoomLevel.Level6;
                    case 180000: return MapZoomLevel.Level7;
                    case 600000: return MapZoomLevel.Level8;
                    case 1800000: return MapZoomLevel.Level9;
                }
                return MapZoomLevel.Custom;
            }
            set
            {
                int zoom1 = GetZoomLevel(value);
                this.Zoom = zoom1;
            }
        }

        public string ToolTipText
        {
            get
            {
                object value = ViewState["ToolTipText"];
                if (value == null) { return ""; }
                return (string)value;
            }
            set
            {
                ViewState["ToolTipText"] = value;
            }
        }

        private const string mapurl = "http://maps.google.com/mapdata?latitude_e6={0}&longitude_e6={1}&zm={2}&w={3}&h={4}&cc=&min_priority=2";


        private int GetZoomLevel(MapZoomLevel value)
        {
            switch (value)
            {
                case MapZoomLevel.Level0: return 1200;
                case MapZoomLevel.Level1: return 2400;
                case MapZoomLevel.Level2: return 4800;
                case MapZoomLevel.Level3: return 9600;
                case MapZoomLevel.Level4: return 19200;
                case MapZoomLevel.Level5: return 38400;
                case MapZoomLevel.Level6: return 76800;
                case MapZoomLevel.Level7: return 180000;
                case MapZoomLevel.Level8: return 600000;
                case MapZoomLevel.Level9: return 1800000;
                case MapZoomLevel.Custom: return this.Zoom;
            }
            return this.Zoom;
        }

        protected override void Render(HtmlTextWriter writer)
        {
            writer.AddAttribute("border", "0");
            writer.AddAttribute("cellpadding", "0");
            writer.AddAttribute("cellspacing", "0");
            writer.RenderBeginTag("table");
            writer.RenderBeginTag("tr");
            writer.RenderBeginTag("td");
            writer.AddAttribute("id", this.ClientID);
            writer.AddAttribute("width", this.Width.ToString());
            writer.AddAttribute("height", this.Height.ToString());
            writer.AddAttribute("alt", this.ToolTipText);
            writer.AddAttribute("src", string.Format(mapurl, this.Latitude, this.Longitude, this.Zoom, this.Width.Value, this.Height.Value));
            writer.RenderBeginTag("img");
            writer.RenderEndTag();
            writer.RenderEndTag();
            writer.RenderEndTag();

            if (this.ShowControlPanel)
            {
                writer.AddStyleAttribute("background-color","#eeeeee");
                writer.RenderBeginTag("tr");
                writer.RenderBeginTag("td");
                writer.Write("Zoom:");
                for (var i = 0; i < 10; i++)
                {
                    if (i == (int)ZoomLevel) { writer.AddStyleAttribute("background-color", "#0A246A"); writer.AddStyleAttribute("color", "white"); } else { writer.AddStyleAttribute("color", "black"); }
                    writer.AddStyleAttribute("font-size", "14px");                    
                    writer.AddAttribute("href", Page.ClientScript.GetPostBackClientHyperlink(this, "Zoom$" + i.ToString()));
                    writer.AddAttribute ("title", GetZoomLevel((MapZoomLevel)i).ToString() + " Feet.");
                    writer.RenderBeginTag("a");
                    writer.Write(" " + i.ToString() + " ");
                    writer.RenderEndTag();
                    writer.Write("&nbsp;");
                }
                writer.RenderEndTag();
                writer.RenderEndTag();
            }

            writer.RenderEndTag();
        }

        void IPostBackEventHandler.RaisePostBackEvent(string eventArgument)
        {
            string[] parameters = eventArgument.Split(new string[] { "$" }, StringSplitOptions.None);
            switch (parameters[0].ToLower())
            {
                case "zoom":
                    this.ZoomLevel = (MapZoomLevel)Convert.ToInt32(parameters[1]);  break;
            }
        }
    }

    public enum MapZoomLevel
    {
        Level0, Level1, Level2, Level3, Level4, Level5, Level6, Level7, Level8, Level9, Custom
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
United Kingdom United Kingdom
Ive came to the conclusion recently Job Titles exist merely to massage the ego. Everybody in my workplace is a manager of something (sometimes they manage themselves solely) I Prefer to be judged not on my job title but my ability to do a good job of what I am supposed to do.

Comments and Discussions