no, ## 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
at a minimum, collect this as character values, not factors. On Sat, Jan 25, 2020 at 4:14 PM Paul Bernal <paulberna...@gmail.com> wrote: > > 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 >> >>> > ______________________________________________ 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.