Why not group people into free-form clusters based on user density? So, if you have 5 people that are effectively in the same building, and 3 people that are outside of it in various directions, group those 3 into the 5. This has the effect of forming virtual chat rooms that come and go.
How about a 1 mile (square) zone, rather than 1 mile away from you? So you just cut everything up into mile-square slices, and you can talk with everyone in your slice... Concept is basically the same, but should overcome that issue.