public static GeometryObject ToGeometry(this GeoRssBox georssBox) { if (georssBox.Item == null) { return(null); } List <IPosition> position = new List <IPosition>(); List <LineString> polygon = new List <LineString>(); string georssbox; georssbox = georssBox.Item.Trim(); string[] pos = georssbox.Split(' '); if (pos.Length != 4) { throw new InvalidFormatException("invalid GeoRSS representation: georss:box members are not 4 :" + georssbox); } position.Add(new GeographicPosition(pos[0], pos[1])); position.Add(new GeographicPosition(pos[0], pos[3])); position.Add(new GeographicPosition(pos[2], pos[3])); position.Add(new GeographicPosition(pos[2], pos[1])); position.Add(new GeographicPosition(pos[0], pos[1])); polygon.Add(new LineString(position)); return(new Polygon(polygon)); }
public void GeoRssBoxTestCase() { string xml = "<georss:box xmlns:georss=\"http://www.georss.org/georss\">42.943 -71.032 43.039 -69.856</georss:box>"; var reader = XmlReader.Create(new StringReader(xml)); Terradue.GeoJson.GeoRss.GeoRssBox box = (Terradue.GeoJson.GeoRss.GeoRssBox)Terradue.GeoJson.GeoRss.GeoRssHelper.Deserialize(reader); var geom = box.ToGeometry(); Assert.That(geom is Polygon); Assert.That(((Polygon)geom).LineStrings[0].Positions[0] is GeographicPosition); Assert.AreEqual(42.943, ((GeographicPosition)((Polygon)geom).LineStrings[0].Positions[0]).Latitude); Assert.AreEqual(-71.032, ((GeographicPosition)((Polygon)geom).LineStrings[0].Positions[0]).Longitude); Assert.AreEqual(42.943, ((GeographicPosition)((Polygon)geom).LineStrings[0].Positions[1]).Latitude); Assert.AreEqual(-69.856, ((GeographicPosition)((Polygon)geom).LineStrings[0].Positions[1]).Longitude); Assert.True(((Polygon)geom).LineStrings[0].IsClosed()); var poly = (GeoRssPolygon)geom.ToGeoRss(); var sw = new StringWriter(); GeoRssHelper.Serialize(XmlWriter.Create(sw), poly); var xml1 = sw.ToString(); sw = new StringWriter(); GeoRssHelper.Serialize(XmlWriter.Create(sw), box); sw.Close(); xml1 = sw.ToString(); Assert.IsTrue(XNode.DeepEquals(XDocument.Parse(xml).Root, XDocument.Parse(xml1).Root)); }