it-swarm.com.de

Geolocation nächstgelegener Standort (lat, long) von meiner Position

Ich möchte spezifische Informationen anzeigen, je nachdem wo ich bin.

Ich habe fünf Städte mit unterschiedlichen Informationen, und ich möchte diese Stadt (Informationen) zeigen, der ich am nächsten bin.

Wie mache ich das auf einfachste Weise mit Javascript?.

Ex.

Wenn ich die Städte lat. Lagere, so lange in einem Array

var cities = [
  ['new york', '111111', '222222', 'blablabla']
  ['boston', '111111', '222222', 'blablabla']
  ['seattle', '111111', '222222', 'blablabla']
  ['london', '111111', '222222', 'blablabla']
]

Und mit meinem aktuellen Standort (lat, long) möchte ich die Stadt, in der ich mich befinde.

20

Hier ist ein grundlegendes Codebeispiel, das HTML5-Geolocation verwendet, um die Position des Benutzers zu ermitteln. Dann ruft er NearestCity() auf und berechnet die Entfernung (km) vom Standort zu jeder Stadt. Ich gab die Haversine-Formeln weiter und verwendete stattdessen die einfacheren Pythagoras-Formeln und eine gleichwinklige Projektion, um die Krümmung in Längengraden anzupassen.

// 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]);
}
40

Mit HTML5 können Sie den Speicherort des Benutzers abrufen und dieses Beispiel mit einer Haversine-Funktion vergleichen ( Funktion hier unten genommen ):

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)
}
17
Pesulap

Sie können die Entfernung nach Breitengrad mit Ihrem Standort und den Standorten der Städte berechnen. Und finde die kürzeste und zeichne. Um zu berechnen, können Sie mehr in http://www.movable-type.co.uk/scripts/latlong.html lesen.

1
LogPi