Geolocation closest location(lat, long) from my position

前端 未结 3 1785
感情败类
感情败类 2020-11-30 21:23

I want to show specific information depending on where i am.

I have five cities with different information, and i want to show that city(information) that i\'m close

相关标签:
3条回答
  • 2020-11-30 22:02

    With HTML5, you can pull the location of the user and then compares this example using a Haversine function (function below taken from here):

    function getDistanceFromLatLonInKm(lat1,lon1,lat2,lon2) {
      var R = 6371; // Radius of the earth in km
      var dLat = deg2rad(lat2-lat1);  // deg2rad below
      var dLon = deg2rad(lon2-lon1); 
      var a = 
        Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * 
        Math.sin(dLon/2) * Math.sin(dLon/2)
        ; 
      var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
      var d = R * c; // Distance in km
      return d;
    }
    
    function deg2rad(deg) {
      return deg * (Math.PI/180)
    }
    
    0 讨论(0)
  • 2020-11-30 22:05

    You can calculate the distance by latitude with your location and the cities locations. And find the shortest and draw. To calculate you can read more in http://www.movable-type.co.uk/scripts/latlong.html

    0 讨论(0)
  • 2020-11-30 22:15

    Here is a basic code example using HTML5 geolocation to get the user's position. It then calls NearestCity() and calculates the distance (km) from the location to each city. I passed on using the Haversine formulae and instead used the simpler Pythagoras formulae and an equirectangular projection to adjust for the curvature in longitude lines.

    // Get User's Coordinate from their Browser
    window.onload = function() {
      // HTML5/W3C Geolocation
      if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(UserLocation);
      }
      // Default to Washington, DC
      else
        NearestCity(38.8951, -77.0367);
    }
    
    // Callback function for asynchronous call to HTML5 geolocation
    function UserLocation(position) {
      NearestCity(position.coords.latitude, position.coords.longitude);
    }
    
    
    // Convert Degress to Radians
    function Deg2Rad(deg) {
      return deg * Math.PI / 180;
    }
    
    function PythagorasEquirectangular(lat1, lon1, lat2, lon2) {
      lat1 = Deg2Rad(lat1);
      lat2 = Deg2Rad(lat2);
      lon1 = Deg2Rad(lon1);
      lon2 = Deg2Rad(lon2);
      var R = 6371; // km
      var x = (lon2 - lon1) * Math.cos((lat1 + lat2) / 2);
      var y = (lat2 - lat1);
      var d = Math.sqrt(x * x + y * y) * R;
      return d;
    }
    
    var lat = 20; // user's latitude
    var lon = 40; // user's longitude
    
    var cities = [
      ["city1", 10, 50, "blah"],
      ["city2", 40, 60, "blah"],
      ["city3", 25, 10, "blah"],
      ["city4", 5, 80, "blah"]
    ];
    
    function NearestCity(latitude, longitude) {
      var minDif = 99999;
      var closest;
    
      for (index = 0; index < cities.length; ++index) {
        var dif = PythagorasEquirectangular(latitude, longitude, cities[index][1], cities[index][2]);
        if (dif < minDif) {
          closest = index;
          minDif = dif;
        }
      }
    
      // echo the nearest city
      alert(cities[closest]);
    }
    
    0 讨论(0)
提交回复
热议问题