Google IP Geolocation API [closed] Google IP Geolocation API [closed] php php

Google IP Geolocation API [closed]


If you don't want to use HTML5 style client-enabled GeoIP information, you are going to need a GeoIP database like MaxMind's GeoIP Lite database, which is free and works well for 99% of use cases. Any other service with more accurate/detailed information is going to cost you a lot of money. MaxMind is praises by many people and works well for my needs, personally. It can give you Country/Region/City/Latitude-Longitude-Coordinates/Continent information.


You can use Google's geolocation API to get the lat and lon based on the user's IP address:

  var apiKey = "Your Google API Key";  function findLatLonFromIP() {    return new Promise((resolve, reject) => {      $.ajax({        url: `https://www.googleapis.com/geolocation/v1/geolocate?key=${apiKey}`,        type: 'POST',        data: JSON.stringify({considerIp: true}),        contentType: 'application/json; charset=utf-8',        dataType: 'json',        success: (data) => {          if (data && data.location) {            resolve({lat: data.location.lat, lng: data.location.lng});          } else {            reject('No location object in geolocate API response.');          }        },        error: (err) => {          reject(err);        },      });    });  }

Then you can use these coordinates to get the address of the user using the geocoding API. Here is an example that returns the country:

  function getCountryCodeFromLatLng(lat, lng) {    return new Promise((resolve, reject) => {      $.ajax({        url: `https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${apiKey}`,        type: 'GET',        data: JSON.stringify({considerIp: true}),        dataType: 'json',        success: (data) => {          console.log('reverse geocode:', data.results[0].address_components);          data.results.some((address) => {            address.address_components.some((component) => {              if (component.types.includes('country')) {                return resolve(component.short_name);              }            });          });          reject('Country not found in location information.');        },        error: (err) => {          reject(err);        },      });    });  }

Above, just look through the data.results to find the information you need (City, Street, Country etc...)Use these two functions above together:

findLatLonFromIP().then((latlng) => {  return getCountryCodeFromLatLng(latlng.lat, latlng.lng);}).then((countryCode) => {  console.log('User\'s country Code:', countryCode);});


You can use Google's geocoding API to get a real address for a location but the inputs required for that API are the latitude and longitude coordinates.

Example:http://maps.googleapis.com/maps/api/geocode/json?latlng=43.473,-82.533&sensor=false

You need to find and IP to Location API from some other vendor to get to a city level or keep the option to prompt them to grant you access for their geolocation.

IPInfoDB does a pretty good job at automatically narrowing down the location via IP without use input:

http://ipinfodb.com/ip_location_api.php