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