Dear friend Richard,

Were you able to obtain the latitude and longitude values with that script?

Thank you so much brother,

Paul

El sáb., 25 de enero de 2020 4:03 p. m., Richard M. Heiberger <
r...@temple.edu> escribió:

> ## from2Comp uses base R functions only
> from2Comp <- function(x, binDigits=8) {
>   ## binDigits=8 means 8 significant digits plus a sign bit, thus nchar(x)
> == 9
>   tmp <- strtoi(x, base=2)
>   Neg <- (tmp > (2^binDigits - 1))
>   tmp[Neg] <- tmp[Neg] - (2^(binDigits + 1))
>   tmp
> }
>
> from2Comp(substr(as.character(LatitudeFrame[,2]), 24, 31), 7)
>
> from2Comp(substr(as.character(LatitudeFrame[,2]), 23, 31), 8)
> from2Comp(substr(as.character(LongitudeFrame[,2]), 23, 31), 8)
>
> from2Comp(as.character(LatitudeFrame[,2]), 30)
> from2Comp(as.character(LongitudeFrame[,2]), 30)
>
>
> ## I don't see any system in AISMessageFrame
> tail(AISMessageFrame)
> ##                                      MessgeCode
> ## 95  85E:BR0F0P0000000000032jS2P000000DE7P3A00h0
> ## 96                 1349B:3000rCtrn553aR@JHD2d4O
> ## 97                           7933.8835099999997
> ## 98                 B;s@N9h00>TtPFQAsm803wU5wP06
> ## 99                 15B3Sj0000rC9RD5=mOh40jB20SU
> ## 100                15TgVb0000rCgVb57oFc;ARF2@67
>
>
> ## 180Long = -180Long, thus there is duplication.  How do you handle this?
> ## 90Lat  != -90Lat, so there is no duplication.
> ## How are minutes and seconds stored?
>
> On Fri, Jan 24, 2020 at 5:39 PM Richard M. Heiberger <r...@temple.edu>
> wrote:
> >
> > I don't have my computer with me, so I am commenting right now on the
> visual impression of the email.
> >
> > The latitude shows 90, 88, ... 2, 89, ...
> > The labels are lexicographically ordered
> > -1, -10, -11,...
> >
> > The latitude binrep look in correct order, and the labels looks like
> binary in order.
> >
> > These things are identified as factors, not as character.
> >
> > Please ensure that character values are not misinterpreted as factor
> when you construct your data frames.
> >
> > The four columns do not look to be in consistent order with each other.
> This in itself could cause trouble.
> >
> > I will look more when I have my computer running R so I can follow the
> rest of what you wrote.
> >
> > Rich
> >
> > On Fri, Jan 24, 2020 at 15:02 Paul Bernal <paulberna...@gmail.com>
> wrote:
> >>
> >> Dear friend Richard,
> >>
> >> Thank you for your interest in helping me through this challenge. As
> requested, I am providing the two lat and long frames you suggested, plus
> the one single column I am trying to decode:
> >>
> >> LatitudeFrame:
> >>
> >> > dput(LatitudeFrame)
> >> structure(list(Latitude = structure(c(90L, 88L, 87L, 86L, 85L,
> >> 84L, 83L, 82L, 81L, 80L, 79L, 77L, 76L, 75L, 74L, 73L, 72L, 71L,
> >> 70L, 69L, 68L, 66L, 65L, 64L, 63L, 62L, 61L, 60L, 59L, 58L, 57L,
> >> 55L, 54L, 53L, 52L, 51L, 50L, 49L, 48L, 47L, 46L, 44L, 43L, 42L,
> >> 41L, 40L, 39L, 38L, 37L, 36L, 35L, 33L, 32L, 31L, 30L, 29L, 28L,
> >> 27L, 26L, 25L, 24L, 22L, 21L, 20L, 19L, 18L, 17L, 16L, 15L, 14L,
> >> 13L, 11L, 10L, 9L, 8L, 7L, 6L, 5L, 4L, 3L, 2L, 89L, 78L, 67L,
> >> 56L, 45L, 34L, 23L, 12L, 1L, 91L, 92L, 103L, 114L, 125L, 136L,
> >> 147L, 158L, 169L, 180L, 93L, 94L, 95L, 96L, 97L, 98L, 99L, 100L,
> >> 101L, 102L, 104L, 105L, 106L, 107L, 108L, 109L, 110L, 111L, 112L,
> >> 113L, 115L, 116L, 117L, 118L, 119L, 120L, 121L, 122L, 123L, 124L,
> >> 126L, 127L, 128L, 129L, 130L, 131L, 132L, 133L, 134L, 135L, 137L,
> >> 138L, 139L, 140L, 141L, 142L, 143L, 144L, 145L, 146L, 148L, 149L,
> >> 150L, 151L, 152L, 153L, 154L, 155L, 156L, 157L, 159L, 160L, 161L,
> >> 162L, 163L, 164L, 165L, 166L, 167L, 168L, 170L, 171L, 172L, 173L,
> >> 174L, 175L, 176L, 177L, 178L, 179L, 181L), .Label = c("-1", "-10",
> >> "-11", "-12", "-13", "-14", "-15", "-16", "-17", "-18", "-19",
> >> "-2", "-20", "-21", "-22", "-23", "-24", "-25", "-26", "-27",
> >> "-28", "-29", "-3", "-30", "-31", "-32", "-33", "-34", "-35",
> >> "-36", "-37", "-38", "-39", "-4", "-40", "-41", "-42", "-43",
> >> "-44", "-45", "-46", "-47", "-48", "-49", "-5", "-50", "-51",
> >> "-52", "-53", "-54", "-55", "-56", "-57", "-58", "-59", "-6",
> >> "-60", "-61", "-62", "-63", "-64", "-65", "-66", "-67", "-68",
> >> "-69", "-7", "-70", "-71", "-72", "-73", "-74", "-75", "-76",
> >> "-77", "-78", "-79", "-8", "-80", "-81", "-82", "-83", "-84",
> >> "-85", "-86", "-87", "-88", "-89", "-9", "-90", "0", "1", "10",
> >> "11", "12", "13", "14", "15", "16", "17", "18", "19", "2", "20",
> >> "21", "22", "23", "24", "25", "26", "27", "28", "29", "3", "30",
> >> "31", "32", "33", "34", "35", "36", "37", "38", "39", "4", "40",
> >> "41", "42", "43", "44", "45", "46", "47", "48", "49", "5", "50",
> >> "51", "52", "53", "54", "55", "56", "57", "58", "59", "6", "60",
> >> "61", "62", "63", "64", "65", "66", "67", "68", "69", "7", "70",
> >> "71", "72", "73", "74", "75", "76", "77", "78", "79", "8", "80",
> >> "81", "82", "83", "84", "85", "86", "87", "88", "89", "9", "90"
> >> ), class = "factor"), LatitudeBinRep = structure(c(92L, 93L,
> >> 94L, 95L, 96L, 97L, 98L, 99L, 100L, 101L, 102L, 103L, 104L, 105L,
> >> 106L, 107L, 108L, 109L, 110L, 111L, 112L, 113L, 114L, 115L, 116L,
> >> 117L, 118L, 119L, 120L, 121L, 122L, 123L, 124L, 125L, 126L, 127L,
> >> 128L, 129L, 130L, 131L, 132L, 133L, 134L, 135L, 136L, 137L, 138L,
> >> 139L, 140L, 141L, 142L, 143L, 144L, 145L, 146L, 147L, 148L, 149L,
> >> 150L, 151L, 152L, 153L, 154L, 155L, 156L, 157L, 158L, 159L, 160L,
> >> 161L, 162L, 163L, 164L, 165L, 166L, 167L, 168L, 169L, 170L, 171L,
> >> 172L, 173L, 174L, 175L, 176L, 177L, 178L, 179L, 180L, 181L, 1L,
> >> 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L,
> >> 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L, 25L, 26L, 27L, 28L,
> >> 29L, 30L, 31L, 32L, 33L, 34L, 35L, 36L, 37L, 38L, 39L, 40L, 41L,
> >> 42L, 43L, 44L, 45L, 46L, 47L, 48L, 49L, 50L, 51L, 52L, 53L, 54L,
> >> 55L, 56L, 57L, 58L, 59L, 60L, 61L, 62L, 63L, 64L, 65L, 66L, 67L,
> >> 68L, 69L, 70L, 71L, 72L, 73L, 74L, 75L, 76L, 77L, 78L, 79L, 80L,
> >> 81L, 82L, 83L, 84L, 85L, 86L, 87L, 88L, 89L, 90L, 91L), .Label =
> c("0000000000000000000000000000000",
> >> "0000000000000000000000000000001", "0000000000000000000000000000010",
> >> "0000000000000000000000000000011", "0000000000000000000000000000100",
> >> "0000000000000000000000000000101", "0000000000000000000000000000110",
> >> "0000000000000000000000000000111", "0000000000000000000000000001000",
> >> "0000000000000000000000000001001", "0000000000000000000000000001010",
> >> "0000000000000000000000000001011", "0000000000000000000000000001100",
> >> "0000000000000000000000000001101", "0000000000000000000000000001110",
> >> "0000000000000000000000000001111", "0000000000000000000000000010000",
> >> "0000000000000000000000000010001", "0000000000000000000000000010010",
> >> "0000000000000000000000000010011", "0000000000000000000000000010100",
> >> "0000000000000000000000000010101", "0000000000000000000000000010110",
> >> "0000000000000000000000000010111", "0000000000000000000000000011000",
> >> "0000000000000000000000000011001", "0000000000000000000000000011010",
> >> "0000000000000000000000000011011", "0000000000000000000000000011100",
> >> "0000000000000000000000000011101", "0000000000000000000000000011110",
> >> "0000000000000000000000000011111", "0000000000000000000000000100000",
> >> "0000000000000000000000000100001", "0000000000000000000000000100010",
> >> "0000000000000000000000000100011", "0000000000000000000000000100100",
> >> "0000000000000000000000000100101", "0000000000000000000000000100110",
> >> "0000000000000000000000000100111", "0000000000000000000000000101000",
> >> "0000000000000000000000000101001", "0000000000000000000000000101010",
> >> "0000000000000000000000000101011", "0000000000000000000000000101100",
> >> "0000000000000000000000000101101", "0000000000000000000000000101110",
> >> "0000000000000000000000000101111", "0000000000000000000000000110000",
> >> "0000000000000000000000000110001", "0000000000000000000000000110010",
> >> "0000000000000000000000000110011", "0000000000000000000000000110100",
> >> "0000000000000000000000000110101", "0000000000000000000000000110110",
> >> "0000000000000000000000000110111", "0000000000000000000000000111000",
> >> "0000000000000000000000000111001", "0000000000000000000000000111010",
> >> "0000000000000000000000000111011", "0000000000000000000000000111100",
> >> "0000000000000000000000000111101", "0000000000000000000000000111110",
> >> "0000000000000000000000000111111", "0000000000000000000000001000000",
> >> "0000000000000000000000001000001", "0000000000000000000000001000010",
> >> "0000000000000000000000001000011", "0000000000000000000000001000100",
> >> "0000000000000000000000001000101", "0000000000000000000000001000110",
> >> "0000000000000000000000001000111", "0000000000000000000000001001000",
> >> "0000000000000000000000001001001", "0000000000000000000000001001010",
> >> "0000000000000000000000001001011", "0000000000000000000000001001100",
> >> "0000000000000000000000001001101", "0000000000000000000000001001110",
> >> "0000000000000000000000001001111", "0000000000000000000000001010000",
> >> "0000000000000000000000001010001", "0000000000000000000000001010010",
> >> "0000000000000000000000001010011", "0000000000000000000000001010100",
> >> "0000000000000000000000001010101", "0000000000000000000000001010110",
> >> "0000000000000000000000001010111", "0000000000000000000000001011000",
> >> "0000000000000000000000001011001", "0000000000000000000000001011010",
> >> "1111111111111111111111110100110", "1111111111111111111111110100111",
> >> "1111111111111111111111110101000", "1111111111111111111111110101001",
> >> "1111111111111111111111110101010", "1111111111111111111111110101011",
> >> "1111111111111111111111110101100", "1111111111111111111111110101101",
> >> "1111111111111111111111110101110", "1111111111111111111111110101111",
> >> "1111111111111111111111110110000", "1111111111111111111111110110001",
> >> "1111111111111111111111110110010", "1111111111111111111111110110011",
> >> "1111111111111111111111110110100", "1111111111111111111111110110101",
> >> "1111111111111111111111110110110", "1111111111111111111111110110111",
> >> "1111111111111111111111110111000", "1111111111111111111111110111001",
> >> "1111111111111111111111110111010", "1111111111111111111111110111011",
> >> "1111111111111111111111110111100", "1111111111111111111111110111101",
> >> "1111111111111111111111110111110", "1111111111111111111111110111111",
> >> "1111111111111111111111111000000", "1111111111111111111111111000001",
> >> "1111111111111111111111111000010", "1111111111111111111111111000011",
> >> "1111111111111111111111111000100", "1111111111111111111111111000101",
> >> "1111111111111111111111111000110", "1111111111111111111111111000111",
> >> "1111111111111111111111111001000", "1111111111111111111111111001001",
> >> "1111111111111111111111111001010", "1111111111111111111111111001011",
> >> "1111111111111111111111111001100", "1111111111111111111111111001101",
> >> "1111111111111111111111111001110", "1111111111111111111111111001111",
> >> "1111111111111111111111111010000", "1111111111111111111111111010001",
> >> "1111111111111111111111111010010", "1111111111111111111111111010011",
> >> "1111111111111111111111111010100", "1111111111111111111111111010101",
> >> "1111111111111111111111111010110", "1111111111111111111111111010111",
> >> "1111111111111111111111111011000", "1111111111111111111111111011001",
> >> "1111111111111111111111111011010", "1111111111111111111111111011011",
> >> "1111111111111111111111111011100", "1111111111111111111111111011101",
> >> "1111111111111111111111111011110", "1111111111111111111111111011111",
> >> "1111111111111111111111111100000", "1111111111111111111111111100001",
> >> "1111111111111111111111111100010", "1111111111111111111111111100011",
> >> "1111111111111111111111111100100", "1111111111111111111111111100101",
> >> "1111111111111111111111111100110", "1111111111111111111111111100111",
> >> "1111111111111111111111111101000", "1111111111111111111111111101001",
> >> "1111111111111111111111111101010", "1111111111111111111111111101011",
> >> "1111111111111111111111111101100", "1111111111111111111111111101101",
> >> "1111111111111111111111111101110", "1111111111111111111111111101111",
> >> "1111111111111111111111111110000", "1111111111111111111111111110001",
> >> "1111111111111111111111111110010", "1111111111111111111111111110011",
> >> "1111111111111111111111111110100", "1111111111111111111111111110101",
> >> "1111111111111111111111111110110", "1111111111111111111111111110111",
> >> "1111111111111111111111111111000", "1111111111111111111111111111001",
> >> "1111111111111111111111111111010", "1111111111111111111111111111011",
> >> "1111111111111111111111111111100", "1111111111111111111111111111101",
> >> "1111111111111111111111111111110", "1111111111111111111111111111111"
> >> ), class = "factor")), class = "data.frame", row.names = c(NA,
> >> -181L))
> >>
> >> LongitudeFrame:
> >>
> >> > dput(LongitudeFrame)
> >> structure(list(Longitude = structure(c(91L, 89L, 88L, 87L, 86L,
> >> 85L, 84L, 83L, 82L, 81L, 80L, 78L, 77L, 76L, 75L, 74L, 73L, 72L,
> >> 71L, 70L, 69L, 67L, 66L, 65L, 64L, 63L, 62L, 61L, 60L, 59L, 58L,
> >> 56L, 55L, 54L, 53L, 52L, 51L, 50L, 49L, 48L, 47L, 45L, 44L, 43L,
> >> 42L, 41L, 40L, 39L, 38L, 37L, 36L, 34L, 33L, 32L, 31L, 30L, 29L,
> >> 28L, 27L, 26L, 25L, 23L, 22L, 21L, 20L, 19L, 18L, 17L, 16L, 15L,
> >> 14L, 12L, 11L, 10L, 9L, 8L, 7L, 6L, 5L, 4L, 3L, 180L, 179L, 178L,
> >> 177L, 176L, 175L, 174L, 173L, 172L, 171L, 169L, 168L, 167L, 166L,
> >> 165L, 164L, 163L, 162L, 161L, 160L, 158L, 157L, 156L, 155L, 154L,
> >> 153L, 152L, 151L, 150L, 149L, 147L, 146L, 145L, 144L, 143L, 142L,
> >> 141L, 140L, 139L, 138L, 136L, 135L, 134L, 133L, 132L, 131L, 130L,
> >> 129L, 128L, 127L, 125L, 124L, 123L, 122L, 121L, 120L, 119L, 118L,
> >> 117L, 116L, 114L, 113L, 112L, 111L, 110L, 109L, 108L, 107L, 106L,
> >> 105L, 103L, 102L, 101L, 100L, 99L, 98L, 97L, 96L, 95L, 94L, 92L,
> >> 90L, 79L, 68L, 57L, 46L, 35L, 24L, 13L, 2L, 170L, 159L, 148L,
> >> 137L, 126L, 115L, 104L, 93L, 1L, 181L, 182L, 274L, 285L, 296L,
> >> 307L, 318L, 329L, 340L, 351L, 183L, 194L, 205L, 216L, 227L, 238L,
> >> 249L, 260L, 271L, 273L, 275L, 276L, 277L, 278L, 279L, 280L, 281L,
> >> 282L, 283L, 284L, 286L, 287L, 288L, 289L, 290L, 291L, 292L, 293L,
> >> 294L, 295L, 297L, 298L, 299L, 300L, 301L, 302L, 303L, 304L, 305L,
> >> 306L, 308L, 309L, 310L, 311L, 312L, 313L, 314L, 315L, 316L, 317L,
> >> 319L, 320L, 321L, 322L, 323L, 324L, 325L, 326L, 327L, 328L, 330L,
> >> 331L, 332L, 333L, 334L, 335L, 336L, 337L, 338L, 339L, 341L, 342L,
> >> 343L, 344L, 345L, 346L, 347L, 348L, 349L, 350L, 352L, 353L, 354L,
> >> 355L, 356L, 357L, 358L, 359L, 360L, 361L, 184L, 185L, 186L, 187L,
> >> 188L, 189L, 190L, 191L, 192L, 193L, 195L, 196L, 197L, 198L, 199L,
> >> 200L, 201L, 202L, 203L, 204L, 206L, 207L, 208L, 209L, 210L, 211L,
> >> 212L, 213L, 214L, 215L, 217L, 218L, 219L, 220L, 221L, 222L, 223L,
> >> 224L, 225L, 226L, 228L, 229L, 230L, 231L, 232L, 233L, 234L, 235L,
> >> 236L, 237L, 239L, 240L, 241L, 242L, 243L, 244L, 245L, 246L, 247L,
> >> 248L, 250L, 251L, 252L, 253L, 254L, 255L, 256L, 257L, 258L, 259L,
> >> 261L, 262L, 263L, 264L, 265L, 266L, 267L, 268L, 269L, 270L, 272L
> >> ), .Label = c("-1", "-10", "-100", "-101", "-102", "-103", "-104",
> >> "-105", "-106", "-107", "-108", "-109", "-11", "-110", "-111",
> >> "-112", "-113", "-114", "-115", "-116", "-117", "-118", "-119",
> >> "-12", "-120", "-121", "-122", "-123", "-124", "-125", "-126",
> >> "-127", "-128", "-129", "-13", "-130", "-131", "-132", "-133",
> >> "-134", "-135", "-136", "-137", "-138", "-139", "-14", "-140",
> >> "-141", "-142", "-143", "-144", "-145", "-146", "-147", "-148",
> >> "-149", "-15", "-150", "-151", "-152", "-153", "-154", "-155",
> >> "-156", "-157", "-158", "-159", "-16", "-160", "-161", "-162",
> >> "-163", "-164", "-165", "-166", "-167", "-168", "-169", "-17",
> >> "-170", "-171", "-172", "-173", "-174", "-175", "-176", "-177",
> >> "-178", "-179", "-18", "-180", "-19", "-2", "-20", "-21", "-22",
> >> "-23", "-24", "-25", "-26", "-27", "-28", "-29", "-3", "-30",
> >> "-31", "-32", "-33", "-34", "-35", "-36", "-37", "-38", "-39",
> >> "-4", "-40", "-41", "-42", "-43", "-44", "-45", "-46", "-47",
> >> "-48", "-49", "-5", "-50", "-51", "-52", "-53", "-54", "-55",
> >> "-56", "-57", "-58", "-59", "-6", "-60", "-61", "-62", "-63",
> >> "-64", "-65", "-66", "-67", "-68", "-69", "-7", "-70", "-71",
> >> "-72", "-73", "-74", "-75", "-76", "-77", "-78", "-79", "-8",
> >> "-80", "-81", "-82", "-83", "-84", "-85", "-86", "-87", "-88",
> >> "-89", "-9", "-90", "-91", "-92", "-93", "-94", "-95", "-96",
> >> "-97", "-98", "-99", "0", "1", "10", "100", "101", "102", "103",
> >> "104", "105", "106", "107", "108", "109", "11", "110", "111",
> >> "112", "113", "114", "115", "116", "117", "118", "119", "12",
> >> "120", "121", "122", "123", "124", "125", "126", "127", "128",
> >> "129", "13", "130", "131", "132", "133", "134", "135", "136",
> >> "137", "138", "139", "14", "140", "141", "142", "143", "144",
> >> "145", "146", "147", "148", "149", "15", "150", "151", "152",
> >> "153", "154", "155", "156", "157", "158", "159", "16", "160",
> >> "161", "162", "163", "164", "165", "166", "167", "168", "169",
> >> "17", "170", "171", "172", "173", "174", "175", "176", "177",
> >> "178", "179", "18", "180", "19", "2", "20", "21", "22", "23",
> >> "24", "25", "26", "27", "28", "29", "3", "30", "31", "32", "33",
> >> "34", "35", "36", "37", "38", "39", "4", "40", "41", "42", "43",
> >> "44", "45", "46", "47", "48", "49", "5", "50", "51", "52", "53",
> >> "54", "55", "56", "57", "58", "59", "6", "60", "61", "62", "63",
> >> "64", "65", "66", "67", "68", "69", "7", "70", "71", "72", "73",
> >> "74", "75", "76", "77", "78", "79", "8", "80", "81", "82", "83",
> >> "84", "85", "86", "87", "88", "89", "9", "90", "91", "92", "93",
> >> "94", "95", "96", "97", "98", "99"), class = "factor"), LongitudeBinRep
> = structure(c(182L,
> >> 183L, 184L, 185L, 186L, 187L, 188L, 189L, 190L, 191L, 192L, 193L,
> >> 194L, 195L, 196L, 197L, 198L, 199L, 200L, 201L, 202L, 203L, 204L,
> >> 205L, 206L, 207L, 208L, 209L, 210L, 211L, 212L, 213L, 214L, 215L,
> >> 216L, 217L, 218L, 219L, 220L, 221L, 222L, 223L, 224L, 225L, 226L,
> >> 227L, 228L, 229L, 230L, 231L, 232L, 233L, 234L, 235L, 236L, 237L,
> >> 238L, 239L, 240L, 241L, 242L, 243L, 244L, 245L, 246L, 247L, 248L,
> >> 249L, 250L, 251L, 252L, 253L, 254L, 255L, 256L, 257L, 258L, 259L,
> >> 260L, 261L, 262L, 263L, 264L, 265L, 266L, 267L, 268L, 269L, 270L,
> >> 271L, 272L, 273L, 274L, 275L, 276L, 277L, 278L, 279L, 280L, 281L,
> >> 282L, 283L, 284L, 285L, 286L, 287L, 288L, 289L, 290L, 291L, 292L,
> >> 293L, 294L, 295L, 296L, 297L, 298L, 299L, 300L, 301L, 302L, 303L,
> >> 304L, 305L, 306L, 307L, 308L, 309L, 310L, 311L, 312L, 313L, 314L,
> >> 315L, 316L, 317L, 318L, 319L, 320L, 321L, 322L, 323L, 324L, 325L,
> >> 326L, 327L, 328L, 329L, 330L, 331L, 332L, 333L, 334L, 335L, 336L,
> >> 337L, 338L, 339L, 340L, 341L, 342L, 343L, 344L, 345L, 346L, 347L,
> >> 348L, 349L, 350L, 351L, 352L, 353L, 354L, 355L, 356L, 357L, 358L,
> >> 359L, 360L, 361L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L,
> >> 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L,
> >> 25L, 26L, 27L, 28L, 29L, 30L, 31L, 32L, 33L, 34L, 35L, 36L, 37L,
> >> 38L, 39L, 40L, 41L, 42L, 43L, 44L, 45L, 46L, 47L, 48L, 49L, 50L,
> >> 51L, 52L, 53L, 54L, 55L, 56L, 57L, 58L, 59L, 60L, 61L, 62L, 63L,
> >> 64L, 65L, 66L, 67L, 68L, 69L, 70L, 71L, 72L, 73L, 74L, 75L, 76L,
> >> 77L, 78L, 79L, 80L, 81L, 82L, 83L, 84L, 85L, 86L, 87L, 88L, 89L,
> >> 90L, 91L, 92L, 93L, 94L, 95L, 96L, 97L, 98L, 99L, 100L, 101L,
> >> 102L, 103L, 104L, 105L, 106L, 107L, 108L, 109L, 110L, 111L, 112L,
> >> 113L, 114L, 115L, 116L, 117L, 118L, 119L, 120L, 121L, 122L, 123L,
> >> 124L, 125L, 126L, 127L, 128L, 129L, 130L, 131L, 132L, 133L, 134L,
> >> 135L, 136L, 137L, 138L, 139L, 140L, 141L, 142L, 143L, 144L, 145L,
> >> 146L, 147L, 148L, 149L, 150L, 151L, 152L, 153L, 154L, 155L, 156L,
> >> 157L, 158L, 159L, 160L, 161L, 162L, 163L, 164L, 165L, 166L, 167L,
> >> 168L, 169L, 170L, 171L, 172L, 173L, 174L, 175L, 176L, 177L, 178L,
> >> 179L, 180L, 181L), .Label = c("0000000000000000000000000000000",
> >> "0000000000000000000000000000001", "0000000000000000000000000000010",
> >> "0000000000000000000000000000011", "0000000000000000000000000000100",
> >> "0000000000000000000000000000101", "0000000000000000000000000000110",
> >> "0000000000000000000000000000111", "0000000000000000000000000001000",
> >> "0000000000000000000000000001001", "0000000000000000000000000001010",
> >> "0000000000000000000000000001011", "0000000000000000000000000001100",
> >> "0000000000000000000000000001101", "0000000000000000000000000001110",
> >> "0000000000000000000000000001111", "0000000000000000000000000010000",
> >> "0000000000000000000000000010001", "0000000000000000000000000010010",
> >> "0000000000000000000000000010011", "0000000000000000000000000010100",
> >> "0000000000000000000000000010101", "0000000000000000000000000010110",
> >> "0000000000000000000000000010111", "0000000000000000000000000011000",
> >> "0000000000000000000000000011001", "0000000000000000000000000011010",
> >> "0000000000000000000000000011011", "0000000000000000000000000011100",
> >> "0000000000000000000000000011101", "0000000000000000000000000011110",
> >> "0000000000000000000000000011111", "0000000000000000000000000100000",
> >> "0000000000000000000000000100001", "0000000000000000000000000100010",
> >> "0000000000000000000000000100011", "0000000000000000000000000100100",
> >> "0000000000000000000000000100101", "0000000000000000000000000100110",
> >> "0000000000000000000000000100111", "0000000000000000000000000101000",
> >> "0000000000000000000000000101001", "0000000000000000000000000101010",
> >> "0000000000000000000000000101011", "0000000000000000000000000101100",
> >> "0000000000000000000000000101101", "0000000000000000000000000101110",
> >> "0000000000000000000000000101111", "0000000000000000000000000110000",
> >> "0000000000000000000000000110001", "0000000000000000000000000110010",
> >> "0000000000000000000000000110011", "0000000000000000000000000110100",
> >> "0000000000000000000000000110101", "0000000000000000000000000110110",
> >> "0000000000000000000000000110111", "0000000000000000000000000111000",
> >> "0000000000000000000000000111001", "0000000000000000000000000111010",
> >> "0000000000000000000000000111011", "0000000000000000000000000111100",
> >> "0000000000000000000000000111101", "0000000000000000000000000111110",
> >> "0000000000000000000000000111111", "0000000000000000000000001000000",
> >> "0000000000000000000000001000001", "0000000000000000000000001000010",
> >> "0000000000000000000000001000011", "0000000000000000000000001000100",
> >> "0000000000000000000000001000101", "0000000000000000000000001000110",
> >> "0000000000000000000000001000111", "0000000000000000000000001001000",
> >> "0000000000000000000000001001001", "0000000000000000000000001001010",
> >> "0000000000000000000000001001011", "0000000000000000000000001001100",
> >> "0000000000000000000000001001101", "0000000000000000000000001001110",
> >> "0000000000000000000000001001111", "0000000000000000000000001010000",
> >> "0000000000000000000000001010001", "0000000000000000000000001010010",
> >> "0000000000000000000000001010011", "0000000000000000000000001010100",
> >> "0000000000000000000000001010101", "0000000000000000000000001010110",
> >> "0000000000000000000000001010111", "0000000000000000000000001011000",
> >> "0000000000000000000000001011001", "0000000000000000000000001011010",
> >> "0000000000000000000000001011011", "0000000000000000000000001011100",
> >> "0000000000000000000000001011101", "0000000000000000000000001011110",
> >> "0000000000000000000000001011111", "0000000000000000000000001100000",
> >> "0000000000000000000000001100001", "0000000000000000000000001100010",
> >> "0000000000000000000000001100011", "0000000000000000000000001100100",
> >> "0000000000000000000000001100101", "0000000000000000000000001100110",
> >> "0000000000000000000000001100111", "0000000000000000000000001101000",
> >> "0000000000000000000000001101001", "0000000000000000000000001101010",
> >> "0000000000000000000000001101011", "0000000000000000000000001101100",
> >> "0000000000000000000000001101101", "0000000000000000000000001101110",
> >> "0000000000000000000000001101111", "0000000000000000000000001110000",
> >> "0000000000000000000000001110001", "0000000000000000000000001110010",
> >> "0000000000000000000000001110011", "0000000000000000000000001110100",
> >> "0000000000000000000000001110101", "0000000000000000000000001110110",
> >> "0000000000000000000000001110111", "0000000000000000000000001111000",
> >> "0000000000000000000000001111001", "0000000000000000000000001111010",
> >> "0000000000000000000000001111011", "0000000000000000000000001111100",
> >> "0000000000000000000000001111101", "0000000000000000000000001111110",
> >> "0000000000000000000000001111111", "0000000000000000000000010000000",
> >> "0000000000000000000000010000001", "0000000000000000000000010000010",
> >> "0000000000000000000000010000011", "0000000000000000000000010000100",
> >> "0000000000000000000000010000101", "0000000000000000000000010000110",
> >> "0000000000000000000000010000111", "0000000000000000000000010001000",
> >> "0000000000000000000000010001001", "0000000000000000000000010001010",
> >> "0000000000000000000000010001011", "0000000000000000000000010001100",
> >> "0000000000000000000000010001101", "0000000000000000000000010001110",
> >> "0000000000000000000000010001111", "0000000000000000000000010010000",
> >> "0000000000000000000000010010001", "0000000000000000000000010010010",
> >> "0000000000000000000000010010011", "0000000000000000000000010010100",
> >> "0000000000000000000000010010101", "0000000000000000000000010010110",
> >> "0000000000000000000000010010111", "0000000000000000000000010011000",
> >> "0000000000000000000000010011001", "0000000000000000000000010011010",
> >> "0000000000000000000000010011011", "0000000000000000000000010011100",
> >> "0000000000000000000000010011101", "0000000000000000000000010011110",
> >> "0000000000000000000000010011111", "0000000000000000000000010100000",
> >> "0000000000000000000000010100001", "0000000000000000000000010100010",
> >> "0000000000000000000000010100011", "0000000000000000000000010100100",
> >> "0000000000000000000000010100101", "0000000000000000000000010100110",
> >> "0000000000000000000000010100111", "0000000000000000000000010101000",
> >> "0000000000000000000000010101001", "0000000000000000000000010101010",
> >> "0000000000000000000000010101011", "0000000000000000000000010101100",
> >> "0000000000000000000000010101101", "0000000000000000000000010101110",
> >> "0000000000000000000000010101111", "0000000000000000000000010110000",
> >> "0000000000000000000000010110001", "0000000000000000000000010110010",
> >> "0000000000000000000000010110011", "0000000000000000000000010110100",
> >> "1111111111111111111111101001100", "1111111111111111111111101001101",
> >> "1111111111111111111111101001110", "1111111111111111111111101001111",
> >> "1111111111111111111111101010000", "1111111111111111111111101010001",
> >> "1111111111111111111111101010010", "1111111111111111111111101010011",
> >> "1111111111111111111111101010100", "1111111111111111111111101010101",
> >> "1111111111111111111111101010110", "1111111111111111111111101010111",
> >> "1111111111111111111111101011000", "1111111111111111111111101011001",
> >> "1111111111111111111111101011010", "1111111111111111111111101011011",
> >> "1111111111111111111111101011100", "1111111111111111111111101011101",
> >> "1111111111111111111111101011110", "1111111111111111111111101011111",
> >> "1111111111111111111111101100000", "1111111111111111111111101100001",
> >> "1111111111111111111111101100010", "1111111111111111111111101100011",
> >> "1111111111111111111111101100100", "1111111111111111111111101100101",
> >> "1111111111111111111111101100110", "1111111111111111111111101100111",
> >> "1111111111111111111111101101000", "1111111111111111111111101101001",
> >> "1111111111111111111111101101010", "1111111111111111111111101101011",
> >> "1111111111111111111111101101100", "1111111111111111111111101101101",
> >> "1111111111111111111111101101110", "1111111111111111111111101101111",
> >> "1111111111111111111111101110000", "1111111111111111111111101110001",
> >> "1111111111111111111111101110010", "1111111111111111111111101110011",
> >> "1111111111111111111111101110100", "1111111111111111111111101110101",
> >> "1111111111111111111111101110110", "1111111111111111111111101110111",
> >> "1111111111111111111111101111000", "1111111111111111111111101111001",
> >> "1111111111111111111111101111010", "1111111111111111111111101111011",
> >> "1111111111111111111111101111100", "1111111111111111111111101111101",
> >> "1111111111111111111111101111110", "1111111111111111111111101111111",
> >> "1111111111111111111111110000000", "1111111111111111111111110000001",
> >> "1111111111111111111111110000010", "1111111111111111111111110000011",
> >> "1111111111111111111111110000100", "1111111111111111111111110000101",
> >> "1111111111111111111111110000110", "1111111111111111111111110000111",
> >> "1111111111111111111111110001000", "1111111111111111111111110001001",
> >> "1111111111111111111111110001010", "1111111111111111111111110001011",
> >> "1111111111111111111111110001100", "1111111111111111111111110001101",
> >> "1111111111111111111111110001110", "1111111111111111111111110001111",
> >> "1111111111111111111111110010000", "1111111111111111111111110010001",
> >> "1111111111111111111111110010010", "1111111111111111111111110010011",
> >> "1111111111111111111111110010100", "1111111111111111111111110010101",
> >> "1111111111111111111111110010110", "1111111111111111111111110010111",
> >> "1111111111111111111111110011000", "1111111111111111111111110011001",
> >> "1111111111111111111111110011010", "1111111111111111111111110011011",
> >> "1111111111111111111111110011100", "1111111111111111111111110011101",
> >> "1111111111111111111111110011110", "1111111111111111111111110011111",
> >> "1111111111111111111111110100000", "1111111111111111111111110100001",
> >> "1111111111111111111111110100010", "1111111111111111111111110100011",
> >> "1111111111111111111111110100100", "1111111111111111111111110100101",
> >> "1111111111111111111111110100110", "1111111111111111111111110100111",
> >> "1111111111111111111111110101000", "1111111111111111111111110101001",
> >> "1111111111111111111111110101010", "1111111111111111111111110101011",
> >> "1111111111111111111111110101100", "1111111111111111111111110101101",
> >> "1111111111111111111111110101110", "1111111111111111111111110101111",
> >> "1111111111111111111111110110000", "1111111111111111111111110110001",
> >> "1111111111111111111111110110010", "1111111111111111111111110110011",
> >> "1111111111111111111111110110100", "1111111111111111111111110110101",
> >> "1111111111111111111111110110110", "1111111111111111111111110110111",
> >> "1111111111111111111111110111000", "1111111111111111111111110111001",
> >> "1111111111111111111111110111010", "1111111111111111111111110111011",
> >> "1111111111111111111111110111100", "1111111111111111111111110111101",
> >> "1111111111111111111111110111110", "1111111111111111111111110111111",
> >> "1111111111111111111111111000000", "1111111111111111111111111000001",
> >> "1111111111111111111111111000010", "1111111111111111111111111000011",
> >> "1111111111111111111111111000100", "1111111111111111111111111000101",
> >> "1111111111111111111111111000110", "1111111111111111111111111000111",
> >> "1111111111111111111111111001000", "1111111111111111111111111001001",
> >> "1111111111111111111111111001010", "1111111111111111111111111001011",
> >> "1111111111111111111111111001100", "1111111111111111111111111001101",
> >> "1111111111111111111111111001110", "1111111111111111111111111001111",
> >> "1111111111111111111111111010000", "1111111111111111111111111010001",
> >> "1111111111111111111111111010010", "1111111111111111111111111010011",
> >> "1111111111111111111111111010100", "1111111111111111111111111010101",
> >> "1111111111111111111111111010110", "1111111111111111111111111010111",
> >> "1111111111111111111111111011000", "1111111111111111111111111011001",
> >> "1111111111111111111111111011010", "1111111111111111111111111011011",
> >> "1111111111111111111111111011100", "1111111111111111111111111011101",
> >> "1111111111111111111111111011110", "1111111111111111111111111011111",
> >> "1111111111111111111111111100000", "1111111111111111111111111100001",
> >> "1111111111111111111111111100010", "1111111111111111111111111100011",
> >> "1111111111111111111111111100100", "1111111111111111111111111100101",
> >> "1111111111111111111111111100110", "1111111111111111111111111100111",
> >> "1111111111111111111111111101000", "1111111111111111111111111101001",
> >> "1111111111111111111111111101010", "1111111111111111111111111101011",
> >> "1111111111111111111111111101100", "1111111111111111111111111101101",
> >> "1111111111111111111111111101110", "1111111111111111111111111101111",
> >> "1111111111111111111111111110000", "1111111111111111111111111110001",
> >> "1111111111111111111111111110010", "1111111111111111111111111110011",
> >> "1111111111111111111111111110100", "1111111111111111111111111110101",
> >> "1111111111111111111111111110110", "1111111111111111111111111110111",
> >> "1111111111111111111111111111000", "1111111111111111111111111111001",
> >> "1111111111111111111111111111010", "1111111111111111111111111111011",
> >> "1111111111111111111111111111100", "1111111111111111111111111111101",
> >> "1111111111111111111111111111110", "1111111111111111111111111111111"
> >> ), class = "factor")), class = "data.frame", row.names = c(NA,
> >> -361L))
> >>
> >> AISMessageFrame (Raw Messages as they come from the AIS device):
> >>
> >> > dput(AISMessageFrame)
> >> structure(list(MessgeCode = structure(c(17L, 6L, 93L, 92L, 81L,
> >> 24L, 4L, 44L, 21L, 43L, 66L, 64L, 94L, 46L, 26L, 82L, 12L, 9L,
> >> 67L, 63L, 65L, 39L, 48L, 38L, 79L, 83L, 37L, 73L, 23L, 68L, 59L,
> >> NA, 5L, 30L, 62L, 84L, 60L, 22L, 52L, 61L, 50L, 70L, 96L, 85L,
> >> 33L, 51L, 8L, 16L, 19L, 71L, 76L, 86L, 34L, 25L, 14L, 53L, 10L,
> >> 29L, 2L, 77L, 57L, 87L, 72L, 54L, 55L, 36L, 1L, 13L, NA, 78L,
> >> 58L, 15L, 89L, 35L, 20L, 3L, 49L, 56L, 90L, 40L, 45L, 41L, 42L,
> >> 74L, 95L, 32L, 91L, 27L, 69L, 76L, 18L, 31L, 11L, 80L, 75L, 7L,
> >> 72L, 88L, 28L, 47L), .Label = c("1:u0KOh001rCq5P529qqubqh2@3n",
> >> "100000?P00JCkt:583J=r?v:283Q", "10007NgP00rCQGV5:Pa=?gv>2<1H",
> >> "1000Fo@P01rCuG<56bnkN?v004`0", "1018lEWP?w<tSF0l4Q@>4?wp0W3h",
> >> "1349B:3000rCtrn553aR@JH02PRp", "1349B:3000rCtrn553aR@JHD2d4O",
> >> "137g`F8007rCaIj59Tc5Dl@800SN", "139NL4000LrCc8j59FEED4@000S<",
> >> "13M@Hk00jSJD@RD4s=qG1mT80@3J", "13P;K8@001rCfgr58=f;QbFD2D4G",
> >> "13P;K8@Oh1rCfgp58=ec1bD22<4J", "13P>4mhw1CrCi5H57aK5WlN>0<4F",
> >> "14aMBf000wrCKKN5:sdU0Sv<083C", "14S8@n001LrD?bH53iGe1rN>0@49",
> >> "15?7P`0P00rD1S453KSlj?v824`0", "15?f5H?P00rCQat5:Oah0?wn2@S6",
> >> "15?lSL?P00JCQWD5:OpP0?vB24`0", "15?mqH?P00rCek458rkEN?v:00S4",
> >> "15@EA<0P01JCo8l53=BFgwv@0D47", "15@eD@8000rC`bl59kW`mFn004`0",
> >> "15>nNj0000rCT<@5::qUpkt604`0", "15>uP00P00rC`U:59im;H?v22@1D",
> >> "15A@av3P00rClHn53<I8M?v02<2B", "15AIw`0P0GrCcO859DO5Ogv:0T`0",
> >> "15Aq00?P00rC`a`59mFeogv004`0", "15ATk20000rCnrv53N6;gPr>085R",
> >> "15B3Sj0000rC9RD5=mOh40jB20SU", "15BI>P0001rCgUD58DRalRj:00S5",
> >> "15BkV00P00rCQBf5:Q5JQOv42D1o", "15BW=20P00JCrvH54t=an?vB00Sg",
> >> "15D8Gj0P00rCThP5:6T=2Ov>0@5H", "15De7F?P00JCr5r5517v4?v80h2P",
> >> "15E:BR0P00rCgaT58DdJUwv82H34", "15E:N@0000rCgOd57p45bW><0<2H",
> >> "15E=m60000rC`W459k28Wnd:083h", "15E=q08P00JCrnR52cb>4?v200Sw",
> >> "15PoOh0001rCgbt58CwUaBD004`0", "15PvE@0002rCi7R57pokCT:424`0",
> >> "15Q69@8000rCiDr57n`bp@tB2<4R", "15QCl@?P?w<tSF0l4Q@>4?wp0@5:",
> >> "15QDCP0P?w<tSF0l4Q@>4?wp0D1G", "15QIK`0P00rC`Sb59jFUUgv02<1g",
> >> "15QK900001JCq=d54l?5J0op0l4e", "15QtF00000rCafD59P?VJ9p<0H52",
> >> "15TGcJ0002rD<>p55FgmI@Ul0H0S", "15TgVb0000rCgVb57oFc;ARF2@67",
> >> "15TgVb0000rCgVd57oFc31R42L46", "15TILd?P00JCm4l53`D>4?v>0L1m",
> >> "15U?B00000rCgb>58DFJfRl620RT", "15U@cn0000rCgU>57oPLGiT:2D4D",
> >> "15UHOn9P00rCQ`D5:OcTkgv80<4:", "1819?@H001rC9TB5=bppM9<82D0T",
> >> "18K1kH000FrCSMt5:@;m>l8>0<4J", "19NSFKh000JCTeH5:7g1LT8:0`3g",
> >> "19NSG<h003rCi@:57pmUkAB<0<1v", "1gu00CLLwfh2@Asw9@1<",
> "1gu103LLwfl1@Asw9P1<",
> >> "3", "34`odN1000rD1V2537=dfPJ60000", "35A=Rh1001rD;s454vSTuP`40000",
> >> "35QN<D1000rCr5l53esbgPR20000", "39NS@m11@1rCrb:53:E<v0j3R000",
> >> "403Iu6Qv4PU00rCk0d57rwW00<2g", "403Iu6Qv4PU01rCk0d57rwW00<2g",
> >> "403Iupiv4PU00rC9065>=fW00H0I", "403Iupiv4PU00rC9065>=fW00H0j",
> >> "54aMBf02:9M`?IDOH018DL4j085T000000000016>`Q8>4Oc0?@lRDm3hPC0",
> >> "55AP::02@VAlQ3G;7:1<lUB0MD4@DhuE0F22220l0`G465k90<PlRDm3hPC8",
> >> "55B7iD42CSGC<H`WF20L5>1=@5:222222222221@G@W9K4Oi0D@PC0ShK40C",
> >> "55R4:002?H<`Q3S7GR1<lUB0@4pF22222222220l000004p60;0E7kBE8888",
> >> "7933.8835099999997", "7933.8836099999999",
> "803Iu6PF15REPH3@Dh000000000002c88I2P0002IrbQ0@40TW`800000000",
> >> "85E:BR0F0P0000000000032jS2P000000DE7P3A00h0", "88888888880",
> >> "A03IupkAC4:dH0N90C9p0goOwj<Cw`P05A7vnh081wqU05DFwAKw<0?va@1>",
> >> "A03IupkAC4:dH0N90D=p0goP02<Cw``05A7vnwt81wqVwUDFwAOt<0?vah1>",
> >> "A03IupkAC4:dH0v90>@P1cF6nud@NrP5wH5T",
> "A03IupkAC4:dH0v90FtP1cF6nud@NrP5wH5T",
> >> "B;s@N9h00>TtPEQAslh03wuUwP06", "B;s@N9h00>TtPF1Asll03wP5wP06",
> >> "B;s@N9h00>TtPF1Asll03wPUwP06", "B;s@N9h00>TtPF1Aslp03wQ5wP06",
> >> "B;s@N9h00>TtPFQAslt03wQUwP06", "B;s@N9h00>TtPFQAslt03wR5wP06",
> >> "B;s@N9h00>TtPFQAsm003wRUwP06", "B;s@N9h00>TtPFQAsm803wU5wP06",
> >> "B;s@N9h00>TtPG1Asm403wSUwP06", "B;s@N9h00>TtPG1Asm403wT5wP06",
> >> "B;s@N9h00>TtPG1Asm803wTUwP06", "D03Iu6QGLN01MdN01StN000",
> "D03Iuph1TNfp4dv9J<`N000",
> >> "H5?AU:4U653hhhi8@lkihP000000",
> "HGp0772K07N4d1;0Pf71r0aj19RVmR19RVuR19RW5R19RW;t91Cjp31000C4",
> >> "PC@H8888880"), class = "factor")), class = "data.frame", row.names =
> c(NA,
> >> -100L))
> >>
> >> Each one of those weird codes given in the AISMessageFrame correspond
> to an AIS message, there is a lot of information provided here, but I am
> only concerned with the Latitude and Longitude values (degrees with
> minutes). In order to accomplish this, each one of those wierd codes need
> to be converted to binary strings, once converted to binary strings. As I
> mentioned before, the information regarding latitude and longitude can be
> extracted from the following positions (again, after converting code to
> binary strings):
> >> Latitude = positions 90 to 116 inclusive (assuming you count the bits
> from left to right, with the first one having position number 1)
> >> Longitude = positions 62 to 89 inclusive (assuming you count the bits
> from left to right withe the first one having position number 1)
> >>
> >> In the sample code I provided in previous emails, I used the following
> to obtain the Latitude and Longitude:
> >>
> >> library(stringi)
> >> library(dplyr)
> >> library(R.utils)
> >> library(RANN)
> >> library(NISTunits)
> >> library(pracma)
> >> library(celestial)
> >> library(stringr)
> >>
> >> #here I show the sample to decode a single record, though that needs to
> be done for all AIS messages, so obviously a loop will be needed for that:
> >>
> >> ascii_datformat <- utf8ToInt(dataset1[1,6]) #turning the first AIS
> message as it comes to ascii number
> >> Base <- ascii_datformat - 48    #transformation from ascii to decimal
> >> decy <- ifelse(Base > 40, Base-8, Base) #transformation from ascii to
> decimal continued
> >> biny <- intToBin(decy)  #transformation from decimal to binary
> representation
> >> binyframe <- data.frame(biny)
> >> tbinyframe <- paste(t(binyframe[,1]), collapse="") #simply transposing
> the results
> >>
> >> tbinyframe will give you something like this (for each row having an
> AIS message)
> >> > tbinyframe
> >> [1]
> "000001000101001111101110000101011000001111100000000000000000111010010011100001101001111100000101001010011111101001110000000000001111111111110110000010010000100011000110"
> >>
> >> Latitude <- substr(tbinyframe, 90, 116)
> >> Longitude <- substr(tbinyframe, 62, 89)
> >>
> >> What I need is to decode thos latitude and longitude values , to get
> results in a -90 to +90 range for latitude, and in the -180 to +180 range
> for longitude.
> >>
> >> Hopefully I´ve made myself sufficiently clear this time and/or
> hopefully I understood your point correctly and provided you what you need.
> >>
> >> Again, thank you so much for your time and valuable support brother!
> >>
> >> Best regards,
> >>
> >> Paul
> >>
> >> El vie., 24 ene. 2020 a las 14:09, Richard M. Heiberger (<
> r...@temple.edu>) escribió:
> >>>
> >>> now I am even more puzzled.
> >>>
> >>> please complete the following two data.frames and send it to the list.
> >>>
> >>> latDegrees lat2Comp
> >>> -90 xxxxxxxx
> >>> -89 xxxxxxxx
> >>> ...
> >>> -1 xxxxxxxx
> >>> 0 xxxxxxxx
> >>> 1 xxxxxxxx
> >>> ...
> >>> 89 xxxxxxxx
> >>> 90 xxxxxxxx
> >>>
> >>> lonDegrees lon2Comp
> >>> -180 xxxxxxxx
> >>> -179 xxxxxxxx
> >>> ...
> >>> -91 xxxxxxxx
> >>> -90 xxxxxxxx
> >>> -89 xxxxxxxx
> >>> ...
> >>> -1 xxxxxxxx
> >>> 0 xxxxxxxx
> >>> 1 xxxxxxxx
> >>> ...
> >>> 89 xxxxxxxx
> >>> 90 xxxxxxxx
> >>> 91 xxxxxxxx
> >>> ...
> >>> 179 xxxxxxxx
> >>> 180 xxxxxxxx
> >>>
> >>> Your 8 bit 2C example has 7 digits of precision plus sign which gives
> >>> a range of (-127,127).  That suffices for latitude (-90,90).
> >>> For longitude you will need 9 bits of twos complement for 8 bits of
> >>> precision plus sign to cover (-255,255), thus more than enough for
> >>> (-180,180).
> >>> This assumes that precision to the degree is sufficient.  If you need
> >>> precision to minutes and seconds, or to meters, then you
> >>> will need even more bits in 2C.
> >>>
> >>> Since it looks like you need a different number of bits for each
> >>> variable, I am asking for two data.frames.
> >>>
> >>> Rich
> >>>
> >>> On Fri, Jan 24, 2020 at 1:46 PM Paul Bernal <paulberna...@gmail.com>
> wrote:
> >>> >
> >>> > Hi Richard,
> >>> >
> >>> > That was just an example, to show that, for that particular string
> of binary numbers, the code works as expected. That is absolutely no
> related to the dataset I provided. If I try the function on the dataset, I
> get values well over the latitude and longitude boundaries (which should
> range from -90 to + 90, and -180 to +180).
> >>> >
> >>> > Regards,
> >>> >
> >>> > Paul
> >>> >
> >>> > El vie., 24 ene. 2020 a las 12:23, Richard M. Heiberger (<
> r...@temple.edu>) escribió:
> >>> >>
> >>> >> You show the example
> >>> >>
> >>> >> > fun("10110010")
> >>> >> [1] -78
> >>> >>
> >>> >> as satisfactory.  Where in your posted data set do you find the
> input
> >>> >> string "10110010"?
> >>> >>
> >>> >> Please post a set of relevant input strings, and the answers you
> want from them.
> >>> >> The rest of the columns are not helpful for this specific exercise.
> >>> >>
> >>> >> On Fri, Jan 24, 2020 at 11:34 AM Paul Bernal <
> paulberna...@gmail.com> wrote:
> >>> >> >
> >>> >> > Dear friend Rui,
> >>> >> >
> >>> >> > Hope you are doing great. Firstly, I want to thank you for your
> super
> >>> >> > valuable and kind support of always. As I mentioned in earlier
> e-mails, I
> >>> >> > am trying to decode AIS type messages, and the only ones I am
> having a real
> >>> >> > hard time with, is with latitude and longitude.
> >>> >> >
> >>> >> > I tried the function you provided me in one of your replies, and
> it works
> >>> >> > well with the examples  you provided, but in other cases it
> doesn´t.
> >>> >> >
> >>> >> > The messages I am trying to decode are in the 6th column of the
> data. I
> >>> >> > will provide you with a small sample first, and then the complete
> dataset
> >>> >> > (which has 100 rows). This is the small sample:
> >>> >> >
> >>> >> > > head(dat)
> >>> >> >     ...1 ...2 ...3 ...4 ...5                         ...6 ...7
>    ...8
> >>> >> > ...9 ...10 ...11 ...12 ...13
> >>> >> > 1 !AIVDM    1    1   NA    A 15?f5H?P00rCQat5:Oah0?wn2@S6 0*54
> 1485907200
> >>> >> > <NA>    NA    NA    NA  <NA>
> >>> >> > 2 !AIVDM    1    1   NA    A 1349B:3000rCtrn553aR@JH02PRp 0*39
> 1485907200
> >>> >> > <NA>    NA    NA    NA  <NA>
> >>> >> > 3 !AIVDM    1    1   NA    A      D03Iuph1TNfp4dv9J<`N000 2*0D
> 1485907200
> >>> >> > <NA>    NA    NA    NA  <NA>
> >>> >> > 4 !AIVDM    1    1   NA    A      D03Iu6QGLN01MdN01StN000 2*43
> 1485907200
> >>> >> > <NA>    NA    NA    NA  <NA>
> >>> >> > 5 !AIVDO    1    1   NA <NA> B;s@N9h00>TtPEQAslh03wuUwP06 0*29
> 1485907200
> >>> >> > <NA>    NA    NA    NA  <NA>
> >>> >> > 6 !AIVDM    1    1   NA    A 15A@av3P00rClHn53<I8M?v02<2B 0*2D
> 1485907200
> >>> >> > <NA>    NA    NA    NA  <NA>
> >>> >> >
> >>> >> > It is worth mentioning that each row of the 6th column provides
> several
> >>> >> > information about maritime vessels, like speed over ground,
> latitude,
> >>> >> > longitude, vessel ID, etc. I am only concerned with latitude and
> longitude
> >>> >> > since those are the only two fields I have not been able to decode
> >>> >> > successfully. Also, I am working on R version 3.6.2 for windows
> 64-bit OS.
> >>> >> >
> >>> >> > The messages to decode are of the following format:
> >>> >> > 15?f5H?P00rCQat5:Oah0?wn2@S6,  1349B:3000rCtrn553aR@JH02PRp, etc.
> >>> >> >
> >>> >> > Now, here is the complete dataset:
> >>> >> >
> >>> >> > > dput(dat)
> >>> >> > structure(list(...1 = c("!AIVDM", "!AIVDM", "!AIVDM", "!AIVDM",
> >>> >> > "!AIVDO", "!AIVDM", "!AIVDM", "!AIVDM", "!AIVDM", "!AIVDM",
> "!AIVDM",
> >>> >> > "!AIVDM", "!AIVDM", "!AIVDM", "!AIVDM", "!AIVDO", "!AIVDM",
> "!AIVDM",
> >>> >> > "!AIVDM", "!AIVDM", "!AIVDM", "!AIVDM", "!AIVDM", "!AIVDM",
> "!AIVDM",
> >>> >> > "!AIVDO", "!AIVDM", "$GPRMC", "!AIVDM", "!AIVDM", "!AIVDM",
> "$GPGBS",
> >>> >> > "!AIVDM", "!AIVDM", "!AIVDM", "!AIVDO", "!AIVDM", "!AIVDM",
> "!AIVDM",
> >>> >> > "!AIVDM", "!AIVDM", "!AIVDM", "!AIVDM", "!AIVDO", "!AIVDM",
> "!AIVDM",
> >>> >> > "!AIVDM", "!AIVDM", "!AIVDM", "!AIVDM", "!AIVDM", "!AIVDO",
> "!AIVDM",
> >>> >> > "!AIVDM", "!AIVDM", "!AIVDM", "!AIVDM", "!AIVDM", "!AIVDM",
> "!AIVDM",
> >>> >> > "!AIVDM", "!AIVDO", "$GPRMC", "!AIVDM", "!AIVDM", "!AIVDM",
> "!AIVDM",
> >>> >> > "!AIVDM", "$GPGBS", "!AIVDM", "!AIVDM", "!AIVDM", "!AIVDO",
> "!AIVDM",
> >>> >> > "!AIVDM", "!AIVDM", "!AIVDM", "!AIVDM", "!AIVDO", "!AIVDM",
> "!AIVDM",
> >>> >> > "!AIVDM", "!AIVDM", "!AIVDM", "!AIVDM", "!AIVDM", "!AIVDO",
> "!AIVDM",
> >>> >> > "!AIVDM", "!AIVDM", "!AIVDM", "!AIVDM", "!AIVDM", "!AIVDM",
> "!AIVDM",
> >>> >> > "!AIVDM", "$GPRMC", "!AIVDO", "!AIVDM", "!AIVDM"), ...2 = c(1,
> >>> >> > 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
> >>> >> > 1, 1, 1, 1, 1, 50002, 1, 2, 2, 50002, 1, 1, 1, 1, 1, 1, 1, 1,
> >>> >> > 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
> >>> >> > 1, 50006, 1, 1, 1, 1, 1, 50006, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,
> >>> >> > 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 50010, 1,
> >>> >> > 1, 1), ...3 = c("1", "1", "1", "1", "1", "1", "1", "1", "1",
> >>> >> > "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1",
> >>> >> > "1", "1", "1", "1", "1", "A", "1", "1", "2", "1.3", "1", "1",
> >>> >> > "1", "1", "1", "1", "1", "1", "1", "1", "2", "1", "1", "1", "1",
> >>> >> > "1", "1", "1", "2", "1", "1", "1", "1", "1", "1", "1", "1", "1",
> >>> >> > "2", "1", "A", "1", "1", "1", "1", "1", "1.3999999999999999",
> >>> >> > "1", "2", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1",
> >>> >> > "1", "1", "2", "1", "1", "1", "1", "2", "1", "1", "1", "1", "1",
> >>> >> > "1", "A", "1", "1", "1"), ...4 = c(NA, NA, NA, NA, NA, NA, NA,
> >>> >> > NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> > NA, NA, NA, NA, 856.96783, NA, 7, 7, 1.5, NA, NA, NA, NA, NA,
> >>> >> > NA, NA, NA, NA, 8, 8, NA, NA, NA, NA, NA, NA, 9, 9, NA, NA, NA,
> >>> >> > NA, NA, NA, NA, NA, 0, 0, NA, 856.96805, NA, NA, NA, NA, NA,
> >>> >> > 1.5, 1, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 2,
> >>> >> > 2, NA, NA, NA, 3, 3, NA, NA, NA, NA, NA, NA, 856.96827, NA, NA,
> >>> >> > NA), ...5 = c("A", "A", "A", "A", NA, "A", "A", "B", "B", "A",
> >>> >> > "A", "A", "A", "B", "B", NA, "B", "A", "B", "A", "B", "B", "A",
> >>> >> > "B", "A", NA, "B", "N", "B", "A", "A", "3.2000000000000002",
> >>> >> > "B", "A", "A", NA, "A", "A", "A", "A", "B", "A", "A", NA, "B",
> >>> >> > "A", "A", "A", "A", "A", "A", NA, "A", "A", "A", "B", "B", "B",
> >>> >> > "B", "A", "A", NA, "N", "A", "A", "B", "B", "B",
> "3.2999999999999998",
> >>> >> > "B", "B", "B", NA, "B", "B", "A", "B", "B", NA, "B", "B", "A",
> >>> >> > "A", "B", "B", "A", NA, "B", "B", "B", "A", "A", "A", "A", "A",
> >>> >> > "B", "N", NA, "B", "B"), ...6 = c("15?f5H?P00rCQat5:Oah0?wn2@S6",
> >>> >> > "1349B:3000rCtrn553aR@JH02PRp", "D03Iuph1TNfp4dv9J<`N000",
> >>> >> > "D03Iu6QGLN01MdN01StN000",
> >>> >> > "B;s@N9h00>TtPEQAslh03wuUwP06", "15A@av3P00rClHn53<I8M?v02<2B",
> >>> >> > "1000Fo@P01rCuG<56bnkN?v004`0", "15QK900001JCq=d54l?5J0op0l4e",
> >>> >> > "15@eD@8000rC`bl59kW`mFn004`0", "15QIK`0P00rC`Sb59jFUUgv02<1g",
> >>> >> > "403Iupiv4PU00rC9065>=fW00H0I", "403Iu6Qv4PU00rCk0d57rwW00<2g",
> >>> >> > "H5?AU:4U653hhhi8@lkihP000000", "15TGcJ0002rD<>p55FgmI@Ul0H0S",
> >>> >> > "15Aq00?P00rC`a`59mFeogv004`0", "B;s@N9h00>TtPF1Asll03wP5wP06",
> >>> >> > "13P;K8@Oh1rCfgp58=ec1bD22<4J", "139NL4000LrCc8j59FEED4@000S<",
> >>> >> > "403Iupiv4PU00rC9065>=fW00H0j", "39NS@m11@1rCrb:53:E<v0j3R000",
> >>> >> > "403Iu6Qv4PU01rCk0d57rwW00<2g", "15PvE@0002rCi7R57pokCT:424`0",
> >>> >> > "15TgVb0000rCgVd57oFc31R42L46", "15PoOh0001rCgbt58CwUaBD004`0",
> >>> >> > "A03IupkAC4:dH0v90>@P1cF6nud@NrP5wH5T", "B;s@N9h00
> >TtPF1Asll03wPUwP06",
> >>> >> > "15E=q08P00JCrnR52cb>4?v200Sw", "7933.8836099999999",
> >>> >> > "15>uP00P00rC`U:59im;H?v22@1D",
> >>> >> > "54aMBf02:9M`?IDOH018DL4j085T000000000016>`Q8>4Oc0?@lRDm3hPC0",
> >>> >> > "3", NA, "1018lEWP?w<tSF0l4Q@>4?wp0W3h",
> "15BkV00P00rCQBf5:Q5JQOv42D1o",
> >>> >> > "35QN<D1000rCr5l53esbgPR20000", "B;s@N9h00>TtPF1Aslp03wQ5wP06",
> >>> >> > "34`odN1000rD1V2537=dfPJ60000", "15>nNj0000rCT<@5::qUpkt604`0",
> >>> >> > "15UHOn9P00rCQ`D5:OcTkgv80<4:", "35A=Rh1001rD;s454vSTuP`40000",
> >>> >> > "15U?B00000rCgb>58DFJfRl620RT",
> "55B7iD42CSGC<H`WF20L5>1=@5:222222222221@G
> >>> >> > @W9K4Oi0D@PC0ShK40C",
> >>> >> > "PC@H8888880", "B;s@N9h00>TtPFQAslt03wQUwP06",
> >>> >> > "15De7F?P00JCr5r5517v4?v80h2P",
> >>> >> > "15U@cn0000rCgU>57oPLGiT:2D4D", "137g`F8007rCaIj59Tc5Dl@800SN",
> >>> >> > "15?7P`0P00rD1S453KSlj?v824`0", "15?mqH?P00rCek458rkEN?v:00S4",
> >>> >> > "55R4:002?H<`Q3S7GR1<lUB0@4pF22222222220l000004p60;0E7kBE8888",
> >>> >> > "88888888880", "B;s@N9h00>TtPFQAslt03wR5wP06",
> >>> >> > "15E:BR0P00rCgaT58DdJUwv82H34",
> >>> >> > "15AIw`0P0GrCcO859DO5Ogv:0T`0", "14aMBf000wrCKKN5:sdU0Sv<083C",
> >>> >> > "1819?@H001rC9TB5=bppM9<82D0T", "13M@Hk00jSJD@RD4s=qG1mT80@3J",
> >>> >> > "15BI>P0001rCgUD58DRalRj:00S5", "100000?P00JCkt:583J=r?v:283Q",
> >>> >> > "A03IupkAC4:dH0N90C9p0goOwj<Cw`P05A7vnh081wqU05DFwAKw<0?va@1>",
> >>> >> > "1gu00CLLwfh2@Asw9@1<", "B;s@N9h00>TtPFQAsm003wRUwP06",
> >>> >> > "7933.8835099999997",
> >>> >> > "18K1kH000FrCSMt5:@;m>l8>0<4J", "19NSFKh000JCTeH5:7g1LT8:0`3g",
> >>> >> > "15E=m60000rC`W459k28Wnd:083h", "1:u0KOh001rCq5P529qqubqh2@3n",
> >>> >> > "13P>4mhw1CrCi5H57aK5WlN>0<4F", NA,
> >>> >> > "A03IupkAC4:dH0N90D=p0goP02<Cw``05A7vnwt81wqVwUDFwAOt<0?vah1>",
> >>> >> > "1gu103LLwfl1@Asw9P1<", "14S8@n001LrD?bH53iGe1rN>0@49",
> >>> >> > "B;s@N9h00>TtPG1Asm403wSUwP06",
> >>> >> >
> >>> >> > "15E:N@0000rCgOd57p45bW><0<2H", "15@EA<0P01JCo8l53=BFgwv@0D47",
> >>> >> > "10007NgP00rCQGV5:Pa=?gv>2<1H", "15TILd?P00JCm4l53`D>4?v>0L1m",
> >>> >> > "19NSG<h003rCi@:57pmUkAB<0<1v", "B;s@N9h00>TtPG1Asm403wT5wP06",
> >>> >> > "15Q69@8000rCiDr57n`bp@tB2<4R", "15QtF00000rCafD59P?VJ9p<0H52",
> >>> >> > "15QCl@?P?w<tSF0l4Q@>4?wp0@5:", "15QDCP0P?w<tSF0l4Q@>4?wp0D1G",
> >>> >> > "803Iu6PF15REPH3@Dh000000000002c88I2P0002IrbQ0@40TW`800000000",
> >>> >> > "HGp0772K07N4d1;0Pf71r0aj19RVmR19RVuR19RW5R19RW;t91Cjp31000C4",
> >>> >> > "15D8Gj0P00rCThP5:6T=2Ov>0@5H", "B;s@N9h00>TtPG1Asm803wTUwP06",
> >>> >> > "15ATk20000rCnrv53N6;gPr>085R",
> >>> >> > "55AP::02@VAlQ3G;7:1<lUB0MD4@DhuE0F22220l0`G465k90<PlRDm3hPC8",
> >>> >> >
> >>> >> > "88888888880", "15?lSL?P00JCQWD5:OpP0?vB24`0",
> >>> >> > "15BW=20P00JCrvH54t=an?vB00Sg",
> >>> >> > "13P;K8@001rCfgr58=f;QbFD2D4G",
> "A03IupkAC4:dH0v90FtP1cF6nud@NrP5wH5T",
> >>> >> > "85E:BR0F0P0000000000032jS2P000000DE7P3A00h0",
> "1349B:3000rCtrn553aR@JHD2d4O",
> >>> >> >
> >>> >> > "7933.8835099999997", "B;s@N9h00>TtPFQAsm803wU5wP06",
> >>> >> > "15B3Sj0000rC9RD5=mOh40jB20SU",
> >>> >> > "15TgVb0000rCgVb57oFc;ARF2@67"), ...7 = c("0*54", "0*39", "2*0D",
> >>> >> > "2*43", "0*29", "0*2D", "0*27", "0*1D", "0*26", "0*48", "0*4B",
> >>> >> > "0*3A", "0*34", "0*3A", "0*76", "0*0B", "0*4A", "0*72", "0*6B",
> >>> >> > "0*4E", "0*38", "0*04", "0*11", "0*17", "0*18", "0*6B", "0*64",
> >>> >> > "W", "0*53", "0*32", "2*20", NA, "0*61", "0*1C", "0*79", "0*16",
> >>> >> > "0*44", "0*53", "0*04", "0*2D", "0*1C", "0*07", "2*37", "0*12",
> >>> >> > "0*2D", "0*30", "0*6D", "0*25", "0*26", "0*75", "2*2D", "0*71",
> >>> >> > "0*38", "0*6D", "0*0F", "0*34", "0*1D", "0*70", "0*47", "0*70",
> >>> >> > "0*4C", "0*54", "W", "0*64", "0*66", "0*69", "0*0C", "0*70",
> >>> >> > NA, "0*11", "0*28", "0*38", "0*30", "0*1F", "0*64", "0*7C",
> "0*38",
> >>> >> > "0*67", "0*57", "0*59", "0*75", "0*52", "0*18", "0*08", "0*5F",
> >>> >> > "0*26", "0*3B", "0*67", "0*6A", "2*24", "0*47", "0*65", "0*56",
> >>> >> > "0*54", "2*76", "0*23", "W", "0*3B", "0*1D", "0*11"), ...8 =
> c(1485907200,
> >>> >> > 1485907200, 1485907200, 1485907200, 1485907200, 1485907200,
> 1485907200,
> >>> >> > 1485907200, 1485907200, 1485907200, 1485907200, 1485907200,
> 1485907200,
> >>> >> > 1485907201, 1485907201, 1485907201, 1485907201, 1485907201,
> 1485907201,
> >>> >> > 1485907201, 1485907201, 1485907201, 1485907201, 1485907201,
> 1485907201,
> >>> >> > 1485907201, 1485907201, 0.008, 1485907201, 1485907201, 1485907201,
> >>> >> > NA, 1485907203, 1485907203, 1485907203, 1485907203, 1485907203,
> >>> >> > 1485907203, 1485907203, 1485907204, 1485907204, 1485907204,
> 1485907204,
> >>> >> > 1485907204, 1485907204, 1485907204, 1485907204, 1485907204,
> 1485907204,
> >>> >> > 1485907204, 1485907205, 1485907205, 1485907205, 1485907205,
> 1485907205,
> >>> >> > 1485907205, 1485907205, 1485907206, 1485907206, 1485907206,
> 1485907206,
> >>> >> > 1485907206, 0.01, 1485907206, 1485907206, 1485907206, 1485907206,
> >>> >> > 1485907206, NA, 1485907206, 1485907206, 1485907206, 1485907206,
> >>> >> > 1485907206, 1485907206, 1485907206, 1485907208, 1485907208,
> 1485907208,
> >>> >> > 1485907208, 1485907208, 1485907209, 1485907209, 1485907209,
> 1485907209,
> >>> >> > 1485907209, 1485907209, 1485907209, 1485907209, 1485907209,
> 1485907209,
> >>> >> > 1485907209, 1485907209, 1485907209, 1485907209, 1485907209, 0.005,
> >>> >> > 1485907209, 1485907209, 1485907209), ...9 = c(NA, NA, NA, NA,
> >>> >> > NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> > NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "*41", NA, NA, NA,
> >>> >> > NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> > NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> > NA, "*43", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> > NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> > NA, NA), ...10 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> > NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> > 10217, NA, NA, NA, 1485907201, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> > NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> > NA, NA, NA, NA, NA, NA, 10217, NA, NA, NA, NA, NA, 1485907206,
> >>> >> > NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> > NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 10217, NA, NA, NA
> >>> >> > ), ...11 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> > NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> > NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> > NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> > NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> > NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> > NA, NA, NA, NA, NA, NA, NA, NA), ...12 = c(NA, NA, NA, NA, NA,
> >>> >> > NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> > NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> > NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> > NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> > NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> > NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
> >>> >> >     ...13 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> >     NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> >     "D*6F", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> >     NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> >     NA, NA, NA, NA, NA, NA, "D*60", NA, NA, NA, NA, NA, NA, NA,
> >>> >> >     NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> >     NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "D*63", NA, NA,
> >>> >> >     NA), ...14 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> >     NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> >     NA, 1485907201, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> >     NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> >     NA, NA, NA, NA, NA, NA, NA, NA, 1485907206, NA, NA, NA, NA,
> >>> >> >     NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> >>> >> >     NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
> 1485907209,
> >>> >> >     NA, NA, NA)), row.names = c(NA, -100L), class = "data.frame")
> >>> >> >
> >>> >> > To tested your function I took the first message, which is
> located in the
> >>> >> > 6th column and the 1st row, and did the following:
> >>> >> >
> >>> >> > library(stringi)
> >>> >> > library(dplyr)
> >>> >> > library(R.utils)
> >>> >> > library(RANN)
> >>> >> > library(NISTunits)
> >>> >> > library(pracma)
> >>> >> > library(celestial)
> >>> >> > library(stringr)
> >>> >> >
> >>> >> > dat <- readXL("U:/RawSampleData.xls", rownames=FALSE,
> header=FALSE, na="",
> >>> >> > +   sheet="RawSampleData", stringsAsFactors=FALSE)
> >>> >> >
> >>> >> > testmessage1 <- dat[1,6]
> >>> >> >
> >>> >> > ascii_datformat <- utf8ToInt(testmessage1)
> >>> >> >
> >>> >> > Base <- ascii_datformat - 48
> >>> >> >
> >>> >> > decy <- ifelse(Base > 40, Base - 8, Base)
> >>> >> >
> >>> >> > biny <- intToBin(decy)
> >>> >> >
> >>> >> > binyframe <- data.frame(biny)
> >>> >> >
> >>> >> > tbinyframe <- paste(t(binyframe[,1]), collapse="")  #at this
> point, I have
> >>> >> > the complete first message, all in binary format
> >>> >> >
> >>> >> > #according to the literature of AIS message decoding, longitude
> goes from
> >>> >> > position 62 to position 89
> >>> >> > #and latitude goes from position 90 to position 116
> >>> >> >
> >>> >> > longitude <- substr(tbinyframe, 62, 89)
> >>> >> > latitude    <- substr(tbinyframe, 90, 116)
> >>> >> >
> >>> >> > #now I apply the function you provided me with:
> >>> >> >
> >>> >> >  fun <- function(x){
> >>> >> >          res <- sapply(x, function(y){
> >>> >> >             if(nchar(y) %% 8 != 0 || substr(y, 1, 1) == "0"){
> >>> >> >              strtoi(y, base = 2)
> >>> >> >             }else{
> >>> >> >               y <- unlist(strsplit(y, ""))
> >>> >> >               -sum((y != "1")*2^((length(y) - 1):0)) - 1
> >>> >> >             }
> >>> >> >           })
> >>> >> >           unname(res)
> >>> >> >       }
> >>> >> >
> >>> >> > > fun(longitude)
> >>> >> > [1] 220663102
> >>> >> > >
> >>> >> > > fun(latitude)
> >>> >> > [1] 5414823
> >>> >> > >
> >>> >> > > fun("1101001001110000110100111110")
> >>> >> > [1] 220663102
> >>> >> > >
> >>> >> > > fun("000010100101001111110100111")
> >>> >> > [1] 5414823
> >>> >> > >
> >>> >> > > fun("10110010")
> >>> >> > [1] -78
> >>> >> >
> >>> >> > as you can see, the function only worked or showed expected
> result on the
> >>> >> > last case with a -78, but in the other cases, it the results were
> not as
> >>> >> > expected, maybe I am missing something here?
> >>> >> >
> >>> >> > Any help and/or guidance will be greatly appreciated,
> >>> >> >
> >>> >> > Best regards,
> >>> >> >
> >>> >> > Paul
> >>> >> >
> >>> >> > El lun., 20 ene. 2020 a las 10:28, Rui Barradas (<
> ruipbarra...@sapo.pt>)
> >>> >> > escribió:
> >>> >> >
> >>> >> > > Hello,
> >>> >> > >
> >>> >> > > The function I included converts signed binary numbers into
> their
> >>> >> > > decimal representation. They are negative if a) they are
> multiples of 8
> >>> >> > > bits and b) the most significant bit is a "1". If not just
> convert to
> >>> >> > > integer.
> >>> >> > >
> >>> >> > > As for a) above, I assume that you will have 8 bit numbers. And
> the
> >>> >> > > conversion is done as follows:
> >>> >> > >
> >>> >> > > input: 10110010
> >>> >

        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to