如何将地点列入黑名单(半径500英尺)

时间:2017-07-07 22:38:21

标签: javascript

编辑:我在下面自我回答。

我之前已经提出过一个问题,但是我无法正确设置它,整个事情都被打破了。以下是地理定位脚本。我想实施某些区域的黑名单(如果可能的话,在半径500英尺内)。请向我解释如何以及在何处进行更改,因为我是JavaScript的初学者。谢谢。 (注意:页面上没有列表或字典,因为它是我的问题的一部分。)

当前代码:

<script>

2 个答案:

答案 0 :(得分:1)

给出如下黑名单结构(因为你拒绝分享有关黑名单数据的任何内容)

var blacklistedCoordinates = [
    { longitude: 0, latitude: 0},
    { longitude: 1, latitude: 10},
    { longitude: 2, latitude: 20},
    { longitude: 3, latitude: 30},
    { longitude: 4, latitude: 40}
];

您的代码,已修改

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(displayPosition, errorFunction);
} else {
    alert('It seems like Geolocation, which is required for this page, is not enabled in your browser. Please use a browser which supports it.');
}

// Success callback function
function displayPosition(pos) {   
    var mylat = pos.coords.latitude;
    var mylong = pos.coords.longitude;
    var thediv = document.getElementById('locationinfo');
    thediv.innerHTML = '<p>Your longitude is :' + mylong + ' and your latitide is ' + mylat + '</p>';
    // additional code to output blacklist locations within 500ft
    blacklistedCoordinates
    .filter(black => calcCrow(black, pos.coords) < 500)
    .forEach(black => { // output blacklisted locations
        thediv.innerHTML = '<p>Blacklisted longitude is :' + black.longitude + ' and latitide is ' + black.latitude + '</p>';
    });
}
// Error callback function
function errorFunction(pos) {
    alert('Error!');
}
来自https://stackoverflow.com/a/28673693/5053002

代码 - 修改为返回脚

function calcCrow(coords1, coords2) {
    const toRad = value => value * Math.PI / 180;
    const R = 20.90223164; // work in feet
    const dLat = toRad(coords2.latitude - coords1.latitude);
    const dLon = toRad(coords2.longitude - coords1.longitude);
    const lat1 = toRad(coords1.latitude);
    const lat2 = toRad(coords2.latitude);

    const a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2); 
    const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    const d = R * c;
    return d;
}

答案 1 :(得分:0)

感谢Jaramoda for awenser,它为最终解决方案做出了贡献。 首先,用于计算径向坐标的代码被打破,我决定用原始代码替换它并进行更改,以便它可以与我当前的代码一起使用:

function calcCrow(coords1, coords2)
{
  // var R = 6.371; // km
  var R = 6371000;
  var dLat = toRad(coords2.latitude - coords1.latitude);
  var dLon = toRad(coords2.longitude - coords1.longitude);
  var lat1 = toRad(coords1.latitude);
  var lat2 = toRad(coords2.latitude);

  var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
    Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2); 
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
  var d = R * c;
  return d;
}

我将它连接到同一区域,并将其指定为250米(270码?) 我当然需要修改价值以获得更理想的距离。

接下来,我在没有字典中的坐标的情况下测试它,它没有返回任何东西(一件好事,这是之前的问题)。然后我输入了坐标,它工作正常。

这花了将近一天的时间才找出问题的根源,虽然现在看来很明显xD