/// <summary> /// Converts the specified <paramref name="geometry"/> into a corresponding instance of <see cref="IShape"/>. /// </summary> /// <param name="geometry">The geometry to be converted.</param> /// <returns>An instance of <see cref="IShape"/>.</returns> /// <exception cref="ArgumentNullException"><paramref name="geometry"/> is <c>null</c>.</exception> /// <exception cref="WktUnsupportedTypeException">type of <paramref name="geometry"/> is not supported.</exception> public static IShape ToShape(WktGeometry geometry) { if (geometry == null) { throw new ArgumentNullException(nameof(geometry)); } switch (geometry) { case WktPolygon polygon: return(ToPolygon(polygon)); case WktMultiPolygon multi: return(ToMultiPolygon(multi)); default: throw new WktUnsupportedTypeException(geometry.GetType().FullName); } }
/// <summary> /// Returns the area of the specified WKT <paramref name="geometry"/> shape measured in sqaure metres. /// </summary> /// <param name="geometry">The WKT shape.</param> /// <returns>A <see cref="double"/> representing the area of the shape in square metres.</returns> /// <remarks>For this method to work, it is assumed that coordinates are specified using the /// <strong>WGS 84</strong> coordinate system (eg. used by the Global Positioning System).</remarks> /// <see> /// <cref>https://en.wikipedia.org/wiki/World_Geodetic_System#WGS84</cref> /// </see> /// <see> /// <cref>https://en.wikipedia.org/wiki/Global_Positioning_System</cref> /// </see> /// <exception cref="ArgumentNullException"><paramref name="geometry"/> is <c>null</c>.</exception> public static double GetArea(WktGeometry geometry) { if (geometry == null) { throw new ArgumentNullException(nameof(geometry)); } switch (geometry) { case WktMultiPolygon multi: return(GetArea(multi)); case WktPolygon polygon: return(GetArea(polygon)); default: throw new InvalidOperationException("Unsupported type " + geometry.GetType()); } }