• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/text/geohash.php
  • Класс: BitrixMainTextGeoHash
  • Вызов: GeoHash::encode
static function encode(array $coordinate, $length = self::MAX_LENGTH)
{
	$latitudeInterval = static::$latitudeInterval;
	$longitudeInterval = static::$longitudeInterval;

	$isEven = true;
	$bit = 0;
	$charIndex = 0;

	$geohash = '';

	while(mb_strlen($geohash) < $length)
	{
		if($isEven)
		{
			$middle = ($longitudeInterval[0] + $longitudeInterval[1]) / 2;
			if($coordinate[1] > $middle)
			{
				$charIndex |= static::$bits[$bit];
				$longitudeInterval[0] = $middle;
			}
			else
			{
				$longitudeInterval[1] = $middle;
			}
		}
		else
		{
			$middle = ($latitudeInterval[0] + $latitudeInterval[1]) / 2;
			if($coordinate[0] > $middle)
			{
				$charIndex |= static::$bits[$bit];
				$latitudeInterval[0] = $middle;
			}
			else
			{
				$latitudeInterval[1] = $middle;
			}
		}
		if($bit < 4)
		{
			$bit++;
		}
		else
		{
			$geohash .= static::$base32Chars[$charIndex];
			$bit = 0;
			$charIndex = 0;
		}
		$isEven = $isEven ? false : true;
	}

	return $geohash;
}