#!perl =head1 NAME GMapPolylineUtil - helper-functions for putting paths on Google Maps =head1 AUTHOR David Lee Lambert =cut package GMapPolylineUtil; use POSIX; sub _enc_one ($) { local ($x, $xx, $j, $i, $_); $x = $_[0]; $xx = int(floor($x * 1e5)); $xx <<= 1; $xx = ~$xx if $x < 0.0; for ($j=6; $j>=0; $j--) { last if ((($xx >> (5*$j))&0x1F)); } $j=0 if $j==-1; for ($i=0 ; $i<=$j ; $i++) { $_ .= chr( 63 + (($xx >> (5*$i))&0x1F) + (($i==$j) ? 0x0 : 0x20) ); } return $_; } sub _enc_seq(@) { return join('',map { _enc_one($_) } @_); } sub encode(@) { return _enc_seq( map { $_<2 ? $_[$_] : $_[$_] - $_[$_-2] } 0..$#_ ); } sub encode_arrrefs { return encode( map { @$_ } @_ ); } sub encode_hashrefs { local $_ = ''; return encode( map { ( $_->{'latitude'} || $_->{'lat'} || $_->{'y'}, $_->{'longitude'}|| $_->{'lon'} || $_->{'x'} ) } @_ ); } return 1;