Your best bet is html5 geolocation + modernizr.js + a shim. Browsers that support html5 geolocation will return highly accurate results while those that don't support it will fall back to calling the google maps api (ip to geo).
The opt-in button is messy but results are very precise and reliable. Some use cases warrant it, some do not. Maxmind claims 79% accuracy on a city level: is the google api worse? All other things being equal I would be inclined to pick the one that didn't require me to frequently install binary patches or update a database.
I added in support for http://ipinfodb.com/ (see bottom of README) which might be better than Google's api, although you need to register for an API key.
You might want to give that a shot.
Is there a free reliable precise geolocation service that can take as many hits as a script like this could throw at it?