javascript - 如何使用 json 数据中的纬度和经度查找最近的位置

标签 javascript html json geolocation

我正在尝试制作一个网站,询问用户的位置,然后使用 GeoLocation 找到离它的位置最近的位置(半径 100 米),并以 HTML 格式显示结果。

我尝试过的。

$.getJSON("places.json", function (data) {
        for (var i = 0; i < data.length; i++) {
            if ((data[i].lat - poslat) > 0.00200 || (data[i].lng - poslng) > 0.00200) {
            return data[i];
        }

        html += '<p>' + data[i].location + ' - ' + data[i].code + '</p>';
        $('#nearbystops').append(html);
    }
});

places.json

[
{
"code": "0001",
"lat": "1.28210155945393",
"lng": "103.81722480263163",
"location": "Stop 1"
},
{
"code": "0003",
"lat": "1.2777380589964",
"lng": "103.83749709165197",
"location": "Stop 2"
},
{
"code": "0002",
"lat": "1.27832046633393",
"lng": "103.83762574759974",
"location": "Stop 3"
}
]

提前致谢! :)

最佳答案

要计算两个坐标之间的距离,您不能只减去这些值。很好,但它会为您提供正方形内的坐标。这可能是合适的,但大多数人确实倾向于按半径搜索位置。这个函数会做到这一点......

function distance(lat1, lon1, lat2, lon2, unit) {
    var radlat1 = Math.PI * lat1/180
    var radlat2 = Math.PI * lat2/180
    var theta = lon1-lon2
    var radtheta = Math.PI * theta/180
    var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
    if (dist > 1) {
        dist = 1;
    }
    dist = Math.acos(dist)
    dist = dist * 180/Math.PI
    dist = dist * 60 * 1.1515
    if (unit=="K") { dist = dist * 1.609344 }
    if (unit=="N") { dist = dist * 0.8684 }
    return dist
}

这是我从这里复制的一段普通代码......

https://www.geodatasource.com/developers/javascript

它在这里,用在你的例子中......

function distance(lat1, lon1, lat2, lon2, unit) {
  var radlat1 = Math.PI * lat1/180
  var radlat2 = Math.PI * lat2/180
  var theta = lon1-lon2
  var radtheta = Math.PI * theta/180
  var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
  if (dist > 1) {
    dist = 1;
  }
  dist = Math.acos(dist)
  dist = dist * 180/Math.PI
  dist = dist * 60 * 1.1515
  if (unit=="K") { dist = dist * 1.609344 }
  if (unit=="N") { dist = dist * 0.8684 }
  return dist
}

var data = [{
    "code": "0001",
    "lat": "1.28210155945393",
    "lng": "103.81722480263163",
    "location": "Stop 1"
}, {
    "code": "0003",
    "lat": "1.2777380589964",
    "lng": "103.83749709165197",
    "location": "Stop 2"
}, {
    "code": "0002",
    "lat": "1.27832046633393",
    "lng": "103.83762574759974",
    "location": "Stop 3"
}];

var html = "";
var poslat = 1.28210155945393;
var poslng = 103.81722480263163;

for (var i = 0; i < data.length; i++) {
    // if this location is within 0.1KM of the user, add it to the list
    if (distance(poslat, poslng, data[i].lat, data[i].lng, "K") <= 0.1) {
        html += '<p>' + data[i].location + ' - ' + data[i].code + '</p>';
    }
}

$('#nearbystops').append(html);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="nearbystops"></div>

关于javascript - 如何使用 json 数据中的纬度和经度查找最近的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51819224/

相关文章:

javascript - 如果定义了变量,请执行某些操作

javascript - 在ajax中调用beforeSend成功

javascript - document.getElementById 不适用于 Firefox

javascript - 确认 href 链接

jquery - 需要包裹指定内容

c# - ServiceStack.Text 没有按预期序列化我的对象

javascript - 使用 WAMP,MySQL 通过 ajax 调用的 PHP 脚本中的 UPDATE 命令不会更新

javascript - 从id里面的id获取内容?

Java:返回与一个 JSON 对象相同类型的值

xcode - 将可变字典添加到可变字典以转换为 JSON