Ejemplo n.º 1
0
        public override IMultiPartGeometry <IPointM> Read(BinaryReader reader, WordCount origin)
        {
            var box       = Box.Read(reader, origin);
            var numParts  = NumParts.Read(reader, origin);
            var numPoints = NumPoints.Read(reader, origin);

            var pointStartIndices = new List <int>();

            for (var i = 0; i < numParts; i++)
            {
                var pointStartIndex = Part(i).Read(reader, origin);

                pointStartIndices.Add(pointStartIndex);
            }

            var parts        = new List <IMultiPointGeometry <IPointM> >();
            var pointsOffset = OffsetPoints(numParts);

            for (var i = 0; i < pointStartIndices.Count; i++)
            {
                var startIndex = pointStartIndices[i];
                var endIndex   = (pointStartIndices.Count > (i + 1) ? pointStartIndices[i + 1] : numPoints) - 1;
                var part       = new MultiPointGeometry <IPointM>();

                for (var iPointIndex = startIndex; iPointIndex <= endIndex; iPointIndex++)
                {
                    var point = Point(pointsOffset, numPoints, iPointIndex).Read(reader, origin);
                    part.Points.Add(point);
                }

                parts.Add(part);
            }

            var minM = MinM(pointsOffset, numPoints).Read(reader, origin);
            var maxM = MaxM(pointsOffset, numPoints).Read(reader, origin);

            var boxM = new BoundingBox <IPointM>()
            {
                Min = new PointM()
                {
                    X = box.Min.X,
                    Y = box.Min.Y,
                    M = minM
                },
                Max = new PointM()
                {
                    X = box.Max.X,
                    Y = box.Max.Y,
                    M = maxM
                }
            };

            return(new MultiPartGeometry <IPointM>()
            {
                Box = boxM,
                Parts = parts
            });
        }
Ejemplo n.º 2
0
        public override IMultiPartGeometry <IPoint> Read(BinaryReader reader, WordCount origin)
        {
            var box       = Box.Read(reader, origin);
            var numParts  = NumParts.Read(reader, origin);
            var numPoints = NumPoints.Read(reader, origin);

            var pointStartIndices = new List <int>();

            for (var i = 0; i < numParts; i++)
            {
                var pointStartIndex = Part(i).Read(reader, origin);

                pointStartIndices.Add(pointStartIndex);
            }

            var parts = new List <IMultiPointGeometry <IPoint> >();

            for (var i = 0; i < pointStartIndices.Count; i++)
            {
                var startIndex = pointStartIndices[i];
                var endIndex   = (pointStartIndices.Count > (i + 1) ? pointStartIndices[i + 1] : numPoints) - 1;
                var part       = new MultiPointGeometry <IPoint>();

                for (var iPointIndex = startIndex; iPointIndex <= endIndex; iPointIndex++)
                {
                    var point = Point(numParts, iPointIndex).Read(reader, origin);
                    part.Points.Add(point);
                }

                parts.Add(part);
            }

            return(new MultiPartGeometry <IPoint>()
            {
                Box = box,
                Parts = parts
            });
        }