Pogledaj na maxmind.com, imas dostupne binary fajlove za ip-country-city, kao i csv fajlove.. Upotrebio sam njihove skripte uz male izmene (trebalo je generisati 5 random cities u okviru iste US drzave iz koje je i posetilac).
Mislim da kod binary fajlova koristi specijalni algoritam, mada se nisam bas udubio u to
Evo direktan link:
http://www.maxmind.com/app/ip_locate
pa sa desne strane Free/OpenSource kolona..