An interesting drawback to the location-by-IP-address approach is that for cellular devices, IP addresses can be supremely inaccurate. For example, I have a Verizon device whose IP address places me way off in the West coast of the US even though I purchased it and reside on the East coast, 3000 miles away. The approach is pretty solid for LAN/WiFi, though.