code: public static LatLong decodeHash(String geohash) {
          Preconditions.checkNotNull(geohash, "geohash cannot be null");
          boolean isEven = true;
          double[] lat = new double[2];
          double[] lon = new double[2];
          lat[0] = -90.0;
          lat[1] = 90.0;
          lon[0] = -180.0;
          lon[1] = 180.0;
  
          for (int i = 0; i < geohash.length(); i++) {
              char c = geohash.charAt(i);
              int cd = BASE32.indexOf(c);
              for (int j = 0; j < 5; j++) {
                  int mask = BITS[j];
                  if (isEven) {
                      refineInterval(lon, cd, mask);
                  } else {
                      refineInterval(lat, cd, mask);
                  }
                  isEven = !isEven;
              }
          }
          double resultLat = (lat[0] + lat[1]) / 2;
          double resultLon = (lon[0] + lon[1]) / 2;
  
          return new LatLong(resultLat, resultLon);
      }
docs: Distributed under the MIT License