public MultiPolycurve ReadMultiPolycurve(Stream stream) { using (BinaryReader reader = InitializeReader(stream)) { ReadWkbType(reader, true, out WkbGeometryType geometryType, out Ordinates ordinates); bool reverseOrder = geometryType == WkbGeometryType.Polygon || geometryType == WkbGeometryType.MultiPolygon && !AssumeWkbPolygonsClockwise; GeomBuilder geometryBuilder = new GeomBuilder(reverseOrder); IEnumerable <Linestring> linestrings = ReadLinestrings(reader, geometryType, ordinates, geometryBuilder); return(new MultiPolycurve(linestrings)); } }
private RingGroup ReadPolygonCore(BinaryReader reader, Ordinates ordinates) { int ringCount = checked ((int)reader.ReadUInt32()); if (ringCount > 0) { bool reverseOrder = !AssumeWkbPolygonsClockwise; GeomBuilder geometryBuilder = new GeomBuilder(reverseOrder); List <Linestring> rings = ReadLinestringsCore(reader, ordinates, ringCount, geometryBuilder).ToList(); RingGroup result = new RingGroup(rings.First(), rings.Skip(1)); return(result); } // Allow empty? return(null); }
public Multipoint <IPnt> ReadMultiPoint(Stream stream) { using (BinaryReader reader = InitializeReader(stream)) { ReadWkbType(reader, true, out WkbGeometryType geometryType, out Ordinates ordinates); if (geometryType != WkbGeometryType.MultiPoint) { throw new NotSupportedException( $"Cannot read {geometryType} as point."); } int pointCount = checked ((int)reader.ReadUInt32()); var geometryBuilder = new GeomBuilder(false); Multipoint <IPnt> multipoint = ReadMultipointCore(reader, ordinates, pointCount, geometryBuilder); return(multipoint); } }