Javascript 地理位置距离我的位置最近的位置(纬度,经度)

Javascript 地理位置距离我的位置最近的位置(纬度,经度),javascript,jquery,html,geolocation,Javascript,Jquery,Html,Geolocation,我想根据我所在的位置显示具体信息 我有五个城市有不同的信息,我想展示我最接近的城市(信息) 如何使用javascript以最简单的方式实现这一点 前 如果我将城市存储为lat,long的数组 var cities = [ ['new york', '111111', '222222', 'blablabla'] ['boston', '111111', '222222', 'blablabla'] ['seattle', '111111', '222222', 'blablabla'

我想根据我所在的位置显示具体信息

我有五个城市有不同的信息,我想展示我最接近的城市(信息)

如何使用javascript以最简单的方式实现这一点

如果我将城市存储为lat,long的数组

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

根据我目前的位置(纬度,经度),我想要我最接近的城市。

你可以根据你所在的位置和城市的位置,按纬度计算距离。找到最短的,然后画。为了计算您可以在HTML5中阅读更多内容,您可以提取用户的位置,然后使用Haversine函数()比较此示例:


下面是一个使用HTML5地理位置获取用户位置的基本代码示例。然后它调用
NearestCity()
,并计算从该位置到每个城市的距离(km)。我不再使用哈弗森公式,而是使用更简单的毕达哥拉斯公式和等矩形投影来调整经线的曲率

// 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]);
}
//从浏览器中获取用户坐标
window.onload=函数(){
//HTML5/W3C地理定位
if(导航器.地理位置){
navigator.geolocation.getCurrentPosition(UserLocation);
}
//默认为华盛顿特区
其他的
最近的城市(38.8951,-77.0367);
}
//用于异步调用HTML5地理位置的回调函数
功能用户位置(位置){
最近的城市(位置.坐标.纬度,位置.坐标.经度);
}
//将度转换为弧度
功能Deg2Rad(度){
返回度*数学PI/180;
}
函数勾股矩形(lat1,lon1,lat2,lon2){
lat1=Deg2Rad(lat1);
lat2=Deg2Rad(lat2);
lon1=Deg2Rad(lon1);
lon2=Deg2Rad(lon2);
var R=6371;//km
变量x=(lon2-lon1)*数学cos((lat1+lat2)/2);
变量y=(lat2-lat1);
var d=数学sqrt(x*x+y*y)*R;
返回d;
}
var lat=20;//用户纬度
var lon=40;//用户经度
var城市=[
[“城市1”、10、50、“诸如此类”],
[“城市2”、40、60、“诸如此类”],
[“城市3”、25、10、“诸如此类”],
[“城市4”、5、80、“诸如此类”]
];
最靠近城市的功能(纬度、经度){
var minDif=99999;
var最近;
对于(索引=0;索引
尚未尝试任何操作,只是检查是否可行。请注意,以下行中有一个输入错误:var dif=pythagorasequirectangle(lat,lon,cities[index][1],cities[index][2]);应为var dif=毕达哥拉斯矩形(纬度、经度、城市[指数][1],城市[指数][2])@肯尼特-谢谢你让我知道打字错误。我在答案中修正了它。是令人惊叹的。谢谢@Andrew OpenGeocode这太棒了。我想修改它,列出可能最近的三个位置。有人能详细解释一下这个代码是如何工作的吗?
// 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]);
}