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

GIS编程

开发平台:

C#

  1. // Copyright 2005, 2006 - Morten Nielsen (www.iter.dk)
  2. //
  3. // This file is part of SharpMap.
  4. // SharpMap is free software; you can redistribute it and/or modify
  5. // it under the terms of the GNU Lesser General Public License as published by
  6. // the Free Software Foundation; either version 2 of the License, or
  7. // (at your option) any later version.
  8. // 
  9. // SharpMap is distributed in the hope that it will be useful,
  10. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. // GNU Lesser General Public License for more details.
  13. // You should have received a copy of the GNU Lesser General Public License
  14. // along with SharpMap; if not, write to the Free Software
  15. // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  16. using System;
  17. using System.Collections.Generic;
  18. using System.Collections.ObjectModel;
  19. using System.Text;
  20. namespace SharpMap.Layers
  21. {
  22. /// <summary>
  23. /// Class for holding a group of layers.
  24. /// </summary>
  25. /// <remarks>
  26. /// The Group layer is useful for grouping a set of layers,
  27. /// for instance a set of image tiles, and expose them as a single layer
  28. /// </remarks>
  29. public class LayerGroup : Layer, IDisposable
  30. {
  31. /// <summary>
  32. /// Initializes a new group layer
  33. /// </summary>
  34. /// <param name="layername">Name of layer</param>
  35. public LayerGroup(string layername)
  36. {
  37. this.LayerName = layername;
  38. _Layers = new Collection<Layer>();
  39. }
  40. private Collection<Layer> _Layers;
  41. /// <summary>
  42. /// Sublayers in the group
  43. /// </summary>
  44. public Collection<Layer> Layers
  45. {
  46. get { return _Layers; }
  47. set { _Layers = value; }
  48. }
  49. /// <summary>
  50. /// Returns a layer by its name
  51. /// </summary>
  52. /// <param name="name">Name of layer</param>
  53. /// <returns>Layer</returns>
  54. public SharpMap.Layers.Layer GetLayerByName(string name)
  55. {
  56.             //return _Layers.Find( delegate(SharpMap.Layers.Layer layer) { return layer.LayerName.Equals(name); });
  57.             for (int i = 0; i < _Layers.Count; i++)
  58.                 if (String.Equals(_Layers[i].LayerName, name, StringComparison.InvariantCultureIgnoreCase))
  59.                     return _Layers[i];
  60.             
  61.             return null;
  62. }
  63. /// <summary>
  64. /// Renders the layer
  65. /// </summary>
  66. /// <param name="g">Graphics object reference</param>
  67. /// <param name="map">Map which is rendered</param>
  68. public override void Render(System.Drawing.Graphics g, Map map)
  69. {
  70. for (int i = 0; i < _Layers.Count;i++ )
  71. if (_Layers[i].Enabled && _Layers[i].MaxVisible >= map.Zoom && _Layers[i].MinVisible < map.Zoom)
  72. _Layers[i].Render(g, map);
  73. }
  74. /// <summary>
  75. /// Returns the extent of the layer
  76. /// </summary>
  77. /// <returns>Bounding box corresponding to the extent of the features in the layer</returns>
  78. public override SharpMap.Geometries.BoundingBox Envelope
  79. {
  80. get
  81. {
  82. if (this.Layers.Count == 0)
  83. return null;
  84. SharpMap.Geometries.BoundingBox bbox = this.Layers[0].Envelope;
  85. for (int i = 1; i < this.Layers.Count; i++)
  86. bbox = bbox.Join(this.Layers[i].Envelope);
  87. return bbox;
  88. }
  89. }
  90. #region ICloneable Members
  91. /// <summary>
  92. /// Clones the layer
  93. /// </summary>
  94. /// <returns>cloned object</returns>
  95. public override object Clone()
  96. {
  97. throw new NotImplementedException();
  98. }
  99. #endregion
  100. #region IDisposable Members
  101. /// <summary>
  102. /// Disposes the object
  103. /// </summary>
  104. public void Dispose()
  105. {
  106. foreach (SharpMap.Layers.Layer layer in this.Layers)
  107. if (layer is IDisposable)
  108. ((IDisposable)layer).Dispose();
  109. this.Layers.Clear();
  110. }
  111. #endregion
  112. }
  113. }