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

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.Text;
  19. namespace SharpMap.Geometries
  20. {
  21. /// <summary>
  22. /// Class defining a set of named spatial relationship operators for geometric shape objects.
  23. /// </summary>
  24. public class SpatialRelations
  25. {
  26. /// <summary>
  27. /// Returns true if otherGeometry is wholly contained within the source geometry. This is the same as
  28. /// reversing the primary and comparison shapes of the Within operation.
  29. /// </summary>
  30. /// <param name="sourceGeometry"></param>
  31. /// <param name="otherGeometry"></param>
  32. /// <returns>True if otherGeometry is wholly contained within the source geometry.</returns>
  33. public static bool Contains(Geometry sourceGeometry, Geometry otherGeometry)
  34. {
  35. return (otherGeometry.Within(sourceGeometry));
  36. }
  37. /// <summary>
  38. /// Returns true if the intersection of the two geometries results in a geometry whose dimension is less than
  39. /// the maximum dimension of the two geometries and the intersection geometry is not equal to either.
  40. /// geometry.
  41. /// </summary>
  42. /// <param name="g1"></param>
  43. /// <param name="g2"></param>
  44. /// <returns></returns>
  45. public static bool Crosses(Geometry g1, Geometry g2)
  46. {
  47. Geometry g = g2.Intersection(g1);
  48. return (g.Intersection(g1).Dimension < Math.Max(g1.Dimension, g2.Dimension) && !g.Equals(g1) && !g.Equals(g2));
  49. }
  50. /// <summary>
  51. /// Returns true if otherGeometry is disjoint from the source geometry.
  52. /// </summary>
  53. /// <param name="g1"></param>
  54. /// <param name="g2"></param>
  55. /// <returns></returns>
  56. public static bool Disjoint(Geometry g1, Geometry g2)
  57. {
  58. return !g2.Intersects(g1);
  59. }
  60. /// <summary>
  61. /// Returns true if otherGeometry is of the same type and defines the same point set as the source geometry.
  62. /// </summary>
  63. /// <param name="g1">source geometry</param>
  64. /// <param name="g2">other Geometry</param>
  65. /// <returns></returns>
  66. public static bool Equals(Geometry g1, Geometry g2)
  67. {
  68. if (g1 == null && g2 == null)
  69. return true;
  70. if (g1 == null || g2 == null)
  71. return false;
  72. if (g1.GetType() != g2.GetType())
  73. return false;
  74. if (g1 is SharpMap.Geometries.Point)
  75. return (g1 as Point).Equals(g2 as Point);
  76. else if (g1 is SharpMap.Geometries.LineString)
  77. return (g1 as LineString).Equals(g2 as LineString);
  78. else if (g1 is SharpMap.Geometries.Polygon)
  79. return (g1 as Polygon).Equals(g2 as Polygon);
  80. else if (g1 is SharpMap.Geometries.MultiPoint)
  81. return (g1 as MultiPoint).Equals(g2 as MultiPoint);
  82. else if (g1 is SharpMap.Geometries.MultiLineString)
  83. return (g1 as MultiLineString).Equals(g2 as MultiLineString);
  84. else if (g1 is SharpMap.Geometries.MultiPolygon)
  85. return (g1 as MultiPolygon).Equals(g2 as MultiPolygon);
  86. else
  87. throw new ArgumentException("The method or operation is not implemented on this geometry type.");
  88. }
  89. /// <summary>
  90. /// Returns true if there is any intersection between the two geometries.
  91. /// </summary>
  92. /// <param name="g1"></param>
  93. /// <param name="g2"></param>
  94. /// <returns></returns>
  95. public static bool Intersects(Geometry g1, Geometry g2)
  96. {
  97. throw new NotImplementedException();
  98. }
  99. /// <summary>
  100. /// Returns true if the intersection of the two geometries results in an object of the same dimension as the
  101. /// input geometries and the intersection geometry is not equal to either geometry.
  102. /// </summary>
  103. /// <param name="g1"></param>
  104. /// <param name="g2"></param>
  105. /// <returns></returns>
  106. public static bool Overlaps(Geometry g1, Geometry g2)
  107. {
  108. throw new NotImplementedException();
  109. }
  110. /// <summary>
  111. /// Returns true if the only points in common between the two geometries lie in the union of their boundaries.
  112. /// </summary>
  113. /// <param name="g1"></param>
  114. /// <param name="g2"></param>
  115. /// <returns></returns>
  116. public static bool Touches(Geometry g1, Geometry g2)
  117. {
  118. throw new NotImplementedException();
  119. }
  120. /// <summary>
  121. /// Returns true if the primary geometry is wholly contained within the comparison geometry.
  122. /// </summary>
  123. /// <param name="g1"></param>
  124. /// <param name="g2"></param>
  125. /// <returns></returns>
  126. public static bool Within(Geometry g1, Geometry g2)
  127. {
  128. return g1.Contains(g2);
  129. }
  130. }
  131. }