Javascript 地理定位到 10 米以内
Posted
技术标签:
【中文标题】Javascript 地理定位到 10 米以内【英文标题】:Javascript Geolocation to within 10 meters 【发布时间】:2018-10-17 14:01:30 【问题描述】:window.onload = function()
var startPos;
navigator.geolocation.watchPosition(function(position)
startPos = position;
document.getElementById('startLat').innerhtml = startPos.coords.latitude;
document.getElementById('startLon').innerHTML = startPos.coords.longitude;
var a = lat: 40.6, lng: -70.4
var b = lat: startPos.coords.latitude, lon: startPos.coords.longitude
zone = haversineDistance(a,b);
document.getElementById('zone').innerHTML = zone;
if(zone < 50)
document.getElementById('inout').innerHTML = 'IN';
else
document.getElementById('inout').innerHTML = 'OUT';
);
;
var atan2 = Math.atan2
var cos = Math.cos
var sin = Math.sin
var sqrt = Math.sqrt
var PI = Math.PI
// (mean) radius of Earth (meters)
var R = 6378137
function squared (x) return x * x
function toRad (x) return x * PI / 180.0
function haversineDistance (a, b)
var aLat = a.latitude || a.lat
var bLat = b.latitude || b.lat
var aLng = a.longitude || a.lng || a.lon
var bLng = b.longitude || b.lng || b.lon
var dLat = toRad(bLat - aLat)
var dLon = toRad(bLng - aLng)
var f = squared(sin(dLat / 2.0)) + cos(toRad(aLat)) * cos(toRad(bLat)) * squared(sin(dLon / 2.0))
var c = 2 * atan2(sqrt(f), sqrt(1 - f))
return R * c
我在网上找到了这段代码,它运行良好我只是希望能够向对象添加多个位置,并且在位置警报的 10 米范围内。不太确定如何开始任何帮助都会很棒,
【问题讨论】:
【参考方案1】:这不是您可以解决问题的答案,但我会引导您朝着正确的方向前进,我相信您可以解决这个问题。
你的问题:
首先,正如您已经提到的,这段代码是一个很好的开始基础。 您描述了两个目标:
-
拥有多个位置
如果它们距离每个距离不超过 10 米,则发出警报
其他
一个接一个地解决
问题:您可能应该使用array
来存储您的多个位置。
这可能看起来像这样:
var locations = [ lat: 12.314, long: 0.125, lat: 12.314, long: 0.125 ]
要了解有关数组和基本 javascript 的更多信息,我建议查看 here
问题:
你已经解决了这个复杂的部分。你可以只使用
function haversineDistance
计算两个位置之间的距离。因此,您在这里要做的只是将您获得的每个新位置与所有当前存在的位置进行比较,并使用alert()
之类的东西来发出警报。
如果你愿意,我建议使用swal,但这与我的口味无关,我与这个项目无关。
但没有什么比玩弄了解该语言并学习更好的了。
【讨论】:
完美,我不希望答案只是一些正确方向的建议。谢谢! 不客气!如果您能接受这个答案,我将不胜感激:)以上是关于Javascript 地理定位到 10 米以内的主要内容,如果未能解决你的问题,请参考以下文章
HTML5 地理定位精度 Android 与 iOS 非常不同