Example #1
0
  def testEncodeSectorMatchingUSCG(self):
    msg = '!AIVDM,1,1,0,A,85M:Ih1KmPAW5BAs80e0EcN<11N6th@6BgL8,0*13'
    sub_area_msg = msg.split(',')[5][-16:]
    sa1_bits = binary.ais6tobitvec(sub_area_msg)
    sa1 = AreaNoticeSector(bits=sa1_bits)
    scale_factor = 100
    lon = -71.7516666667
    lat = 41.116666666
    precision = 2
    radius = 5000
    left = 175
    right = 225
    self.checkSector(sa1, scale_factor, lon, lat, precision, radius, left,
                     right)

    sa2 = AreaNoticeSector(lon, lat, radius, left, right, precision,
                           scale_factor)
    self.checkSector(sa2, scale_factor, lon, lat, precision, radius, left,
                     right)
    sa2_bits = sa2.get_bits()

    sa3 = AreaNoticeSector(bits=sa2_bits)
    self.checkSector(sa3, scale_factor, lon, lat, precision, radius, left,
                     right)
    self.assertEqual(sa1_bits, sa2_bits)
Example #2
0
  def testEncodeRectMatchingUSCG(self):
    msg = '!AIVDM,1,1,0,A,85M:Ih1KmPAVhjAs80e0;cKBN1N:W8Q@:2`0,0*0C'
    sub_area_msg = msg.split(',')[5][-16:]
    sa1_bits = binary.ais6tobitvec(sub_area_msg)
    sa1 = AreaNoticeRectangle(bits=sa1_bits)
    scale_factor = 10
    lon = -71.91
    lat = 41.1416666667
    precision = 4
    e_dim = 400
    n_dim = 200
    orientation_deg = 42
    self.checkRectangle(sa1, scale_factor, lon, lat, precision, e_dim,
                        n_dim, orientation_deg)

    sa2 = AreaNoticeRectangle(lon, lat, e_dim, n_dim, orientation_deg,
                              precision, scale_factor)
    self.checkRectangle(sa2, scale_factor, lon, lat, precision, e_dim,
                        n_dim, orientation_deg)
    sa2_bits = sa2.get_bits()

    sa3 = AreaNoticeRectangle(bits=sa2_bits)
    self.checkRectangle(sa3, scale_factor, lon, lat, precision, e_dim,
                        n_dim, orientation_deg)
    self.assertEqual(sa1_bits, sa2_bits)
Example #3
0
  def testTextOnly(self):
    msg = [
        '!AIVDM,2,1,0,A,85M:Ih1KmPA`tBAs85`01cON31N;U`P00000H;Gl1gfp52tjFq20H3r9P000,0*64',
        '!AIVDM,2,2,0,A,00000000bPbJT1Q9hd680000,0*03'
    ]
    sub_area_msg = msg[1].split(',')[5][-16:]
    sa1_bits = binary.ais6tobitvec(sub_area_msg)
    sa1 = AreaNoticeText(bits=sa1_bits)
    text = 'TEST LINE 1'
    self.checkText(sa1, text)

    sa2 = AreaNoticeText(text)
    self.checkText(sa2, text)
    sa2_bits = sa2.get_bits()
    self.assertEqual(sa1_bits, sa2_bits)
Example #4
0
  def testPolylineOnly(self):
    msg = [
        '!AIVDM,2,1,0,A,85M:Ih1KmPA`tBAs85`01cON31N;U`P00000H;Gl1gfp52tjFq20H3r9P000,0*64',
        '!AIVDM,2,2,0,A,00000000bPbJT1Q9hd680000,0*03']
    body = ''.join([sentence.split(',')[5] for sentence in msg])
    sub_area_msg = body[-32:-16]
    self.assertEqual(16, len(sub_area_msg))
    sa1_bits = binary.ais6tobitvec(sub_area_msg)
    sa1 = AreaNoticePoly(bits=sa1_bits)
    points1 = [(15.5, 550), (0., 0.), (0., 0.), (0., 0.)]
    scale_factor = 1  # Not what is in the example spreadsheet.
    self.checkPoly(
        sa1, SHAPES['POLYLINE'], scale_factor, None, None, points=points1)

    sa2 = AreaNoticePoly(SHAPES['POLYLINE'], points1, scale_factor)
    self.checkPoly(
        sa1, SHAPES['POLYLINE'], scale_factor, None, None, points=points1)
    sa2_bits = sa2.get_bits()
    self.assertEqual(sa1_bits, sa2_bits)
Example #5
0
  def testEncodeCircleMatchingUSCG(self):
    """Make sure we can recreate the bits in the USCG circle test."""
    msg = '!AIVDM,1,1,0,A,85M:Ih1KmPAU6jAs85`03cJm;1NHQhPFP000,0*19'
    # grab just the sub area portion
    circle_msg = msg.split(',')[5][-16:]
    c1_bits = binary.ais6tobitvec(circle_msg)
    c1 = AreaNoticeCircle(bits=c1_bits)
    lon = -71.935
    lat = 41.236666667
    scale_factor = 10
    precision = 4
    radius = 1800
    self.checkCircle(c1, scale_factor, lon, lat, precision, radius)

    # Now we build the same, must force the scale factor to match USCG
    c2 = AreaNoticeCircle(c1.lon, c1.lat, c1.radius, c1.precision, scale_factor)
    self.checkCircle(c2, scale_factor, lon, lat, precision, radius)

    c2_bits = c2.get_bits()
    c3 = AreaNoticeCircle(bits=c2_bits)
    self.checkCircle(c3, 10, lon, lat, precision, radius)
Example #6
0
 def testAis6ToBitvec(self):
   self.assertEqual(str(binary.ais6tobitvec('6')), '000110')
   self.assertEqual(str(binary.ais6tobitvec('6b')), '000110101010')
   self.assertEqual(str(binary.ais6tobitvec('6bF:R')),
                    '000110101010010110001010100010')