Bins.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. /// <summary>
  17. /// This method is used for determining the color of country based on attributes.
  18. /// It is used as a delegate for the CustomTheme class.
  19. /// </summary>
  20. /// <param name="row"></param>
  21. /// <returns></returns>
  22. private SharpMap.Styles.VectorStyle GetCountryStyle(SharpMap.Data.FeatureDataRow row)
  23. {
  24. SharpMap.Styles.VectorStyle style = new SharpMap.Styles.VectorStyle();
  25. switch (row["NAME"].ToString().ToLower())
  26. {
  27. case "denmark": //If country name is Danmark, fill it with green
  28. style.Fill = Brushes.Green;
  29. return style;
  30. case "united states": //If country name is USA, fill it with Blue and add a red outline
  31. style.Fill = Brushes.Blue;
  32. style.Outline = Pens.Red;
  33. return style;
  34. case "china": //If country name is China, fill it with red
  35. style.Fill = Brushes.Red;
  36. return style;
  37. default:
  38. break;
  39. }
  40. //If country name starts with S make it yellow
  41. if (row["NAME"].ToString().StartsWith("S"))
  42. {
  43. style.Fill = Brushes.Yellow;
  44. return style;
  45. }
  46. // If geometry is a (multi)polygon and the area of the polygon is less than 30, make it cyan
  47. else if (row.Geometry.GetType() == typeof(SharpMap.Geometries.MultiPolygon) && (row.Geometry as SharpMap.Geometries.MultiPolygon).Area < 30 ||
  48. row.Geometry.GetType() == typeof(SharpMap.Geometries.Polygon) && (row.Geometry as SharpMap.Geometries.Polygon).Area < 30 )
  49. {
  50. style.Fill = Brushes.Cyan;
  51. return style;
  52. }
  53. else //None of the above -> Use the default style
  54. return null;
  55. }
  56. protected void Page_Load(object sender, EventArgs e)
  57. {
  58. //Set up the map. We use the method in the App_Code folder for initializing the map
  59. myMap = MapHelper.InitializeMap(new System.Drawing.Size((int)imgMap.Width.Value,(int)imgMap.Height.Value));
  60. //Set a gradient theme on the countries layer, based on Population density
  61. SharpMap.Rendering.Thematics.CustomTheme iTheme = new SharpMap.Rendering.Thematics.CustomTheme(GetCountryStyle);
  62. SharpMap.Styles.VectorStyle defaultstyle = new SharpMap.Styles.VectorStyle();
  63. defaultstyle.Fill = Brushes.Gray;
  64. iTheme.DefaultStyle = defaultstyle;
  65. (myMap.Layers[0] as SharpMap.Layers.VectorLayer).Theme = iTheme;
  66. //Turn off the river layer and label-layers
  67. myMap.Layers[1].Enabled = false;
  68. myMap.Layers[3].Enabled = false;
  69. myMap.Layers[4].Enabled = false;
  70. if (Page.IsPostBack) 
  71. {
  72. //Page is post back. Restore center and zoom-values from viewstate
  73. myMap.Center = (SharpMap.Geometries.Point)ViewState["mapCenter"];
  74. myMap.Zoom = (double)ViewState["mapZoom"];
  75. }
  76. else
  77. {
  78. //This is the initial view of the map. Zoom to the extents of the map:
  79. //myMap.ZoomToExtents();
  80. myMap.Center = new SharpMap.Geometries.Point(0,0);
  81. myMap.Zoom = 360;
  82. //Create the map
  83. GenerateMap();
  84. }
  85. }
  86.   
  87. protected void imgMap_Click(object sender, ImageClickEventArgs e)
  88. {
  89. //Set center of the map to where the client clicked
  90. myMap.Center = myMap.ImageToWorld(new System.Drawing.Point(e.X, e.Y));
  91. //Set zoom value if any of the zoom tools were selected
  92. if (rblMapTools.SelectedValue == "0") //Zoom in
  93. myMap.Zoom = myMap.Zoom * 0.5;
  94. else if (rblMapTools.SelectedValue == "1") //Zoom out
  95. myMap.Zoom = myMap.Zoom * 2;
  96. //Create the map
  97. GenerateMap();
  98. }
  99.   
  100. /// <summary>
  101. /// Creates the map, inserts it into the cache and sets the ImageButton Url
  102. /// </summary>
  103. private void GenerateMap()
  104. {
  105. //Save the current mapcenter and zoom in the viewstate
  106. ViewState.Add("mapCenter", myMap.Center);
  107. ViewState.Add("mapZoom", myMap.Zoom);
  108. System.Drawing.Image img = myMap.GetMap();
  109. string imgID = SharpMap.Web.Caching.InsertIntoCache(1, img);
  110. imgMap.ImageUrl = "getmap.aspx?ID=" + HttpUtility.UrlEncode(imgID);
  111. }
  112. }