/// <summary> /// Encodes a point along line location. /// </summary> public static byte[] Encode(PointAlongLineLocation location) { var data = new byte[17]; var header = new Header(); header.Version = 3; header.HasAttributes = true; header.ArF0 = false; header.IsPoint = true; header.ArF1 = false; HeaderConvertor.Encode(data, 0, header); CoordinateConverter.Encode(location.First.Coordinate, data, 1); FunctionalRoadClassConvertor.Encode(location.First.FuntionalRoadClass.Value, data, 7, 2); FormOfWayConvertor.Encode(location.First.FormOfWay.Value, data, 7, 5); FunctionalRoadClassConvertor.Encode(location.First.LowestFunctionalRoadClassToNext.Value, data, 8, 0); BearingConvertor.Encode(BearingConvertor.EncodeAngleToBearing(location.First.Bearing.Value), data, 8, 3); data[9] = DistanceToNextConvertor.Encode(location.First.DistanceToNext); CoordinateConverter.EncodeRelative(location.First.Coordinate, location.Last.Coordinate, data, 10); FunctionalRoadClassConvertor.Encode(location.Last.FuntionalRoadClass.Value, data, 14, 2); FormOfWayConvertor.Encode(location.Last.FormOfWay.Value, data, 14, 5); BearingConvertor.Encode(BearingConvertor.EncodeAngleToBearing(location.Last.Bearing.Value), data, 15, 3); OrientationConverter.Encode(location.Orientation.Value, data, 7, 0); SideOfRoadConverter.Encode(location.SideOfRoad.Value, data, 14, 0); if (location.PositiveOffsetPercentage.HasValue) { // positive offset percentage is present. OffsetConvertor.Encode(location.PositiveOffsetPercentage.Value, data, 16); } return(data); }
public void TestSideOfRoadFrcFow() { var data = new byte[1]; data[0] = 0; // sideofroad-frc-fow. SideOfRoadConverter.Encode(SideOfRoad.Left, data, 0, 0); FunctionalRoadClassConvertor.Encode(FunctionalRoadClass.Frc3, data, 0, 2); FormOfWayConvertor.Encode(FormOfWay.Roundabout, data, 0, 5); Assert.AreEqual(156, data[0]); // frc-sideofroad-fow. data[0] = 0; FunctionalRoadClassConvertor.Encode(FunctionalRoadClass.Frc3, data, 0, 2); SideOfRoadConverter.Encode(SideOfRoad.Left, data, 0, 0); FormOfWayConvertor.Encode(FormOfWay.Roundabout, data, 0, 5); Assert.AreEqual(156, data[0]); // frc-fow-sideofroad. data[0] = 0; FunctionalRoadClassConvertor.Encode(FunctionalRoadClass.Frc3, data, 0, 2); FormOfWayConvertor.Encode(FormOfWay.Roundabout, data, 0, 5); SideOfRoadConverter.Encode(SideOfRoad.Left, data, 0, 0); Assert.AreEqual(156, data[0]); }
public void TestEncoding1() { var data = new byte[1]; Assert.Catch <ArgumentOutOfRangeException>(() => { SideOfRoadConverter.Encode(SideOfRoad.OnOrAbove, data, 0, 10); }); SideOfRoadConverter.Encode(SideOfRoad.OnOrAbove, data, 0, 6); Assert.AreEqual(0, data[0]); SideOfRoadConverter.Encode(SideOfRoad.Right, data, 0, 6); Assert.AreEqual(1, data[0]); SideOfRoadConverter.Encode(SideOfRoad.Left, data, 0, 6); Assert.AreEqual(2, data[0]); SideOfRoadConverter.Encode(SideOfRoad.Both, data, 0, 6); Assert.AreEqual(3, data[0]); }