Geonames должен хорошо справиться с этой задачей:
http://www.geonames.org/
У них также есть библиотека php.