There is a difference between sending the user to a country-specific site, and choosing a language.
Which is your intention here?
Country-specific sites are something you can sensibly default with geolocation, though you may still need to give an option to persistently override it using cookie or user profile as the other posters have suggested. An example of this is google.com redirecting me to google.co.nz based on my location - still in English. (Getting sidetracked: they actually don't let me override it once I'm at google.co.nz, maybe because my google profile knows my location and language; some of the other sites such as google.co.jp DO have a magic 'In English' link back to google.com which does not then auto-redirect.)
Setting language should certainly not use geolocation, maybe not even as a fallback. It's extremely rude to assume someone wants to see, say, British English or Japanese just because they're currently in London or Tokyo. Better information is almost always going to be available from the browser headers; when it's not, I'd suggest it's better to have a 'select your language' landing page if there's no cookie, rather than defaulting with geolocation.