#!perl use 5.012; # strict, // use warnings; use Data::Dump qw/dd/; $Data::Dump::TRY_BASE64 = 0; my $geo = do { local $/ = undef; # slurp local $\ = "\n"; pack '(H2)*', split ' ', ; }; my ($magic,$ver,$flag,$SRSID) = unpack 'nCCV', substr($geo,0,8); printf "0x%04x v=%d f=%08b srsid=%d\n", $magic,$ver,$flag,$SRSID; my $biglittle = ($flag & 0x1); # 1 means little my $eee = ($flag & 0xE)>>1; my $envelope_count = (0,4,6,6,8)[$eee] // die "eee=$eee values 5-7 invalid"; my $unpack_str = "d" . ($biglittle ? '<' : '>') . $envelope_count; printf "envelope#%s -> %d elements, mode=%s-endian => '%s'\n", $eee, $envelope_count, (qw/big little/)[$biglittle], $unpack_str; my @envelope = unpack $unpack_str, substr($geo, 8, 8*$envelope_count); local $" = ", "; print "@envelope\n"; __DATA__ 47 50 00 05 34 6c 00 00 a0 70 3d 0a a6 be 14 41 00 2b 87 96 97 c9 14 41 20 b2 9d 6f 1a 03 1b 41 e0 ce f7 53 e7 0d 1b 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 ed 03 00 00 04 00 00 00 01 ea 03 00 00 0a 00 00 00 40 8b 6c e7 16 c1 14 41 20 87 16 d9 12 07 1b 41 00 00 00 00 00 00 00 00 90 6e 12 83 bf c1 14 41 40 62 10 d8 35 07 1b 41 00 00 00 00 00 00 00 00 90 ed 7c bf 18 c2 14 41 40 35 5e 3a 64 07 1b 41 00 00 00 00 00 00 00 00 a0 c4 20 b0 79 c2 14 41 00 fe d4 78 c3 07 1b 41 00 00 00 00 00 00 00 00 a0 9b c4 a0 1a c3 14 41 a0 47 e1 fa ab 08 1b 41 00 00 00 00 00 00 00 00 40 60 e5 d0 86 c4 14 41 c0 cc cc 4c 3e 09 1b 41 00 00 00 00 00 00 00 00 50 37 89 41 87 c6 14 41 00 2b 87 96 a0 0a 1b 41 00 00 00 00 00 00 00 00 a0 45 b6 f3 a5 c6 14 41 00 ac 1c da da 0a 1b 41 00 00 00 00 00 00 00 00 90 ed 7c bf a0 c6 14 41 00 d5 78 e9 a9 0b 1b 41 00 00 00 00 00 00 00 00 80 6a bc f4 61 c7 14 41 80 be 9f 1a 38 0c 1b 41 00 00 00 00 00 00 00 00 01 ea 03 00 00 04 00 00 00 40 8b 6c e7 16 c1 14 41 20 87 16 d9 12 07 1b 41 00 00 00 00 00 00 00 00 c0 20 b0 72 61 bf 14 41 e0 fb a9 f1 78 05 1b 41 00 00 00 00 00 00 00 00 90 97 6e 92 a7 be 14 41 20 5c 8f 42 5f 03 1b 41 00 00 00 00 00 00 00 00 a0 70 3d 0a a6 be 14 41 20 b2 9d 6f 1a 03 1b 41 00 00 00 00 00 00 00 00 01 ea 03 00 00 02 00 00 00 a0 70 3d 8a 8d c8 14 41 80 95 43 8b ea 0c 1b 41 00 00 00 00 00 00 00 00 00 2b 87 96 97 c9 14 41 e0 ce f7 53 e7 0d 1b 41 00 00 00 00 00 00 00 00 01 ea 03 00 00 02 00 00 00 80 6a bc f4 61 c7 14 41 80 be 9f 1a 38 0c 1b 41 00 00 00 00 00 00 00 00 a0 70 3d 8a 8d c8 14 41 80 95 43 8b ea 0c 1b 41 00 00 00 00 00 00 00 00 #### 0x4750 v=0 f=00000101 srsid=27700 envelope#2 -> 6 elements, mode=little-endian => 'd<6' 339881.51, 340581.897, 442566.608999999, 443257.832, 0, 0