public ZipArchiveProblems Validate(ZipArchiveEntry entry, IEnumerator <ShapeRecord> records)
        {
            if (entry == null)
            {
                throw new ArgumentNullException(nameof(entry));
            }
            if (records == null)
            {
                throw new ArgumentNullException(nameof(records));
            }

            var problems     = ZipArchiveProblems.None;
            var recordNumber = RecordNumber.Initial;

            try
            {
                var moved = records.MoveNext();
                if (moved)
                {
                    while (moved)
                    {
                        var record = records.Current;
                        if (record != null)
                        {
                            var recordContext = entry.AtShapeRecord(record.Header.RecordNumber);
                            if (record.Content.ShapeType != ShapeType.Point)
                            {
                                problems += recordContext.ShapeRecordShapeTypeMismatch(
                                    ShapeType.Point,
                                    record.Content.ShapeType);
                            }
                            else if (record.Content is PointShapeContent content)
                            {
                                if (!GeometryTranslator.ToGeometryPoint(content.Shape).IsValid)
                                {
                                    problems += recordContext.ShapeRecordGeometryMismatch();
                                }
                            }
                            recordNumber = record.Header.RecordNumber.Next();
                        }
                        else
                        {
                            recordNumber = recordNumber.Next();
                        }

                        moved = records.MoveNext();
                    }
                }
                else
                {
                    problems += entry.HasNoShapeRecords();
                }
            }
            catch (Exception exception)
            {
                problems += entry.AtShapeRecord(recordNumber).HasShapeRecordFormatError(exception);
            }

            return(problems);
        }
Example #2
0
 public static RoadSegmentBoundingBox From(PolyLineM shape) => new RoadSegmentBoundingBox
 {
     MinimumX = GeometryTranslator.ToGeometryMultiLineString(shape).EnvelopeInternal.MinX,
     MinimumY = GeometryTranslator.ToGeometryMultiLineString(shape).EnvelopeInternal.MinY,
     MaximumX = GeometryTranslator.ToGeometryMultiLineString(shape).EnvelopeInternal.MaxX,
     MaximumY = GeometryTranslator.ToGeometryMultiLineString(shape).EnvelopeInternal.MaxY,
     MinimumM = GeometryTranslator.ToGeometryMultiLineString(shape).GetOrdinates(Ordinate.M).DefaultIfEmpty(double.NegativeInfinity).Min(),
     MaximumM = GeometryTranslator.ToGeometryMultiLineString(shape).GetOrdinates(Ordinate.M).DefaultIfEmpty(double.PositiveInfinity).Max()
 };
        public Task When_road_nodes_were_imported()
        {
            var imported_nodes = Enumerable
                                 .Range(0, new Random().Next(10))
                                 .Select(index => new ImportedRoadNode
            {
                Id       = _fixture.Create <int>(),
                Type     = _fixture.Create <RoadNodeType>(),
                Geometry = BackOffice.Core.GeometryTranslator.Translate(_fixture.Create <NetTopologySuite.Geometries.Point>()),
                Origin   = _fixture.Create <ImportedOriginProperties>()
            })
                                 .ToArray();
            var givens = Array.ConvertAll(imported_nodes, imported => (object)imported);

            return(new RoadNetworkInfoProjection()
                   .Scenario()
                   .Given(
                       new BeganRoadNetworkImport()
                       )
                   .Given(givens)
                   .Expect(
                       new RoadNetworkInfo
            {
                Id = 0,
                CompletedImport = false,
                OrganizationCount = 0,
                RoadNodeCount = imported_nodes.Length,
                TotalRoadNodeShapeLength = imported_nodes.Aggregate(
                    new WordLength(0),
                    (current, imported) =>
                    current
                    .Plus(
                        new PointShapeContent(GeometryTranslator.FromGeometryPoint(BackOffice.Core.GeometryTranslator.Translate(imported.Geometry)))
                        .ContentLength
                        .Plus(ShapeRecord.HeaderLength))
                    ).ToInt32(),
                RoadSegmentCount = 0,
                RoadSegmentSurfaceAttributeCount = 0,
                RoadSegmentLaneAttributeCount = 0,
                RoadSegmentWidthAttributeCount = 0,
                RoadSegmentEuropeanRoadAttributeCount = 0,
                RoadSegmentNationalRoadAttributeCount = 0,
                RoadSegmentNumberedRoadAttributeCount = 0,
                TotalRoadSegmentShapeLength = 0,
                GradeSeparatedJunctionCount = 0
            }
                       ));
        }