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); }
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 } )); }