cGoogleMap.cs
上传用户:cpbs999
上传日期:2022-03-10
资源大小:1805k
文件大小:28k
源码类别:

MySQL数据库

开发平台:

Others

  1. //   Google Maps User Control for ASP.Net version 1.0:
  2. //   ========================
  3. //   Copyright (C) 2008  Shabdar Ghata 
  4. //   Email : ghata2002@gmail.com
  5. //   URL : http://www.shabdar.org
  6. //   This program is free software: you can redistribute it and/or modify
  7. //   it under the terms of the GNU General Public License as published by
  8. //   the Free Software Foundation, either version 3 of the License, or
  9. //   (at your option) any later version.
  10. //   This program is distributed in the hope that it will be useful,
  11. //   but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. //   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. //   GNU General Public License for more details.
  14. //   You should have received a copy of the GNU General Public License
  15. //   along with this program.  If not, see <http://www.gnu.org/licenses/>.
  16. //   This program comes with ABSOLUTELY NO WARRANTY.
  17. using System;
  18. using System.Data;
  19. using System.Configuration;
  20. using System.Web;
  21. using System.Web.Security;
  22. using System.Web.UI;
  23. using System.Web.UI.WebControls;
  24. using System.Web.UI.WebControls.WebParts;
  25. using System.Web.UI.HtmlControls;
  26. using System.Collections;
  27. using System.Drawing;
  28. using System.IO;
  29. using System.Net;
  30. using System.Text;
  31. /// <summary>
  32. /// Summary description for cGoogleMap
  33. /// </summary>
  34. /// 
  35. [Serializable] 
  36. public class GoogleObject
  37. {
  38.     public GoogleObject()
  39.     {
  40.     }
  41.     public GoogleObject(GoogleObject prev)
  42.     {
  43.         Directions = prev.Directions;
  44.         Points = GooglePoints.CloneMe(prev.Points);
  45.         Polylines = GooglePolylines.CloneMe(prev.Polylines);
  46.         Polygons = GooglePolygons.CloneMe(prev.Polygons);
  47.         ZoomLevel = prev.ZoomLevel;
  48.         ShowZoomControl = prev.ShowZoomControl;
  49.         ShowMapTypesControl = prev.ShowMapTypesControl;
  50.         Width = prev.Width;
  51.         Height = prev.Height;
  52.         MapType = prev.MapType;
  53.         APIKey = prev.APIKey;
  54.         ShowTraffic = prev.ShowTraffic;
  55.         RecenterMap = prev.RecenterMap;
  56.         AutomaticBoundaryAndZoom = prev.AutomaticBoundaryAndZoom;
  57.     }
  58.     private GoogleDirections _gdirections = new GoogleDirections();
  59.     public GoogleDirections Directions
  60.     {
  61.         get { return _gdirections; }
  62.         set { _gdirections = value; }
  63.     }
  64.     
  65.     GooglePoints _gpoints = new GooglePoints();
  66.     public GooglePoints Points
  67.     {
  68.         get { return _gpoints; }
  69.         set { _gpoints = value; }
  70.     }
  71.     GooglePolylines _gpolylines = new GooglePolylines();
  72.     public GooglePolylines Polylines
  73.     {
  74.         get { return _gpolylines; }
  75.         set { _gpolylines = value; }
  76.     }
  77.     GooglePolygons _gpolygons = new GooglePolygons();
  78.     public GooglePolygons Polygons
  79.     {
  80.         get { return _gpolygons; }
  81.         set { _gpolygons = value; }
  82.     }
  83.     GooglePoint _centerpoint = new GooglePoint();
  84.     public GooglePoint CenterPoint
  85.     {
  86.         get { return _centerpoint; }
  87.         set { _centerpoint = value; }
  88.     }
  89.     int _zoomlevel = 3;
  90.     public int ZoomLevel
  91.     {
  92.         get { return _zoomlevel; }
  93.         set { _zoomlevel = value; }
  94.     }
  95.     bool _showzoomcontrol = true;
  96.     public bool ShowZoomControl
  97.     {
  98.         get { return _showzoomcontrol; }
  99.         set { _showzoomcontrol = value; }
  100.     }
  101.     bool _recentermap = false;
  102.     public bool RecenterMap
  103.     {
  104.         get { return _recentermap; }
  105.         set { _recentermap = value; }
  106.     }
  107.     private bool _showdirections = false;
  108.     public bool ShowDirections
  109.     {
  110.         get { return _showdirections; }
  111.         set { _showdirections = value; }
  112.     }
  113.     bool _automaticboundaryandzoom = true;
  114.     public bool AutomaticBoundaryAndZoom
  115.     {
  116.         get { return _automaticboundaryandzoom; }
  117.         set { _automaticboundaryandzoom = value; }
  118.     }
  119.     bool _showtraffic = false;
  120.     public bool ShowTraffic
  121.     {
  122.         get { return _showtraffic; }
  123.         set { _showtraffic = value; }
  124.     }
  125.     bool _showmaptypescontrol = true;
  126.     public bool ShowMapTypesControl
  127.     {
  128.         get { return _showmaptypescontrol; }
  129.         set { _showmaptypescontrol = value; }
  130.     }
  131.     string _width = "500px";
  132.     public string Width
  133.     {
  134.         get
  135.         {
  136.             return _width;
  137.         }
  138.         set
  139.         {
  140.             _width = value;
  141.         }
  142.     }
  143.     string _height = "400px";
  144.     public string Height
  145.     {
  146.         get
  147.         {
  148.             return _height;
  149.         }
  150.         set
  151.         {
  152.             _height = value;
  153.         }
  154.     }
  155.     string _maptype = "";
  156.     public string MapType
  157.     {
  158.         get
  159.         {
  160.             return _maptype;
  161.         }
  162.         set
  163.         {
  164.             _maptype = value;
  165.         }
  166.     }
  167.     string _apikey = "";
  168.     public string APIKey
  169.     {
  170.         get
  171.         {
  172.             return _apikey;
  173.         }
  174.         set
  175.         {
  176.             _apikey = value;
  177.         }
  178.     }
  179.     string _apiversion = "2";
  180.     public string APIVersion
  181.     {
  182.         get
  183.         {
  184.             return _apiversion;
  185.         }
  186.         set
  187.         {
  188.             _apiversion = value;
  189.         }
  190.     }
  191. }
  192. [Serializable()]
  193. public class GoogleDirections
  194. {
  195.     public GoogleDirections()
  196.     {
  197.     }
  198.     private string _fromaddress = "";
  199.     public string FromAddress
  200.     {
  201.         get { return _fromaddress; }
  202.         set { _fromaddress = value; }
  203.     }
  204.     private string _toaddress = "";
  205.     public string ToAddress
  206.     {
  207.         get { return _toaddress; }
  208.         set { _toaddress = value; }
  209.     }
  210.     private string _locale = "en_US";
  211.     public string Locale
  212.     {
  213.         get { return _locale; }
  214.         set { _locale = value; }
  215.     }
  216.     public GoogleDirections(string pFromAddress, string pToAddress)
  217.     {
  218.         FromAddress = pFromAddress;
  219.         ToAddress = pToAddress;
  220.         Locale = "en_US";
  221.     }
  222.     public GoogleDirections(string pFromAddress, string pToAddress, string pLocale)
  223.     {
  224.         FromAddress = pFromAddress;
  225.         ToAddress = pToAddress;
  226.         Locale = pLocale;
  227.     }
  228. }
  229. public class GooglePoint
  230. {
  231.     public GooglePoint()
  232.     {
  233.     }
  234.     string _pointstatus = ""; //N-New, D-Deleted, C-Changed, ''-No Action
  235.     public string PointStatus
  236.     {
  237.         get { return _pointstatus; }
  238.         set { _pointstatus = value; }
  239.     }
  240.     string _address = "";
  241.     public string Address
  242.     {
  243.         get { return _address; }
  244.         set { _address = value; }
  245.     }
  246.     public GooglePoint(string pID,double plat, double plon, string picon, string pinfohtml)
  247.     {
  248.         ID = pID;
  249.         Latitude = plat;
  250.         Longitude = plon;
  251.         IconImage = picon;
  252.         InfoHTML = pinfohtml;
  253.     }
  254.     public GooglePoint(string pID, double plat, double plon, string picon, string pinfohtml,string pTooltipText,bool pDraggable)
  255.     {
  256.         ID = pID;
  257.         Latitude = plat;
  258.         Longitude = plon;
  259.         IconImage = picon;
  260.         InfoHTML = pinfohtml;
  261.         ToolTip = pTooltipText;
  262.         Draggable = pDraggable;
  263.     }
  264.     public GooglePoint(string pID, double plat, double plon, string picon)
  265.     {
  266.         ID = pID;
  267.         Latitude = plat;
  268.         Longitude = plon;
  269.         IconImage = picon;
  270.     }
  271.     public GooglePoint(string pID, double plat, double plon)
  272.     {
  273.         ID = pID;
  274.         Latitude = plat;
  275.         Longitude = plon;
  276.     }
  277.     string _id = "";
  278.     public string ID
  279.     {
  280.         get
  281.         {
  282.             return _id;
  283.         }
  284.         set
  285.         {
  286.             _id = value;
  287.         }
  288.     }
  289.     string _icon = "";
  290.     public string IconImage
  291.     {
  292.         get
  293.         {
  294.             return _icon;
  295.         }
  296.         set
  297.         {
  298.             
  299.             //Get physical path of icon image. Necessary for Bitmap object.
  300.             string sIconImage = value;
  301.             if (sIconImage == "")
  302.                 return;
  303.             string ImageIconPhysicalPath = cCommon.GetLocalPath() + sIconImage.Replace("/", "\");
  304.             //Find width and height of icon using Bitmap image.
  305.             using (System.Drawing.Image img = System.Drawing.Image.FromFile(ImageIconPhysicalPath))
  306.             {
  307.                 IconImageWidth = img.Width;
  308.                 IconImageHeight = img.Height;
  309.                 IconAnchor_posX = img.Width / 2;
  310.                 IconAnchor_posY = img.Height;
  311.                 InfoWindowAnchor_posX = img.Width / 2;
  312.                 InfoWindowAnchor_posY = img.Height / 3;
  313.             }
  314.             _icon = cCommon.GetHttpURL() + sIconImage;
  315.             _icon = value;
  316.         }
  317.     }
  318.     string _iconshadowimage = "";
  319.     public string IconShadowImage
  320.     {
  321.         get
  322.         {
  323.             return _iconshadowimage;
  324.         }
  325.         set
  326.         {
  327.             //Get physical path of icon image. Necessary for Bitmap object.
  328.             string sShadowImage = value;
  329.             if (sShadowImage == "")
  330.                 return;
  331.             string ShadowIconPhysicalPath = cCommon.GetLocalPath() + sShadowImage.Replace("/", "\");
  332.             //Find width and height of icon using Bitmap image.
  333.             using (System.Drawing.Image img = System.Drawing.Image.FromFile(ShadowIconPhysicalPath))
  334.             {
  335.                 IconShadowWidth = img.Width;
  336.                 IconShadowHeight = img.Height;
  337.             }
  338.             _iconshadowimage = cCommon.GetHttpURL() + sShadowImage;
  339.             _iconshadowimage = value;
  340.         }
  341.     }
  342.     int _iconimagewidth = 32;
  343.     public int IconImageWidth
  344.     {
  345.         get
  346.         {
  347.             return _iconimagewidth;
  348.         }
  349.         set
  350.         {
  351.             _iconimagewidth = value;
  352.         }
  353.     }
  354.     int _iconshadowwidth = 0;
  355.     public int IconShadowWidth
  356.     {
  357.         get
  358.         {
  359.             return _iconshadowwidth;
  360.         }
  361.         set
  362.         {
  363.             _iconshadowwidth = value;
  364.         }
  365.     }
  366.     int _iconshadowheight = 0;
  367.     public int IconShadowHeight
  368.     {
  369.         get
  370.         {
  371.             return _iconshadowheight;
  372.         }
  373.         set
  374.         {
  375.             _iconshadowheight = value;
  376.         }
  377.     }
  378.     int _iconanchor_posx = 16;
  379.     public int IconAnchor_posX
  380.     {
  381.         get
  382.         {
  383.             return _iconanchor_posx;
  384.         }
  385.         set
  386.         {
  387.             _iconanchor_posx = value;
  388.         }
  389.     }
  390.     int _iconanchor_posy = 32;
  391.     public int IconAnchor_posY
  392.     {
  393.         get
  394.         {
  395.             return _iconanchor_posy;
  396.         }
  397.         set
  398.         {
  399.             _iconanchor_posy = value;
  400.         }
  401.     }
  402.     int _infowindowanchor_posx = 16;
  403.     public int InfoWindowAnchor_posX
  404.     {
  405.         get
  406.         {
  407.             return _infowindowanchor_posx;
  408.         }
  409.         set
  410.         {
  411.             _infowindowanchor_posx = value;
  412.         }
  413.     }
  414.     int _infowindowanchor_posy = 5;
  415.     public int InfoWindowAnchor_posY
  416.     {
  417.         get
  418.         {
  419.             return _infowindowanchor_posy;
  420.         }
  421.         set
  422.         {
  423.             _infowindowanchor_posy = value;
  424.         }
  425.     }
  426.     bool _draggable = false;
  427.     public bool Draggable
  428.     {
  429.         get
  430.         {
  431.             return _draggable;
  432.         }
  433.         set
  434.         {
  435.             _draggable = value;
  436.         }
  437.     }
  438.     int _iconimageheight = 32;
  439.     public int IconImageHeight
  440.     {
  441.         get
  442.         {
  443.             return _iconimageheight;
  444.         }
  445.         set
  446.         {
  447.             _iconimageheight = value;
  448.         }
  449.     }
  450.     double _lat = 0.0;
  451.     public double Latitude
  452.     {
  453.         get
  454.         {
  455.             return _lat;
  456.         }
  457.         set
  458.         {
  459.             _lat = value;
  460.         }
  461.     }
  462.     double _lon = 0.0;
  463.     public double Longitude
  464.     {
  465.         get
  466.         {
  467.             return _lon;
  468.         }
  469.         set
  470.         {
  471.             _lon = value;
  472.         }
  473.     }
  474.     string _infohtml = "";
  475.     public string InfoHTML
  476.     {
  477.         get
  478.         {
  479.             return _infohtml;
  480.         }
  481.         set
  482.         {
  483.             _infohtml = value;
  484.         }
  485.     }
  486.     string _tooltip = "";
  487.     public string ToolTip
  488.     {
  489.         get
  490.         {
  491.             return _tooltip;
  492.         }
  493.         set
  494.         {
  495.             _tooltip = value;
  496.         }
  497.     }
  498.     public override bool Equals(System.Object obj)
  499.     {
  500.         // If parameter is null return false.
  501.         if (obj == null)
  502.         {
  503.             return false;
  504.         }
  505.         // If parameter cannot be cast to Point return false.
  506.         GooglePoint p = obj as GooglePoint;
  507.         if ((System.Object)p == null)
  508.         {
  509.             return false;
  510.         }
  511.         // Return true if the fields match:
  512.         return (InfoHTML == p.InfoHTML) && (IconImage == p.IconImage) && (p.ID==ID) && (p.Latitude==Latitude) && (p.Longitude==Longitude);
  513.     }
  514.     public bool GeocodeAddress(string sAPIKey)
  515.     {
  516.         return cCommon.GeocodeAddress(this, sAPIKey);
  517.     }
  518. }
  519. public class GooglePoints : CollectionBase
  520. {
  521.     public GooglePoints()
  522.     {
  523.     }
  524.     public static GooglePoints CloneMe(GooglePoints prev)
  525.     {
  526.         GooglePoints p = new GooglePoints();
  527.         for (int i = 0; i < prev.Count; i++)
  528.         {
  529.             p.Add(new GooglePoint(prev[i].ID, prev[i].Latitude, prev[i].Longitude, prev[i].IconImage, prev[i].InfoHTML,prev[i].ToolTip,prev[i].Draggable));
  530.         }
  531.         return p;
  532.     }
  533.  
  534.     public GooglePoint this[int pIndex]
  535.     {
  536.         get
  537.         {
  538.             return (GooglePoint)this.List[pIndex];
  539.         }
  540.         set
  541.         {
  542.             this.List[pIndex] = value;
  543.         }
  544.     }
  545.     public GooglePoint this[string pID]
  546.     {
  547.         get
  548.         {
  549.             for (int i = 0; i < Count; i++)
  550.             {
  551.                 if (this[i].ID == pID)
  552.                 {
  553.                     return (GooglePoint)this.List[i];
  554.                 }
  555.             }
  556.             return null;
  557.         }
  558.         set
  559.         {
  560.             for (int i = 0; i < Count; i++)
  561.             {
  562.                 if (this[i].ID == pID)
  563.                 {
  564.                     this.List[i] = value;
  565.                 }
  566.             }
  567.         }
  568.     }
  569.     public void Add(GooglePoint pPoint)
  570.     {
  571.         this.List.Add(pPoint);
  572.     }
  573.     public void Remove(int pIndex)
  574.     {
  575.         this.RemoveAt(pIndex);
  576.     }
  577.     public void Remove(string pID)
  578.     {
  579.         for (int i = 0; i < Count; i++)
  580.         {
  581.             if (this[i].ID == pID)
  582.             {
  583.                 this.List.RemoveAt(i);
  584.                 return;
  585.             }
  586.         }
  587.     }
  588.     public override bool Equals(System.Object obj)
  589.     {
  590.         // If parameter is null return false.
  591.         if (obj == null)
  592.         {
  593.             return false;
  594.         }
  595.         // If parameter cannot be cast to Point return false.
  596.         GooglePoints p = obj as GooglePoints;
  597.         if ((System.Object)p == null)
  598.         {
  599.             return false;
  600.         }
  601.         if(p.Count!=Count)
  602.             return false;
  603.         for(int i=0;i<p.Count;i++)
  604.         {
  605.             if(!this[i].Equals(p[i]))
  606.                 return false;
  607.         }
  608.         // Return true if the fields match:
  609.         return true;
  610.     }
  611. }
  612. public class GooglePolyline
  613. {
  614.     string _linestatus = ""; //N-New, D-Deleted, C-Changed, ''-No Action
  615.     public string LineStatus
  616.     {
  617.         get { return _linestatus; }
  618.         set { _linestatus = value; }
  619.     }
  620.     string _id = "";
  621.     public string ID
  622.     {
  623.         get { return _id; }
  624.         set { _id = value; } 
  625.     }
  626.     GooglePoints _gpoints=new GooglePoints();
  627.     public GooglePoints Points
  628.     {
  629.         get { return _gpoints; }
  630.         set { _gpoints = value; }
  631.     }
  632.     string _colorcode = "#66FF00";
  633.     public string ColorCode
  634.     {
  635.         get { return _colorcode; }
  636.         set { _colorcode = value; }
  637.     }
  638.     int _width = 10;
  639.     public int Width
  640.     {
  641.         get { return _width; }
  642.         set { _width = value; }
  643.     }
  644.     bool _geodesic = false;
  645.     public bool Geodesic
  646.     {
  647.         get { return _geodesic; }
  648.         set { _geodesic = value; }
  649.     }
  650.     public override bool Equals(System.Object obj)
  651.     {
  652.         // If parameter is null return false.
  653.         if (obj == null)
  654.         {
  655.             return false;
  656.         }
  657.         // If parameter cannot be cast to Point return false.
  658.         GooglePolyline p = obj as GooglePolyline;
  659.         if ((System.Object)p == null)
  660.         {
  661.             return false;
  662.         }
  663.         // Return true if the fields match:
  664.         return (Geodesic == p.Geodesic) && (Width == p.Width) && (p.ID == ID) && (p.ColorCode == ColorCode) && (p.Points.Equals(Points));
  665.     }
  666. }
  667. public class GooglePolylines : CollectionBase
  668. {
  669.     public GooglePolylines()
  670.     {
  671.     }
  672.     public static GooglePolylines CloneMe(GooglePolylines prev)
  673.     {
  674.         GooglePolylines p = new GooglePolylines();
  675.         for (int i = 0; i < prev.Count; i++)
  676.         {
  677.             GooglePolyline GPL = new GooglePolyline();
  678.             GPL.ColorCode = prev[i].ColorCode;
  679.             GPL.Geodesic = prev[i].Geodesic;
  680.             GPL.ID = prev[i].ID;
  681.             GPL.Points = GooglePoints.CloneMe(prev[i].Points);
  682.             GPL.Width = prev[i].Width;
  683.             p.Add(GPL);
  684.         }
  685.         return p;
  686.     }
  687.     public GooglePolyline this[int pIndex]
  688.     {
  689.         get
  690.         {
  691.             return (GooglePolyline)this.List[pIndex];
  692.         }
  693.         set
  694.         {
  695.             this.List[pIndex] = value;
  696.         }
  697.     }
  698.     public GooglePolyline this[string pID]
  699.     {
  700.         get
  701.         {
  702.             for (int i = 0; i < Count; i++)
  703.             {
  704.                 if (this[i].ID == pID)
  705.                 {
  706.                     return (GooglePolyline)this.List[i];
  707.                 }
  708.             }
  709.             return null;
  710.         }
  711.         set
  712.         {
  713.             for (int i = 0; i < Count; i++)
  714.             {
  715.                 if (this[i].ID == pID)
  716.                 {
  717.                     this.List[i] = value;
  718.                 }
  719.             }
  720.         }
  721.     }
  722.     public void Add(GooglePolyline pPolyline)
  723.     {
  724.         this.List.Add(pPolyline);
  725.     }
  726.     public void Remove(int pIndex)
  727.     {
  728.         this.RemoveAt(pIndex);
  729.     }
  730.     public void Remove(string pID)
  731.     {
  732.         for (int i = 0; i < Count; i++)
  733.         {
  734.             if (this[i].ID == pID)
  735.             {
  736.                 this.List.RemoveAt(i);
  737.                 return;
  738.             }
  739.         }
  740.     }
  741. }
  742. public sealed class GoogleMapType
  743. {
  744.     public const string NORMAL_MAP = "G_NORMAL_MAP";
  745.     public const string SATELLITE_MAP = "G_SATELLITE_MAP";
  746.     public const string HYBRID_MAP = "G_HYBRID_MAP";
  747. }
  748. public class cCommon
  749. {
  750.     public cCommon()
  751.     {
  752.         //
  753.         // TODO: Add constructor logic here
  754.         //
  755.     }
  756.     public static Random random = new Random();
  757.     public static bool IsNumeric(object s)
  758.     {
  759.         try
  760.         {
  761.             double.Parse(s.ToString());
  762.         }
  763.         catch
  764.         {
  765.             return false;
  766.         }
  767.         return true;
  768.     }
  769.     public static int GetIntegerValue(object pNumValue)
  770.     {
  771.         if ((pNumValue == null))
  772.         {
  773.             return 0;
  774.         }
  775.         if (IsNumeric(pNumValue))
  776.         {
  777.             return int.Parse((pNumValue.ToString()));
  778.         }
  779.         else
  780.         {
  781.             return 0;
  782.         }
  783.     }
  784.     
  785.     public static bool GeocodeAddress(GooglePoint GP,string GoogleAPIKey)
  786.     {
  787.         string sURL = "http://maps.google.com/maps/geo?q=" + GP.Address + "&output=xml&key=" + GoogleAPIKey;
  788.         WebRequest request = WebRequest.Create(sURL);
  789.         request.Timeout = 10000;
  790.         // Set the Method property of the request to POST.
  791.         request.Method = "POST";
  792.         // Create POST data and convert it to a byte array.
  793.         string postData = "This is a test that posts this string to a Web server.";
  794.         byte[] byteArray = Encoding.UTF8.GetBytes(postData);
  795.         // Set the ContentType property of the WebRequest.
  796.         request.ContentType = "application/x-www-form-urlencoded";
  797.         // Set the ContentLength property of the WebRequest.
  798.         request.ContentLength = byteArray.Length;
  799.         // Get the request stream.
  800.         Stream dataStream = request.GetRequestStream();
  801.         
  802.         // Write the data to the request stream.
  803.         dataStream.Write(byteArray, 0, byteArray.Length);
  804.         // Close the Stream object.
  805.         dataStream.Close();
  806.         // Get the response.
  807.         WebResponse response = request.GetResponse();
  808.         // Display the status.
  809.         //Console.WriteLine(((HttpWebResponse)response).StatusDescription);
  810.         // Get the stream containing content returned by the server.
  811.         dataStream = response.GetResponseStream();
  812.         // Open the stream using a StreamReader for easy access.
  813.         StreamReader reader = new StreamReader(dataStream);
  814.         // Read the content.
  815.         string responseFromServer = reader.ReadToEnd();
  816.         StringReader tx = new StringReader(responseFromServer) ;
  817.         
  818.         //return false;
  819.         //System.Xml.XmlReader xr = new System.Xml.XmlReader();
  820.         //return false;
  821.         
  822.         DataSet DS = new DataSet();
  823.         DS.ReadXml(tx);
  824.         //DS.ReadXml(dataStream);
  825.         //DS.ReadXml(tx);
  826.         
  827.         int StatusCode = cCommon.GetIntegerValue(DS.Tables["Status"].Rows[0]["code"]);
  828.         if (StatusCode == 200)
  829.         {
  830.             string sLatLon = cCommon.GetStringValue(DS.Tables["Point"].Rows[0]["coordinates"]);
  831.             string[] s = sLatLon.Split(',');
  832.             if (s.Length > 1)
  833.             {
  834.                 GP.Latitude = cCommon.GetNumericValue(s[1]);
  835.                 GP.Longitude = cCommon.GetNumericValue(s[0]);
  836.             }
  837.             if (DS.Tables["Placemark"] != null)
  838.             {
  839.                 GP.Address = cCommon.GetStringValue(DS.Tables["Placemark"].Rows[0]["address"]);
  840.             }
  841.             if (DS.Tables["PostalCode"] != null)
  842.             {
  843.                 GP.Address += " " + cCommon.GetStringValue(DS.Tables["PostalCode"].Rows[0]["PostalCodeNumber"]);
  844.             }
  845.             return true;
  846.         }
  847.         return false;
  848.     }
  849.     public static double GetNumericValue(object pNumValue)
  850.     {
  851.         if ((pNumValue == null))
  852.         {
  853.             return 0;
  854.         }
  855.         if (IsNumeric(pNumValue))
  856.         {
  857.             return double.Parse((pNumValue.ToString()));
  858.         }
  859.         else
  860.         {
  861.             return 0;
  862.         }
  863.     }
  864.     public static string GetStringValue(object obj)
  865.     {
  866.         if (obj == null)
  867.         {
  868.             return "";
  869.         }
  870.         if ((obj == null))
  871.         {
  872.             return "";
  873.         }
  874.         if (!(obj == null))
  875.         {
  876.             return obj.ToString();
  877.         }
  878.         else
  879.         {
  880.             return "";
  881.         }
  882.     }
  883.     public static string GetHttpURL()
  884.     {
  885.         string[] s = System.Web.HttpContext.Current.Request.Url.AbsoluteUri.Split(new char[] { '/' });
  886.         string path = s[0] + "/";
  887.         for (int i = 1; i < s.Length - 1; i++)
  888.         {
  889.             path = path + s[i] + "/";
  890.         }
  891.         return path;
  892.     }
  893.     public static string GetLocalPath()
  894.     {
  895.         string[] s = System.Web.HttpContext.Current.Request.Url.AbsoluteUri.Split(new char[] { '/' });
  896.         string PageName = s[s.Length - 1];
  897.         s = System.Web.HttpContext.Current.Request.MapPath(PageName).Split(new char[] { '\' });
  898.         string path = s[0] + "\";
  899.         for (int i = 1; i < s.Length - 1; i++)
  900.         {
  901.             path = path + s[i] + "\";
  902.         }
  903.         return path;
  904.     }
  905.     public static decimal RandomNumber(decimal min, decimal max)
  906.     {
  907.         decimal Fractions = 10000000;
  908.         int iMin = (int)GetIntegerPart(min * Fractions);
  909.         int iMax = (int)GetIntegerPart(max * Fractions);
  910.         int iRand = random.Next(iMin, iMax);
  911.         decimal dRand = (decimal)iRand;
  912.         dRand = dRand / Fractions;
  913.         return dRand;
  914.     }
  915.     public static decimal GetFractional(decimal source)
  916.     {
  917.         return source % 1.0m;
  918.     }
  919.     public static decimal GetIntegerPart(decimal source)
  920.     {
  921.         return decimal.Parse(source.ToString("#.00"));
  922.     }
  923. }
  924. public class GooglePolygon
  925. {
  926.     string _status = ""; //N-New, D-Deleted, C-Changed, ''-No Action
  927.     public string Status
  928.     {
  929.         get { return _status; }
  930.         set { _status = value; }
  931.     }
  932.     string _id = "";
  933.     public string ID
  934.     {
  935.         get { return _id; }
  936.         set { _id = value; }
  937.     }
  938.     GooglePoints _gpoints = new GooglePoints();
  939.     public GooglePoints Points
  940.     {
  941.         get { return _gpoints; }
  942.         set { _gpoints = value; }
  943.     }
  944.     string _strokecolor = "#0000FF";
  945.     public string StrokeColor
  946.     {
  947.         get { return _strokecolor; }
  948.         set { _strokecolor = value; }
  949.     }
  950.     string _fillcolor = "#66FF00";
  951.     public string FillColor
  952.     {
  953.         get { return _fillcolor; }
  954.         set { _fillcolor = value; }
  955.     }
  956.     int _strokeweight = 10;
  957.     public int StrokeWeight
  958.     {
  959.         get { return _strokeweight; }
  960.         set { _strokeweight = value; }
  961.     }
  962.     double _strokeopacity = 1;
  963.     public double StrokeOpacity
  964.     {
  965.         get { return _strokeopacity; }
  966.         set { _strokeopacity = value; }
  967.     }
  968.     double _fillopacity = 0.2;
  969.     public double FillOpacity
  970.     {
  971.         get { return _fillopacity; }
  972.         set { _fillopacity = value; }
  973.     }
  974.     public override bool Equals(System.Object obj)
  975.     {
  976.         // If parameter is null return false.
  977.         if (obj == null)
  978.         {
  979.             return false;
  980.         }
  981.         // If parameter cannot be cast to Point return false.
  982.         GooglePolygon p = obj as GooglePolygon;
  983.         if ((System.Object)p == null)
  984.         {
  985.             return false;
  986.         }
  987.         // Return true if the fields match:
  988.         return (FillColor == p.FillColor) && (FillOpacity == p.FillOpacity) && (p.ID == ID) && (p.Status == Status) && (p.StrokeColor == StrokeColor) && (p.StrokeOpacity == StrokeOpacity) && (p.StrokeWeight == StrokeWeight) && (p.Points.Equals(Points));
  989.     }
  990. }
  991. public class GooglePolygons : CollectionBase
  992. {
  993.     public GooglePolygons()
  994.     {
  995.     }
  996.     public static GooglePolygons CloneMe(GooglePolygons prev)
  997.     {
  998.         GooglePolygons p = new GooglePolygons();
  999.         for (int i = 0; i < prev.Count; i++)
  1000.         {
  1001.             GooglePolygon GPL = new GooglePolygon();
  1002.             GPL.FillColor = prev[i].FillColor;
  1003.             GPL.FillOpacity = prev[i].FillOpacity;
  1004.             GPL.ID = prev[i].ID;
  1005.             GPL.Status = prev[i].Status;
  1006.             GPL.StrokeColor = prev[i].StrokeColor;
  1007.             GPL.StrokeOpacity = prev[i].StrokeOpacity;
  1008.             GPL.StrokeWeight = prev[i].StrokeWeight;
  1009.             GPL.Points = GooglePoints.CloneMe(prev[i].Points);
  1010.             p.Add(GPL);
  1011.         }
  1012.         return p;
  1013.     }
  1014.     public GooglePolygon this[int pIndex]
  1015.     {
  1016.         get
  1017.         {
  1018.             return (GooglePolygon)this.List[pIndex];
  1019.         }
  1020.         set
  1021.         {
  1022.             this.List[pIndex] = value;
  1023.         }
  1024.     }
  1025.     public GooglePolygon this[string pID]
  1026.     {
  1027.         get
  1028.         {
  1029.             for (int i = 0; i < Count; i++)
  1030.             {
  1031.                 if (this[i].ID == pID)
  1032.                 {
  1033.                     return (GooglePolygon)this.List[i];
  1034.                 }
  1035.             }
  1036.             return null;
  1037.         }
  1038.         set
  1039.         {
  1040.             for (int i = 0; i < Count; i++)
  1041.             {
  1042.                 if (this[i].ID == pID)
  1043.                 {
  1044.                     this.List[i] = value;
  1045.                 }
  1046.             }
  1047.         }
  1048.     }
  1049.     public void Add(GooglePolygon pPolygon)
  1050.     {
  1051.         this.List.Add(pPolygon);
  1052.     }
  1053.     public void Remove(int pIndex)
  1054.     {
  1055.         this.RemoveAt(pIndex);
  1056.     }
  1057.     public void Remove(string pID)
  1058.     {
  1059.         for (int i = 0; i < Count; i++)
  1060.         {
  1061.             if (this[i].ID == pID)
  1062.             {
  1063.                 this.List.RemoveAt(i);
  1064.                 return;
  1065.             }
  1066.         }
  1067.     }
  1068. }