/// <summary> /// Reads Geometry from the reader. /// </summary> /// <param name="reader">The reader used to read data from input stream.</param> /// <returns>Geometry read from the input.</returns> private static Geometry ReadGeometry(BinaryReader reader) { WkbGeometryType geometryType = (WkbGeometryType)reader.ReadUInt32(); bool is3D, isMeasured; WkbGeometryType basicType; WkbReader.GetGeometryTypeDetails(geometryType, out basicType, out is3D, out isMeasured); switch (basicType) { case WkbGeometryType.Point: return(WkbReader.ReadPoint(reader, is3D, isMeasured)); case WkbGeometryType.LineString: return(WkbReader.ReadLineString(reader, is3D, isMeasured)); case WkbGeometryType.Polygon: return(WkbReader.ReadPolygon(reader, is3D, isMeasured)); case WkbGeometryType.MultiPoint: return(WkbReader.ReadMultiPoint(reader, is3D, isMeasured)); case WkbGeometryType.MultiLineString: return(WkbReader.ReadMultiLineString(reader, is3D, isMeasured)); case WkbGeometryType.MultiPolygon: return(WkbReader.ReadMultiPolygon(reader, is3D, isMeasured)); case WkbGeometryType.GeometryCollection: return(WkbReader.ReadGeometryCollection(reader, is3D, isMeasured)); default: throw new WkbFormatException("Unknown geometry type."); } }
/// <summary> /// Reads MultiLineString from the reader. /// </summary> /// <param name="reader">The reader used to read data from input stream.</param> /// <param name="is3D">bool value indicating whether multilinestring beeing read has Z-dimension.</param> /// <param name="isMeasured">bool value indicating whether multilinestring beeing read has M-value.</param> /// <returns>MultiLineString read from the input</returns> private static MultiLineString ReadMultiLineString(BinaryReader reader, bool is3D, bool isMeasured) { int pointsCount = (int)reader.ReadUInt32(); MultiLineString result = new MultiLineString(); for (int i = 0; i < pointsCount; i++) { result.Geometries.Add(WkbReader.ReadLineString(reader, is3D, isMeasured)); } return(result); }