Тема довольно сложная, даже крупные сервисы грешат неправильным определением координат (тот же Google с невероятными возможностями иногда меня в другие города закидывает).
Я решал к тому же вопрос как автономной системы с регулярными обновлениями, так и онлайн версии. У меня на практике вышло примерно такое:
1. Вначале прокатываю по базе
ipgeobase.ru, они действительно хороши по России и Украине. Не безгрешны, но гораздо лучше того же MaxMind (который содержит города вроде Ulitsa Leninya и т.п.).
2. Дальше, если IP не в той базе, то MaxMind. Он не плох по зарубежью.
3. В качестве вспомогательной обратите внимание на
ipdip.org (я использую их выгрузки для автономного определения провайдера) и
ipinfodb.com, у них неплохое стабильное API и можно выгрузить базу.