using System; using System.Collections.Generic; using System.Text; using MbUnit.Framework; using System.IO; using GeoAPI.Geometries; using GisSharpBlog.NetTopologySuite.Features; namespace GeoJSON { [TestFixture] public class GeoJSONWriterTests { [SetUp] public void SetUp() { // set up the fixture } #region "Tests" [Test] public void GeoJSONWriter_Coordinate_Write_Test() { StringWriter writer = new StringWriter(); ICoordinate point = new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(12, 34); GeoJSONWriter.Write(point, writer); string geoJSON = writer.ToString(); Assert.IsTrue(!string.IsNullOrEmpty(geoJSON), "GeoJSON serialization of coordinate failed."); } [Test] public void GeoJSONWriter_Point_Write_Test() { StringWriter writer = new StringWriter(); IPoint point = new GisSharpBlog.NetTopologySuite.Geometries.Point(12, 34); GeoJSONWriter.Write(point, writer); string geoJSON = writer.ToString(); Assert.IsTrue(!string.IsNullOrEmpty(geoJSON), "GeoJSON serialization of point failed."); } [Test] public void GeoJSONWriter_MultiPoint_Write_Test() { StringWriter writer = new StringWriter(); IMultiPoint points = new GisSharpBlog.NetTopologySuite.Geometries.MultiPoint(new IPoint[] { new GisSharpBlog.NetTopologySuite.Geometries.Point(100.0, 0.0), new GisSharpBlog.NetTopologySuite.Geometries.Point(101.1, 1.0) }); GeoJSONWriter.Write(points, writer); string geoJSON = writer.ToString(); Assert.IsTrue(!string.IsNullOrEmpty(geoJSON), "GeoJSON serialization of multi point failed."); } [Test] public void GeoJSONWriter_LineString_Write_Test() { StringWriter writer = new StringWriter(); ICoordinate[] coordinates = new ICoordinate[] { new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(0, 0), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(1, 1) }; ILineString line = new GisSharpBlog.NetTopologySuite.Geometries.LineString(coordinates); GeoJSONWriter.Write(line, writer); string geoJSON = writer.ToString(); Assert.IsTrue(!string.IsNullOrEmpty(geoJSON), "GeoJSON serialization of linestring failed."); } [Test] public void GeoJSONWriter_MultiLineString_Write_Test() { StringWriter writer = new StringWriter(); ILineString line1 = new GisSharpBlog.NetTopologySuite.Geometries.LineString(new ICoordinate[] { new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(100.0, 0.0), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(101.0, 1.0) }); ILineString line2 = new GisSharpBlog.NetTopologySuite.Geometries.LineString(new ICoordinate[] { new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(102.0, 2.0), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(103.0, 3.0) }); IMultiLineString lines = new GisSharpBlog.NetTopologySuite.Geometries.MultiLineString( new ILineString[] { line1, line2 }); GeoJSONWriter.Write(lines, writer); string geoJSON = writer.ToString(); Assert.IsTrue(!string.IsNullOrEmpty(geoJSON), "GeoJSON serialization of multi linestring failed."); } [Test] public void GeoJSONWriter_Polygon_Write_Test() { StringWriter writer = new StringWriter(); ILinearRing ring1 = new GisSharpBlog.NetTopologySuite.Geometries.LinearRing(new ICoordinate[] { new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(100.0, 0.0), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(101.0, 0.0), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(101.0, 1.0), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(100.0, 0.0) }); ILinearRing ring2 = new GisSharpBlog.NetTopologySuite.Geometries.LinearRing(new ICoordinate[] { new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(100.2, 0.2), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(100.8, 0.2), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(100.2, 0.8), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(100.2, 0.2) }); IPolygon area = new GisSharpBlog.NetTopologySuite.Geometries.Polygon(ring1, new ILinearRing[] { ring2 }); GeoJSONWriter.Write(area, writer); string geoJSON = writer.ToString(); Assert.IsTrue(!string.IsNullOrEmpty(geoJSON), "GeoJSON serialization of multi linestring failed."); } [Test] public void GeoJSONWriter_MultiPolygon_Write_Test() { StringWriter writer = new StringWriter(); IPolygon area1 = new GisSharpBlog.NetTopologySuite.Geometries.Polygon( new GisSharpBlog.NetTopologySuite.Geometries.LinearRing(new ICoordinate[] { new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(102.0, 2.0), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(103.0, 2.0), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(103.0, 3.0), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(102.0, 2.0) })); ILinearRing ring1 = new GisSharpBlog.NetTopologySuite.Geometries.LinearRing(new ICoordinate[] { new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(100.0, 0.0), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(101.0, 0.0), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(101.0, 1.0), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(100.0, 0.0) }); ILinearRing ring2 = new GisSharpBlog.NetTopologySuite.Geometries.LinearRing(new ICoordinate[] { new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(100.2, 0.2), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(100.8, 0.2), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(100.2, 0.8), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(100.2, 0.2) }); IPolygon area2 = new GisSharpBlog.NetTopologySuite.Geometries.Polygon(ring1, new ILinearRing[] { ring2 }); IMultiPolygon areas = new GisSharpBlog.NetTopologySuite.Geometries.MultiPolygon(new IPolygon[] { area1, area2 }); GeoJSONWriter.Write(areas, writer); string geoJSON = writer.ToString(); Assert.IsTrue(!string.IsNullOrEmpty(geoJSON), "GeoJSON serialization of multi linestring failed."); } [Test] public void GeoJSONWriter_GeomteryCollection_Write_Test() { StringWriter writer = new StringWriter(); IPoint point = new GisSharpBlog.NetTopologySuite.Geometries.Point(12, 34); IMultiPoint points = new GisSharpBlog.NetTopologySuite.Geometries.MultiPoint(new IPoint[] { new GisSharpBlog.NetTopologySuite.Geometries.Point(100.0, 0.0), new GisSharpBlog.NetTopologySuite.Geometries.Point(101.1, 1.0) }); ILineString line = new GisSharpBlog.NetTopologySuite.Geometries.LineString(new ICoordinate[] { new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(0, 0), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(1, 1) }); ILineString line1 = new GisSharpBlog.NetTopologySuite.Geometries.LineString(new ICoordinate[] { new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(100.0, 0.0), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(101.0, 1.0) }); ILineString line2 = new GisSharpBlog.NetTopologySuite.Geometries.LineString(new ICoordinate[] { new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(102.0, 2.0), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(103.0, 3.0) }); IMultiLineString lines = new GisSharpBlog.NetTopologySuite.Geometries.MultiLineString(new ILineString[] { line1, line2 }); ILinearRing ring1 = new GisSharpBlog.NetTopologySuite.Geometries.LinearRing(new ICoordinate[] { new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(100.0, 0.0), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(101.0, 0.0), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(101.0, 1.0), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(100.0, 0.0) }); ILinearRing ring2 = new GisSharpBlog.NetTopologySuite.Geometries.LinearRing(new ICoordinate[] { new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(100.2, 0.2), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(100.8, 0.2), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(100.2, 0.8), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(100.2, 0.2) }); IPolygon area = new GisSharpBlog.NetTopologySuite.Geometries.Polygon(ring1, new ILinearRing[] { ring2 }); IGeometryCollection target = new GisSharpBlog.NetTopologySuite.Geometries.GeometryCollection(new IGeometry[] { point, points, line, lines, area }); GeoJSONWriter.Write(target, writer); writer.Flush(); string geoJSON = writer.ToString(); Assert.IsTrue(!string.IsNullOrEmpty(geoJSON), "GeoJSON serialization of geomtery collection failed."); } [Test] public void GeoJSONWriter_AttributesTable_Write_Test() { StringWriter writer = new StringWriter(); IAttributesTable table = new AttributesTable(); table.AddAttribute("hey", "there"); table.AddAttribute("hello", "world"); GeoJSONWriter.Write(table, writer); writer.Flush(); string geoJSON = writer.ToString(); Assert.IsTrue(!string.IsNullOrEmpty(geoJSON), "GeoJSON serialization of attribute table failed."); } [Test] public void GeoJSONWriter_Feature_Write_Test() { StringWriter writer = new StringWriter(); IAttributesTable table = new AttributesTable(); table.AddAttribute("hey", "there"); table.AddAttribute("hello", "world"); table.AddAttribute("number", 1); ILineString line = new GisSharpBlog.NetTopologySuite.Geometries.LineString(new ICoordinate[] { new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(100.0, 0.0), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(101.0, 1.0) }); Feature feature = new Feature(line, table); GeoJSONWriter.Write(feature, writer); writer.Flush(); string geoJSON = writer.ToString(); Assert.IsTrue(!string.IsNullOrEmpty(geoJSON), "GeoJSON serialization of attribute table failed."); } [Test] public void GeoJSONWriter_FeatureCollection_Write_Test() { StringWriter writer = new StringWriter(); IAttributesTable table1 = new AttributesTable(); table1.AddAttribute("hey", "there"); table1.AddAttribute("hello", "world"); ILineString line1 = new GisSharpBlog.NetTopologySuite.Geometries.LineString(new ICoordinate[] { new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(100.0, 0.0), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(101.0, 1.0) }); Feature feature1 = new Feature(line1, table1); IAttributesTable table2 = new AttributesTable(); table2.AddAttribute("jeff", "germain"); table2.AddAttribute("mike", "juniper"); ILineString line2 = new GisSharpBlog.NetTopologySuite.Geometries.LineString(new ICoordinate[] { new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(101.0, 4.0), new GisSharpBlog.NetTopologySuite.Geometries.Coordinate(106.0, 9.0) }); Feature feature2 = new Feature(line2, table2); List list = new List(); list.Add(feature1); list.Add(feature2); GeoJSONWriter.Write(list, writer); writer.Flush(); string geoJSON = writer.ToString(); Assert.IsTrue(!string.IsNullOrEmpty(geoJSON), "GeoJSON serialization of attribute table failed."); } #endregion [TearDown] public void TearDown() { // clean up } } }