Вы можете использовать Google Map / Geocoding API, вот небольшая демонстрация:
<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script type="text/javascript">
alert(google.loader.ClientLocation.address.city);
</script>
http://jsfiddle.net/zwPvs/1/
edit : Поскольку пользователь общается напрямую с серверами Google, вам даже не нужно передавать IP-адрес, они это выясняют. Они могут даже использовать некоторые дополнительные точки данных за пределами IP-адреса, но не уверены.