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

GIS编程

开发平台:

C#

  1. using System;
  2. using System.Data;
  3. using System.Configuration;
  4. using System.Web;
  5. using System.Web.Security;
  6. using System.Web.UI;
  7. using System.Web.UI.WebControls;
  8. using System.Web.UI.WebControls.WebParts;
  9. using System.Web.UI.HtmlControls;
  10. using System.Drawing;
  11. using System.Drawing.Drawing2D;
  12. /// <summary>
  13. /// Summary description for CreateMap
  14. /// </summary>
  15. public class MapHelper
  16. {
  17.     public static SharpMap.Map InitializeMap(System.Drawing.Size size)
  18.     {
  19. HttpContext.Current.Trace.Write("Initializing map...");
  20. //Initialize a new map of size 'imagesize'
  21. SharpMap.Map map = new SharpMap.Map(size);
  22. //Set up the countries layer
  23. SharpMap.Layers.VectorLayer layCountries = new SharpMap.Layers.VectorLayer("Countries");
  24. //Set the datasource to a shapefile in the App_data folder
  25. layCountries.DataSource = new SharpMap.Data.Providers.ShapeFile(HttpContext.Current.Server.MapPath(@"~App_datacountries.shp"), true);
  26. //Set fill-style to green
  27. layCountries.Style.Fill = new SolidBrush(Color.Green);
  28. //Set the polygons to have a black outline
  29. layCountries.Style.Outline = System.Drawing.Pens.Black;
  30. layCountries.Style.EnableOutline = true;
  31. layCountries.SRID = 4326;
  32. //Set up a river layer
  33. SharpMap.Layers.VectorLayer layRivers = new SharpMap.Layers.VectorLayer("Rivers");
  34. //Set the datasource to a shapefile in the App_data folder
  35. layRivers.DataSource = new SharpMap.Data.Providers.ShapeFile(HttpContext.Current.Server.MapPath(@"~App_datarivers.shp"), true);
  36. //Define a blue 1px wide pen
  37. layRivers.Style.Line = new Pen(Color.Blue,1);
  38. layRivers.SRID = 4326;
  39. //Set up a river layer
  40. SharpMap.Layers.VectorLayer layCities = new SharpMap.Layers.VectorLayer("Cities");
  41. //Set the datasource to a shapefile in the App_data folder
  42. layCities.DataSource = new SharpMap.Data.Providers.ShapeFile(HttpContext.Current.Server.MapPath(@"~App_datacities.shp"), true);
  43. //Define a blue 1px wide pen
  44. //layCities.Style.Symbol = new Bitmap(HttpContext.Current.Server.MapPath(@"~App_dataicon.png"));
  45. layCities.Style.SymbolScale = 0.8f;
  46. layCities.MaxVisible = 40;
  47. layCities.SRID = 4326;
  48. //Set up a country label layer
  49. SharpMap.Layers.LabelLayer layLabel = new SharpMap.Layers.LabelLayer("Country labels");
  50. layLabel.DataSource = layCountries.DataSource;
  51. layLabel.Enabled = true;
  52. layLabel.LabelColumn = "Name";
  53. layLabel.Style = new SharpMap.Styles.LabelStyle();
  54. layLabel.Style.ForeColor = Color.White;
  55. layLabel.Style.Font = new Font(FontFamily.GenericSerif, 12);
  56. layLabel.Style.BackColor = new System.Drawing.SolidBrush(Color.FromArgb(128,255,0,0));
  57. layLabel.MaxVisible = 90;
  58. layLabel.MinVisible = 30;
  59. layLabel.Style.HorizontalAlignment = SharpMap.Styles.LabelStyle.HorizontalAlignmentEnum.Center;
  60. layLabel.SRID = 4326;
  61. layLabel.MultipartGeometryBehaviour = SharpMap.Layers.LabelLayer.MultipartGeometryBehaviourEnum.Largest;
  62. //Set up a city label layer
  63. SharpMap.Layers.LabelLayer layCityLabel = new SharpMap.Layers.LabelLayer("City labels");
  64. layCityLabel.DataSource = layCities.DataSource;
  65. layCityLabel.Enabled = true;
  66. layCityLabel.LabelColumn = "Name";
  67. layCityLabel.Style = new SharpMap.Styles.LabelStyle();
  68. layCityLabel.Style.ForeColor = Color.Black;
  69. layCityLabel.Style.Font = new Font(FontFamily.GenericSerif, 11);
  70. layCityLabel.MaxVisible = layLabel.MinVisible;
  71. layCityLabel.Style.HorizontalAlignment = SharpMap.Styles.LabelStyle.HorizontalAlignmentEnum.Left;
  72. layCityLabel.Style.VerticalAlignment = SharpMap.Styles.LabelStyle.VerticalAlignmentEnum.Bottom;
  73. layCityLabel.Style.Offset = new PointF(3, 3);
  74. layCityLabel.Style.Halo = new Pen(Color.Yellow, 2);
  75. layCityLabel.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
  76. layCityLabel.SmoothingMode = SmoothingMode.AntiAlias;
  77. layCityLabel.SRID = 4326;
  78. layCityLabel.LabelFilter = SharpMap.Rendering.LabelCollisionDetection.ThoroughCollisionDetection;
  79. layCityLabel.Style.CollisionDetection = true;
  80. //Add the layers to the map object.
  81. //The order we add them in are the order they are drawn, so we add the rivers last to put them on top
  82. map.Layers.Add(layCountries);
  83. map.Layers.Add(layRivers);
  84. map.Layers.Add(layCities);
  85. map.Layers.Add(layLabel);
  86. map.Layers.Add(layCityLabel);
  87. //limit the zoom to 360 degrees width
  88. map.MaximumZoom = 360;
  89. map.BackColor = Color.LightBlue;
  90. map.Zoom = 360;
  91. map.Center = new SharpMap.Geometries.Point(0,0);
  92. HttpContext.Current.Trace.Write("Map initialized");
  93. return map;
  94.     }
  95. public static SharpMap.Map InitializeGradientMap(System.Drawing.Size size)
  96. {
  97. //Initialize a new map based on the simple map
  98. SharpMap.Map map = InitializeMap(size);
  99. //Set a gradient theme on the countries layer, based on Population density
  100. //First create two styles that specify min and max styles
  101. //In this case we will just use the default values and override the fill-colors
  102. //using a colorblender. If different line-widths, line- and fill-colors where used
  103. //in the min and max styles, these would automatically get linearly interpolated.
  104. SharpMap.Styles.VectorStyle min = new SharpMap.Styles.VectorStyle();
  105. SharpMap.Styles.VectorStyle max = new SharpMap.Styles.VectorStyle();
  106. //Create theme using a density from 0 (min) to 400 (max)
  107. SharpMap.Rendering.Thematics.GradientTheme popdens = new SharpMap.Rendering.Thematics.GradientTheme("PopDens", 0, 400, min, max);
  108. //We can make more advanced coloring using the ColorBlend'er.
  109. //Setting the FillColorBlend will override any fill-style in the min and max fills.
  110. //In this case we just use the predefined Rainbow colorscale
  111. popdens.FillColorBlend = SharpMap.Rendering.Thematics.ColorBlend.Rainbow5;
  112. (map.Layers[0] as SharpMap.Layers.VectorLayer).Theme = popdens;
  113. //Lets scale the labels so that big countries have larger texts as well
  114. SharpMap.Styles.LabelStyle lblMin = new SharpMap.Styles.LabelStyle();
  115. SharpMap.Styles.LabelStyle lblMax = new SharpMap.Styles.LabelStyle();
  116. lblMin.ForeColor = Color.Black;
  117. lblMin.Font = new Font(FontFamily.GenericSerif, 6);
  118. lblMax.ForeColor = Color.Blue;
  119. lblMax.BackColor = new SolidBrush(Color.FromArgb(128, 255, 255, 255));
  120. lblMin.BackColor = lblMax.BackColor;
  121. lblMax.Font = new Font(FontFamily.GenericSerif, 9);
  122. (map.Layers[3] as SharpMap.Layers.LabelLayer).Theme = new SharpMap.Rendering.Thematics.GradientTheme("PopDens", 0, 400, lblMin, lblMax);
  123. //Lets scale city icons based on city population
  124. //cities below 1.000.000 gets the smallest symbol, and cities with more than 5.000.000 the largest symbol
  125. SharpMap.Styles.VectorStyle citymin = new SharpMap.Styles.VectorStyle();
  126. SharpMap.Styles.VectorStyle citymax = new SharpMap.Styles.VectorStyle();
  127. citymin.Symbol = new Bitmap(HttpContext.Current.Server.MapPath(@"~App_dataicon.png"));
  128. citymin.SymbolScale = 0.5f;
  129. citymax.Symbol = new Bitmap(HttpContext.Current.Server.MapPath(@"~App_dataicon.png"));
  130. citymax.SymbolScale = 1f;
  131. (map.Layers[2] as SharpMap.Layers.VectorLayer).Theme = new SharpMap.Rendering.Thematics.GradientTheme("Population", 1000000, 5000000, citymin, citymax);
  132. //Turn off the river layer
  133. map.Layers[1].Enabled = false;
  134. return map;
  135. }
  136. public static SharpMap.Layers.WmsLayer GetWmsLayer()
  137. {
  138. string wmsUrl = "http://www2.demis.nl/mapserver/request.asp";
  139. SharpMap.Layers.WmsLayer layWms = new SharpMap.Layers.WmsLayer("Demis Map", wmsUrl);
  140. layWms.SpatialReferenceSystem = "EPSG:4326";
  141. layWms.AddLayer("Bathymetry");
  142. layWms.AddLayer("Ocean features");
  143. layWms.SetImageFormat(layWms.OutputFormats[0]);
  144. layWms.ContinueOnError = true; //Skip rendering the WMS Map if the server couldn't be requested (if set to false such an event would crash the app)
  145. layWms.TimeOut = 5000; //Set timeout to 5 seconds
  146. layWms.SRID = 4326;
  147. return layWms;
  148. }
  149. public static SharpMap.Map InitializeWmsMap(System.Drawing.Size size)
  150. {
  151. HttpContext.Current.Trace.Write("Initializing Wms map...");
  152. //Initialize a new map of size 'imagesize'
  153. SharpMap.Map map = new SharpMap.Map(size);
  154. SharpMap.Layers.WmsLayer layWms = GetWmsLayer();
  155. //Set up the countries layer
  156. SharpMap.Layers.VectorLayer layCountries = new SharpMap.Layers.VectorLayer("Countries");
  157. //Set the datasource to a shapefile in the App_data folder
  158. layCountries.DataSource = new SharpMap.Data.Providers.ShapeFile(HttpContext.Current.Server.MapPath(@"~App_datacountries.shp"), true);
  159. //Set fill-style to green
  160. layCountries.Style.Fill = new SolidBrush(Color.Green);
  161. //Set the polygons to have a black outline
  162. layCountries.Style.Outline = System.Drawing.Pens.Yellow;
  163. layCountries.Style.EnableOutline = true;
  164. layCountries.SRID = 4326;
  165. //Set up a country label layer
  166. SharpMap.Layers.LabelLayer layLabel = new SharpMap.Layers.LabelLayer("Country labels");
  167. layLabel.DataSource = layCountries.DataSource;
  168. layLabel.Enabled = true;
  169. layLabel.LabelColumn = "Name";
  170. layLabel.Style = new SharpMap.Styles.LabelStyle();
  171. layLabel.Style.ForeColor = Color.White;
  172. layLabel.Style.Font = new Font(FontFamily.GenericSerif, 8);
  173. layLabel.Style.BackColor = new System.Drawing.SolidBrush(Color.FromArgb(128,255,0,0));
  174. layLabel.MaxVisible = 90;
  175. layLabel.MinVisible = 30;
  176. layLabel.Style.HorizontalAlignment = SharpMap.Styles.LabelStyle.HorizontalAlignmentEnum.Center;
  177. layLabel.SRID = 4326;
  178. //Add the layers to the map object.
  179. //The order we add them in are the order they are drawn, so we add the rivers last to put them on top
  180. map.Layers.Add(layWms);
  181. map.Layers.Add(layCountries);
  182. map.Layers.Add(layLabel);
  183. //limit the zoom to 360 degrees width
  184. map.MaximumZoom = 360;
  185. map.BackColor = Color.LightBlue;
  186. map.Zoom = 360;
  187. map.Center = new SharpMap.Geometries.Point(0,0);
  188. HttpContext.Current.Trace.Write("Map initialized");
  189. return map;
  190. }
  191. }