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

GIS编程

开发平台:

C#

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using NUnit.Framework;
  5. using SharpMap.Converters.WellKnownText;
  6. using SharpMap.Geometries;
  7. namespace UnitTests.Converters.WKT
  8. {
  9. [TestFixture]
  10. public class WktGeometryTests
  11. {
  12. [Test]
  13. public void ParseGeometryCollection()
  14. {
  15. string geomCollection = "GEOMETRYCOLLECTION (POINT (10 10), POINT (30 30), LINESTRING (15 15, 20 20))";
  16. GeometryCollection geom = Geometry.GeomFromText(geomCollection) as GeometryCollection;
  17. Assert.IsNotNull(geom);
  18. Assert.AreEqual(3, geom.NumGeometries);
  19. Assert.IsTrue(geom[0] is Point);
  20. Assert.IsTrue(geom[1] is Point);
  21. Assert.IsTrue(geom[2] is LineString);
  22. Assert.AreEqual(geomCollection, geom.AsText());
  23. geom = Geometry.GeomFromText("GEOMETRYCOLLECTION EMPTY") as GeometryCollection;
  24. Assert.IsNotNull(geom);
  25. Assert.AreEqual(0, geom.NumGeometries);
  26. geomCollection = "GEOMETRYCOLLECTION (POINT (10 10), LINESTRING EMPTY, POINT (20 49))";
  27. geom = Geometry.GeomFromText(geomCollection) as GeometryCollection;
  28. Assert.IsNotNull(geom);
  29. Assert.IsTrue(geom[1].IsEmpty());
  30. Assert.AreEqual(3, geom.NumGeometries);
  31. Assert.AreEqual(geomCollection, geom.AsText());
  32. Assert.AreEqual("GEOMETRYCOLLECTION EMPTY", new GeometryCollection().AsText());
  33. }
  34. [Test]
  35. public void ParseMultipolygon()
  36. {
  37. string multipolygon = "MULTIPOLYGON (((0 0, 10 0, 10 10, 0 10, 0 0)), ((5 5, 7 5, 7 7, 5 7, 5 5)))";
  38. MultiPolygon geom = Geometry.GeomFromText(multipolygon) as MultiPolygon;
  39. Assert.IsNotNull(geom);
  40. Assert.AreEqual(2, geom.NumGeometries);
  41. Assert.AreEqual(new Point(5,5), geom[0].Centroid);
  42. Assert.AreEqual(multipolygon, geom.AsText());
  43. Assert.IsNotNull(Geometry.GeomFromText("MULTIPOLYGON EMPTY"));
  44. Assert.IsTrue(Geometry.GeomFromText("MULTIPOLYGON EMPTY").IsEmpty());
  45. geom = Geometry.GeomFromText("MULTIPOLYGON (((0 0, 10 0, 10 10, 0 10, 0 0)), EMPTY, ((5 5, 7 5, 7 7, 5 7, 5 5)))") as MultiPolygon;
  46. Assert.IsNotNull(geom);
  47. Assert.IsTrue(geom[1].IsEmpty());
  48. Assert.AreEqual(new Point(5, 5), geom[2].ExteriorRing.EndPoint);
  49. Assert.AreEqual(new Point(5, 5), geom[2].ExteriorRing.StartPoint);
  50. Assert.AreEqual(geom[2].ExteriorRing.StartPoint, geom[2].ExteriorRing.EndPoint);
  51. Assert.AreEqual(3, geom.NumGeometries);
  52. Assert.AreEqual("MULTIPOLYGON EMPTY", new MultiPolygon().AsText());
  53. }
  54. [Test]
  55. public void ParseLineString()
  56. {
  57. string linestring = "LINESTRING (20 20, 20 30, 30 30, 30 20, 40 20)";
  58. LineString geom = Geometry.GeomFromText(linestring) as LineString;
  59. Assert.IsNotNull(geom);
  60. Assert.AreEqual(40, geom.Length);
  61. Assert.IsFalse(geom.IsRing);
  62. Assert.AreEqual(linestring, geom.AsText());
  63. Assert.IsTrue((Geometry.GeomFromText("LINESTRING EMPTY") as LineString).IsEmpty());
  64. Assert.AreEqual("LINESTRING EMPTY", new LineString().AsText());
  65. }
  66. [Test]
  67. public void ParseMultiLineString()
  68. {
  69. string multiLinestring = "MULTILINESTRING ((10 10, 40 50), (20 20, 30 20), (20 20, 50 20, 50 60, 20 20))";
  70. MultiLineString geom = Geometry.GeomFromText(multiLinestring) as MultiLineString;
  71. Assert.IsNotNull(geom);
  72. Assert.AreEqual(3, geom.NumGeometries);
  73. Assert.AreEqual(180, geom.Length);
  74. Assert.AreEqual(120, geom[2].Length);
  75. Assert.IsFalse(geom[0].IsClosed, "[0].IsClosed");
  76. Assert.IsFalse(geom[1].IsClosed, "[1].IsClosed");
  77. Assert.IsTrue(geom[2].IsClosed, "[2].IsClosed");
  78. Assert.IsTrue(geom[0].IsSimple(), "[0].IsSimple");
  79. Assert.IsTrue(geom[1].IsSimple(), "[1].IsSimple");
  80. Assert.IsTrue(geom[2].IsSimple(), "[2].IsSimple");
  81. Assert.IsTrue(geom[2].IsRing, "Third line is a ring");
  82. Assert.AreEqual(multiLinestring, geom.AsText());
  83. Assert.IsTrue(Geometry.GeomFromText("MULTILINESTRING EMPTY").IsEmpty());
  84. geom = Geometry.GeomFromText("MULTILINESTRING ((10 10, 40 50), (20 20, 30 20), EMPTY, (20 20, 50 20, 50 60, 20 20))") as MultiLineString;
  85. Assert.IsNotNull(geom);
  86. Assert.IsTrue(geom[2].IsEmpty());
  87. Assert.AreEqual(4, geom.NumGeometries);
  88. Assert.AreEqual("MULTILINESTRING EMPTY", new MultiLineString().AsText());
  89. }
  90. [Test]
  91. public void ParsePolygon()
  92. {
  93. string polygon = "POLYGON ((20 20, 20 30, 30 30, 30 20, 20 20))"; 
  94. Polygon geom = Geometry.GeomFromText(polygon) as Polygon;
  95. Assert.IsNotNull(geom);
  96. Assert.AreEqual(40, geom.ExteriorRing.Length);
  97. Assert.AreEqual(100, geom.Area);
  98. Assert.AreEqual(polygon, geom.AsText());
  99. //Test interior rings
  100. polygon = "POLYGON ((20 20, 20 30, 30 30, 30 20, 20 20), (21 21, 29 21, 29 29, 21 29, 21 21), (23 23, 23 27, 27 27, 27 23, 23 23))";
  101. geom = Geometry.GeomFromText(polygon) as Polygon;
  102. Assert.IsNotNull(geom);
  103. Assert.AreEqual(40, geom.ExteriorRing.Length);
  104. Assert.AreEqual(2, geom.InteriorRings.Count);
  105. Assert.AreEqual(52, geom.Area);
  106. Assert.AreEqual(geom.ExteriorRing.Area - geom.InteriorRings[0].Area + geom.InteriorRings[1].Area, geom.Area);
  107. Assert.AreEqual(polygon, geom.AsText());
  108. //Test empty geometry WKT
  109. Assert.IsTrue(Geometry.GeomFromText("POLYGON EMPTY").IsEmpty());
  110. Assert.AreEqual("POLYGON EMPTY", new Polygon().AsText());
  111. }
  112. [Test]
  113. public void ParsePoint()
  114. {
  115. string point = "POINT (20.564 346.3493254)";
  116. Point geom = Geometry.GeomFromText(point) as Point;
  117. Assert.IsNotNull(geom);
  118. Assert.AreEqual(20.564, geom.X);
  119. Assert.AreEqual(346.3493254, geom.Y);
  120. Assert.AreEqual(point, geom.AsText());
  121. Assert.IsTrue(Geometry.GeomFromText("POINT EMPTY").IsEmpty());
  122. Assert.AreEqual("POINT EMPTY", new Point().AsText());
  123. }
  124. [Test]
  125. public void ParseMultiPoint()
  126. {
  127. string multipoint = "MULTIPOINT (20.564 346.3493254, 45 32, 23 54)";
  128. MultiPoint geom = Geometry.GeomFromText(multipoint) as MultiPoint;
  129. Assert.IsNotNull(geom);
  130. Assert.AreEqual(20.564, geom[0].X);
  131. Assert.AreEqual(54, geom[2].Y);
  132. Assert.AreEqual(multipoint, geom.AsText());
  133. Assert.IsTrue(Geometry.GeomFromText("MULTIPOINT EMPTY").IsEmpty());
  134. Assert.AreEqual("MULTIPOINT EMPTY", new MultiPoint().AsText());
  135. }
  136. }
  137. }