I saw this interesting question a long time ago. Today I decided to answer it. I think practically this can't be very accurately (in time and location) solved and will never be totally secure because in practice always be some tricks to bypass the mechanism but here are a few thoughts.
A few words about time locking. The difficult characteristic here is the deniability attribute after a specific point in time. I can easily see this being implemented as a Smart Contract in a Distributed Blockchain.
Now a few words about location locking. The difficult part about location locking is that anything related to radio communications is transmitted freely in the air and can be manipulated. The most location bounded method I can think is the Wifi fingerprinting. I know that there exist databases online with a wordwide list of WiFi networks and their details but I don't think there exists a list of WiFi networks' signal strength in a random point.
Now here comes the tricky part. The fingerprint of the location will start to change if you move away from the spot, but it will not change drastically if you move a few meters. We want to retain this information, so we need to use Locality Sensitive Hash Function to hash the fingerprint. But we have to keep in mind that the the result of LSH is really different from one coming from a cryptographic hash function because they lack the avalanche effect. So we will use a KDF to extract high entropy from a low entropy source.
The rest of the process is pretty simple, we use some kind of symmetric encryption to encrypt the time lock puzzle challenge, so in order for someone to have access to it he should first be able to get the correct asymmetric key which will be feasible if he gets the correct location_fingerprint.
An important note here is that we will need an exponentian S-curve for the LSH, similar to this one :
Bellow there is the smart contract pseudocode.
Smart Contract Pseudocode:
if time.now() <= time_limit:
symmetric_key = kdf(input.location_fingerprint).get_key()
time_lock_puzzle = symmetric_scheme
.decrypt(symmetrically_encrypted_puzzle, symmetric_key)
if solve_time_puzzle(time_lock_puzzle, input.time_lock_puzzle_solution):
transact(x_amout, to_this_address)