I always thought a reasonable solution to this problem was triangulating via wifi and bluetooth signal strength from access points of known location. I tried it as a weekend project a few years ago but random fading was a killer and I never got it to work that well. Seems like it should be possible though. Are there good reasons not to do it this way?