PieCharts.aspx.cs
上传用户:sex100000
上传日期:2013-11-09
资源大小:1377k
文件大小:4k
源码类别:

GIS编程

开发平台:

C#

  1. using System;
  2. using System.Data;
  3. using System.Drawing;
  4. using System.Configuration;
  5. using System.Collections;
  6. using System.Web;
  7. using System.Web.Security;
  8. using System.Web.UI;
  9. using System.Web.UI.WebControls;
  10. using System.Web.UI.WebControls.WebParts;
  11. using System.Web.UI.HtmlControls;
  12. using SharpMap.Rendering.Thematics;
  13. public partial class Bins : System.Web.UI.Page
  14. {
  15. private SharpMap.Map myMap;
  16. private static Random rand = new Random();
  17. protected void Page_Load(object sender, EventArgs e)
  18. {
  19. //Set up the map. We use the method in the App_Code folder for initializing the map and alter it afterwards
  20. myMap = MapHelper.InitializeMap(new System.Drawing.Size((int)imgMap.Width.Value,(int)imgMap.Height.Value));
  21. //Remove the river layer and label-layers
  22. myMap.Layers.RemoveAt(4);
  23. myMap.Layers.RemoveAt(3);
  24. myMap.Layers.RemoveAt(1);
  25. //Create Pie Layer
  26. SharpMap.Layers.VectorLayer pieLayer = new SharpMap.Layers.VectorLayer("Pie charts");
  27. pieLayer.DataSource = (myMap.Layers[0] as SharpMap.Layers.VectorLayer).DataSource;
  28. SharpMap.Rendering.Thematics.CustomTheme iTheme = new SharpMap.Rendering.Thematics.CustomTheme(GetCountryStyle);
  29. pieLayer.Theme = iTheme;
  30. myMap.Layers.Add(pieLayer);
  31. if (Page.IsPostBack) 
  32. {
  33. //Page is post back. Restore center and zoom-values from viewstate
  34. myMap.Center = (SharpMap.Geometries.Point)ViewState["mapCenter"];
  35. myMap.Zoom = (double)ViewState["mapZoom"];
  36. }
  37. else
  38. {
  39. //This is the initial view of the map. Zoom to the extents of the map:
  40. //myMap.ZoomToExtents();
  41. myMap.Center = new SharpMap.Geometries.Point(10,50);
  42. myMap.Zoom = 60;
  43. //Create the map
  44. GenerateMap();
  45. }
  46. }
  47. /// <summary>
  48. /// This method is used for determining the style
  49. /// It is used as a delegate for the CustomTheme class.
  50. /// </summary>
  51. /// <param name="row"></param>
  52. /// <returns></returns>
  53. private SharpMap.Styles.VectorStyle GetCountryStyle(SharpMap.Data.FeatureDataRow row)
  54. {
  55. SharpMap.Styles.VectorStyle s = new SharpMap.Styles.VectorStyle();
  56. s.Fill = new SolidBrush(Color.Green);
  57. s.Symbol = GetPieChart(row);
  58. return s;
  59. }
  60. /// <summary>
  61. /// Method for creating pie chart symbols
  62. /// </summary>
  63. /// <remarks>
  64. /// <para>In this example we just create some random pie charts, 
  65. /// but it probably should be based on attributes read from the row.</para>
  66. /// <para>Credits goes to gonzalo_ar for posting this in the forum</para></remarks>
  67. /// <param name="row"></param>
  68. /// <returns></returns>
  69. private static Bitmap GetPieChart(SharpMap.Data.FeatureDataRow row)
  70. {
  71. // Replace polygon with a center point (this is where we place the symbol
  72. row.Geometry = row.Geometry.GetBoundingBox().GetCentroid();
  73. // Just for the example I use random values 
  74. int size = rand.Next(20, 35);
  75. int angle1 = rand.Next(60, 180);
  76. int angle2 = rand.Next(angle1 + 60, 300);
  77. Rectangle rect = new Rectangle(0, 0, size, size);
  78. System.Drawing.Bitmap b = new Bitmap(size,size);
  79. Graphics g = Graphics.FromImage(b);
  80. // Draw Pie 
  81. g.FillPie(Brushes.LightGreen, rect, 0, angle1);
  82. g.FillPie(Brushes.Pink, rect, angle1, angle2 - angle1);
  83. g.FillPie(Brushes.PeachPuff, rect, angle2, 360 - angle2);
  84. // Draw Borders 
  85. g.DrawPie(Pens.Green, rect, 0, angle1);
  86. g.DrawPie(Pens.Red, rect, angle1, angle2 - angle1);
  87. g.DrawPie(Pens.Orange, rect, angle2, 360 - angle2);
  88. g.Dispose();
  89. return b;
  90. }
  91.   
  92. protected void imgMap_Click(object sender, ImageClickEventArgs e)
  93. {
  94. //Set center of the map to where the client clicked
  95. myMap.Center = myMap.ImageToWorld(new System.Drawing.Point(e.X, e.Y));
  96. //Set zoom value if any of the zoom tools were selected
  97. if (rblMapTools.SelectedValue == "0") //Zoom in
  98. myMap.Zoom = myMap.Zoom * 0.5;
  99. else if (rblMapTools.SelectedValue == "1") //Zoom out
  100. myMap.Zoom = myMap.Zoom * 2;
  101. //Create the map
  102. GenerateMap();
  103. }
  104.   
  105. /// <summary>
  106. /// Creates the map, inserts it into the cache and sets the ImageButton Url
  107. /// </summary>
  108. private void GenerateMap()
  109. {
  110. //Save the current mapcenter and zoom in the viewstate
  111. ViewState.Add("mapCenter", myMap.Center);
  112. ViewState.Add("mapZoom", myMap.Zoom);
  113. System.Drawing.Image img = myMap.GetMap();
  114. string imgID = SharpMap.Web.Caching.InsertIntoCache(1, img);
  115. imgMap.ImageUrl = "getmap.aspx?ID=" + HttpUtility.UrlEncode(imgID);
  116. }
  117. }