public TranslatedChanges Translate(ZipArchiveEntry entry, IEnumerator <ShapeRecord> records, TranslatedChanges changes) { if (entry == null) { throw new ArgumentNullException(nameof(entry)); } if (records == null) { throw new ArgumentNullException(nameof(records)); } if (changes == null) { throw new ArgumentNullException(nameof(changes)); } while (records.MoveNext()) { var record = records.Current; if (record != null && record.Content is PointShapeContent content) { if (changes.TryTranslateToRoadNodeId(record.Header.RecordNumber, out var id)) { if (changes.TryFindAddRoadNode(id, out var change)) { changes = changes.Replace(change, change.WithGeometry(GeometryTranslator.ToGeometryPoint(content.Shape))); } } } } return(changes); }
public static RoadNodeBoundingBox From(Point shape) => new RoadNodeBoundingBox { MinimumX = GeometryTranslator.ToGeometryPoint(shape).EnvelopeInternal.MinX, MinimumY = GeometryTranslator.ToGeometryPoint(shape).EnvelopeInternal.MinY, MaximumX = GeometryTranslator.ToGeometryPoint(shape).EnvelopeInternal.MaxX, MaximumY = GeometryTranslator.ToGeometryPoint(shape).EnvelopeInternal.MaxY };
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 void TranslateWithRecordsReturnsExpectedResult() { var node = _fixture.Create <AddRoadNode>(); var record = _fixture.Create <ShapeRecord>().Content.RecordAs(node.RecordNumber); var records = new List <ShapeRecord> { record }; var enumerator = records.GetEnumerator(); var changes = TranslatedChanges.Empty.Append(node); var result = _sut.Translate(_entry, enumerator, changes); var expected = TranslatedChanges.Empty.Append(node.WithGeometry(GeometryTranslator.ToGeometryPoint(((PointShapeContent)record.Content).Shape))); Assert.Equal(expected, result, new TranslatedChangeEqualityComparer()); }