private function coordinate()
    {
        // By default don't change sign
        $sign = false;

        // Match sign if cardinal direction has not been seen
        if (! ($this->nextCardinal > 0) && $this->lexer->isNextTokenAny(array(Lexer::T_PLUS, Lexer::T_MINUS))) {
            $sign = $this->sign();
        }

        // Get coordinate value
        $coordinate = $this->degrees();

        // If sign not matched determine sign from cardinal direction when required
        // or if cardinal direction is present and this is first coordinate in a pair
        if (false === $sign && ($this->nextCardinal > 0 || (null === $this->nextCardinal && $this->lexer->isNextTokenAny(array(Lexer::T_CARDINAL_LAT, Lexer::T_CARDINAL_LON))))) {
            return $this->cardinal($coordinate);
        }

        // Remember there was no cardinal direction on first coordinate
        $this->nextCardinal = -1;

        // Return value with sign if set
        return (false === $sign ? 1 : $sign) * $coordinate;
    }