WmsClient.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. public partial class WmsClient : System.Web.UI.Page
  13. {
  14. private double Zoom;
  15. private SharpMap.Geometries.Point Center;
  16. protected void Page_Load(object sender, EventArgs e)
  17. {
  18. if (Page.IsPostBack) 
  19. {
  20. //Page is post back. Restore center and zoom-values from viewstate
  21. Center = (SharpMap.Geometries.Point)ViewState["mapCenter"];
  22. Zoom = (double)ViewState["mapZoom"];
  23. }
  24. else
  25. {
  26. Center = new SharpMap.Geometries.Point(0,0);
  27. Zoom = 360;
  28. //Create the map
  29. GenerateMap();
  30. }
  31. PrintWmsInfo();
  32. }
  33. private void PrintWmsInfo()
  34. {
  35. SharpMap.Layers.WmsLayer layWms = MapHelper.GetWmsLayer();
  36. //Get request url for WMS
  37. hlWmsImage.NavigateUrl = layWms.GetRequestUrl(
  38. new SharpMap.Geometries.BoundingBox(Center.X - Zoom * 0.5, Center.Y - Zoom * 0.25,
  39. Center.X + Zoom * 0.5, Center.Y + Zoom * 0.25), new Size((int)imgMap.Width.Value, (int)imgMap.Height.Value));
  40. litLayers.Text = "<p><b>WMS Title</b>: " + layWms.ServiceDescription.Title + "<br/>Abstract: <i>"+layWms.ServiceDescription.Abstract + "</i>";
  41. litLayers.Text += "<br/><b>WMS Layers:</b><br/>";
  42. foreach (SharpMap.Web.Wms.Client.WmsServerLayer layer in layWms.RootLayer.ChildLayers)
  43. PrintLayers(layer, layWms);
  44. litLayers.Text += "</ul></p>";
  45. }
  46. /// <summary>
  47. /// Recursive function for retriving layer names
  48. /// </summary>
  49. /// <param name="layer"></param>
  50. /// <param name="layWms"></param>
  51. private void PrintLayers(SharpMap.Web.Wms.Client.WmsServerLayer layer, SharpMap.Layers.WmsLayer layWms)
  52. {
  53. litLayers.Text += "<li>" + layer.Name;
  54. if (layWms.LayerList.Contains(layer.Name))
  55. litLayers.Text += " (Enabled)";
  56. litLayers.Text += "</li>";
  57. if (layer.ChildLayers != null && layer.ChildLayers.Length > 0)
  58. {
  59. litLayers.Text += "<ul>";
  60. foreach (SharpMap.Web.Wms.Client.WmsServerLayer childlayer in layer.ChildLayers)
  61. PrintLayers(childlayer,layWms);
  62. litLayers.Text += "</ul>";
  63. }
  64. }
  65. protected void imgMap_Click(object sender, ImageClickEventArgs e)
  66. {
  67. //Set center of the map to where the client clicked
  68. //We set up a simple empty map so we can use the ImageToWorld() method for easy conversion from Image to World coordinates
  69. SharpMap.Map myMap = new SharpMap.Map(new Size(Convert.ToInt32(imgMap.Width.Value), Convert.ToInt32(imgMap.Height.Value)));
  70. myMap.Center = Center; myMap.Zoom = Zoom;
  71. Center = myMap.ImageToWorld(new System.Drawing.Point(e.X, e.Y));
  72. //Set zoom value if any of the zoom tools were selected
  73. if (rblMapTools.SelectedValue == "0") //Zoom in
  74. Zoom = Zoom * 0.5;
  75. else if (rblMapTools.SelectedValue == "1") //Zoom out
  76. Zoom = Zoom * 2;
  77. //Create the map
  78. GenerateMap();
  79. }
  80.   
  81. /// <summary>
  82. /// Creates the map, inserts it into the cache and sets the ImageButton Url
  83. /// </summary>
  84. private void GenerateMap()
  85. {
  86. //Save the current mapcenter and zoom in the viewstate
  87. ViewState.Add("mapCenter", Center);
  88. ViewState.Add("mapZoom", Zoom);
  89. string ResponseFormat = "maphandler.ashx?MAP=WmsClient&Width=[WIDTH]&Height=[HEIGHT]&Zoom=[ZOOM]&X=[X]&Y=[Y]";
  90. System.Globalization.NumberFormatInfo numberFormat_EnUS = new System.Globalization.CultureInfo("en-US", false).NumberFormat;
  91. imgMap.ImageUrl = ResponseFormat.Replace("[WIDTH]", imgMap.Width.Value.ToString()).
  92.   Replace("[HEIGHT]", imgMap.Height.Value.ToString()).
  93.   Replace("[ZOOM]", Zoom.ToString(numberFormat_EnUS)).
  94.   Replace("[X]", Center.X.ToString(numberFormat_EnUS)).
  95.   Replace("[Y]", Center.Y.ToString(numberFormat_EnUS));
  96. hlCurrentImage.NavigateUrl = imgMap.ImageUrl;
  97. }
  98. }