<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
 var rad = function(x) {
  return x * Math.PI / 180;
 };

 var getDistance = function(p1, p2) {
  var R = 6378137; // Earth’s mean radius in meter
  var dLat = rad(p2.lat() - p1.lat());
  var dLong = rad(p2.lng() - p1.lng());
  var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
    Math.cos(rad(p1.lat())) * Math.cos(rad(p2.lat())) *
    Math.sin(dLong / 2) * Math.sin(dLong / 2);
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
  var d = R * c;
  return d; // returns the distance in meter
 };

 const fetchCoordinates = async (city1, city2) => {
  try{
   const res = await Promise.all([
    axios.get("http://api.openweathermap.org/geo/1.0/direct?q={city1}&limit=1&appid={API key}"),
    axios.get("http://api.openweathermap.org/geo/1.0/direct?q={city2}&limit=1&appid={API key}")
   ]);
   const data = res.map((res) => res.data);
   city1 = {data.flat()[0].lat, data.flat()[0].lon};
   city2 = {data.flat()[1].lat, data.flat()[1].lon};
   return getDistance(city1, city2);
  } catch {
   throw Error("Promise failed");
  }
 }
 const distance = fetchCoordinates('London', 'Delhi');
 console.log(distance);
</script>

Built With

Share this project:

Updates