public static function decode($hash)
    {
        $minlng = -180;
        $maxlng = 180;
        $minlat = -90;
        $maxlat = 90;

        for ($i=0,$c=strlen($hash); $i<$c; $i++) {
            $v = strpos(self::$table, $hash[$i]);
            if (1&$i) {
                if (16&$v) {
                    $minlat = ($minlat + $maxlat) / 2;
                } else {
                    $maxlat = ($minlat + $maxlat) / 2;
                }
                if (8&$v) {
                    $minlng = ($minlng + $maxlng) / 2;
                } else {
                    $maxlng = ($minlng + $maxlng) / 2;
                }
                if (4&$v) {
                    $minlat = ($minlat + $maxlat) / 2;
                } else {
                    $maxlat = ($minlat + $maxlat) / 2;
                }
                if (2&$v) {
                    $minlng = ($minlng + $maxlng) / 2;
                } else {
                    $maxlng = ($minlng + $maxlng) / 2;
                }
                if (1&$v) {
                    $minlat = ($minlat + $maxlat) / 2;
                } else {
                    $maxlat = ($minlat + $maxlat) / 2;
                }
            } else {
                if (16&$v) {
                    $minlng = ($minlng + $maxlng) / 2;
                } else {
                    $maxlng = ($minlng + $maxlng) / 2;
                }
                if (8&$v) {
                    $minlat = ($minlat + $maxlat) / 2;
                } else {
                    $maxlat = ($minlat + $maxlat) / 2;
                }
                if (4&$v) {
                    $minlng = ($minlng + $maxlng) / 2;
                } else {
                    $maxlng = ($minlng + $maxlng) / 2;
                }
                if (2&$v) {
                    $minlat = ($minlat + $maxlat) / 2;
                } else {
                    $maxlat = ($minlat + $maxlat) / 2;
                }
                if (1&$v) {
                    $minlng = ($minlng + $maxlng) / 2;
                } else {
                    $maxlng = ($minlng + $maxlng) / 2;
                }
            }
        }

        return array($minlng, $maxlng, $minlat, $maxlat);
    }
public static function decode($hash)
    {
        $minlng = -180;
        $maxlng = 180;
        $minlat = -90;
        $maxlat = 90;

        for ($i=0,$c=strlen($hash); $i<$c; $i++) {
            $v = strpos(self::$table, $hash[$i]);
            if (1&$i) {
                if (16&$v) {
                    $minlat = ($minlat + $maxlat) / 2;
                } else {
                    $maxlat = ($minlat + $maxlat) / 2;
                }
                if (8&$v) {
                    $minlng = ($minlng + $maxlng) / 2;
                } else {
                    $maxlng = ($minlng + $maxlng) / 2;
                }
                if (4&$v) {
                    $minlat = ($minlat + $maxlat) / 2;
                } else {
                    $maxlat = ($minlat + $maxlat) / 2;
                }
                if (2&$v) {
                    $minlng = ($minlng + $maxlng) / 2;
                } else {
                    $maxlng = ($minlng + $maxlng) / 2;
                }
                if (1&$v) {
                    $minlat = ($minlat + $maxlat) / 2;
                } else {
                    $maxlat = ($minlat + $maxlat) / 2;
                }
            } else {
                if (16&$v) {
                    $minlng = ($minlng + $maxlng) / 2;
                } else {
                    $maxlng = ($minlng + $maxlng) / 2;
                }
                if (8&$v) {
                    $minlat = ($minlat + $maxlat) / 2;
                } else {
                    $maxlat = ($minlat + $maxlat) / 2;
                }
                if (4&$v) {
                    $minlng = ($minlng + $maxlng) / 2;
                } else {
                    $maxlng = ($minlng + $maxlng) / 2;
                }
                if (2&$v) {
                    $minlat = ($minlat + $maxlat) / 2;
                } else {
                    $maxlat = ($minlat + $maxlat) / 2;
                }
                if (1&$v) {
                    $minlng = ($minlng + $maxlng) / 2;
                } else {
                    $maxlng = ($minlng + $maxlng) / 2;
                }
            }
        }

        return array($minlng, $maxlng, $minlat, $maxlat);
    }
public static function decode ( $ hash ) { $ minlng = - 180 ; $ maxlng = 180 ; $ minlat = - 90 ; $ maxlat = 90 ; for ( $ i = 0 , $ c = strlen ( $ hash ) ; $ i < $ c ; $ i ++ ) { $ v = strpos ( self :: $ table , $ hash [ $ i ] ) ; if ( 1 & $ i ) { if ( 16 & $ v ) { $ minlat = ( $ minlat + $ maxlat ) / 2 ; } else { $ maxlat = ( $ minlat + $ maxlat ) / 2 ; } if ( 8 & $ v ) { $ minlng = ( $ minlng + $ maxlng ) / 2 ; } else { $ maxlng = ( $ minlng + $ maxlng ) / 2 ; } if ( 4 & $ v ) { $ minlat = ( $ minlat + $ maxlat ) / 2 ; } else { $ maxlat = ( $ minlat + $ maxlat ) / 2 ; } if ( 2 & $ v ) { $ minlng = ( $ minlng + $ maxlng ) / 2 ; } else { $ maxlng = ( $ minlng + $ maxlng ) / 2 ; } if ( 1 & $ v ) { $ minlat = ( $ minlat + $ maxlat ) / 2 ; } else { $ maxlat = ( $ minlat + $ maxlat ) / 2 ; } } else { if ( 16 & $ v ) { $ minlng = ( $ minlng + $ maxlng ) / 2 ; } else { $ maxlng = ( $ minlng + $ maxlng ) / 2 ; } if ( 8 & $ v ) { $ minlat = ( $ minlat + $ maxlat ) / 2 ; } else { $ maxlat = ( $ minlat + $ maxlat ) / 2 ; } if ( 4 & $ v ) { $ minlng = ( $ minlng + $ maxlng ) / 2 ; } else { $ maxlng = ( $ minlng + $ maxlng ) / 2 ; } if ( 2 & $ v ) { $ minlat = ( $ minlat + $ maxlat ) / 2 ; } else { $ maxlat = ( $ minlat + $ maxlat ) / 2 ; } if ( 1 & $ v ) { $ minlng = ( $ minlng + $ maxlng ) / 2 ; } else { $ maxlng = ( $ minlng + $ maxlng ) / 2 ; } } } return array ( $ minlng , $ maxlng , $ minlat , $ maxlat ) ; }
decode a geohash string to a geographical area

@var $hash string geohash
@return array array($minlng, $maxlng, $minlat, $maxlat);
decode a geohash string to a geographical area