Example #1
0
 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());
        }