Beispiel #1
0
        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));
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
            }
        }