Javascript 地理定位计算距离为0?
我已经为此工作了一段时间,它整天都在给我制造麻烦。我现在真的陷入了困境,不知道下一步该去哪里。我要指出,我对Javascript非常陌生,所以这可能是一个noob错误 无论如何,它的总体目标是检查用户当前位置,然后检查他们是否在目标坐标的200米半径内。当我输入当前坐标时,它会在OnInterval函数中运行警报,但如果它们位于200米半径内,则不会运行警报 有人知道如何解决这个问题吗XJavascript 地理定位计算距离为0?,javascript,geolocation,Javascript,Geolocation,我已经为此工作了一段时间,它整天都在给我制造麻烦。我现在真的陷入了困境,不知道下一步该去哪里。我要指出,我对Javascript非常陌生,所以这可能是一个noob错误 无论如何,它的总体目标是检查用户当前位置,然后检查他们是否在目标坐标的200米半径内。当我输入当前坐标时,它会在OnInterval函数中运行警报,但如果它们位于200米半径内,则不会运行警报 有人知道如何解决这个问题吗X var userPositionLat; var userPositionLong; jQuery(win
var userPositionLat;
var userPositionLong;
jQuery(window).ready(function() {
initiate_geolocation();
});
function initiate_geolocation() {
//navigator.geolocation.getCurrentPosition(handle_geolocation_query,handle_errors);
// http://www.thedotproduct.org/2010/04/example-of-navigator-geolocation-watchposition/
navigator.geolocation.watchPosition(handle_geolocation_query,handle_errors, {enableHighAccuracy:true, maximumAge:30000});
}
function handle_errors(error) {
switch(error.code)
{
case error.PERMISSION_DENIED: alert("user did not share geolocation data");
break;
case error.POSITION_UNAVAILABLE: alert("could not detect current position");
break;
case error.TIMEOUT: alert("retrieving position timed out");
break;
default: alert("unknown error");
break;
}
}
function handle_geolocation_query(position) {
userPositionLat = position.coords.latitude;
userPositionLong = position.coords.longitude;
alert('Your latitude is :'+userPositionLat+' and longitude is '+userPositionLong);
IsUserNearTarget();
}
function CalculateDistance(lat1, long1, lat2, long2) {
// Translate to a distance
var distance =
Math.sin(lat1 * Math.PI) * Math.sin(lat2 * Math.PI) +
Math.cos(lat1 * Math.PI) * Math.cos(lat2 * Math.PI) * Math.cos(Math.abs(long1 - long2) * Math.PI);
// Return the distance in meters
return Math.acos(distance) * 6370981.162;
}
function IsUserNearTarget()
{
// The target longitude and latitude
var targetlong = 0.0; //change this with your coordinates to test
var targetlat = 0.0; //change this with your coordinates to test
// Start an interval every 1s
var OurInterval = setInterval(OnInterval, 1000);
// Call this on an interval
function OnInterval() {
var distance = CalculateDistance(targetlat, targetlong, userPositionLat, userPositionLong);
// Is it in the right distance? (200m)
if (distance <= 200) {
// Stop the interval
clearInterval(OurInterval);
alert('TOTALLY WORKS BRO');
}
}
}
var-userPositionLat;
var-userlocationlong;
jQuery(窗口).ready(函数(){
启动地理定位();
});
函数initiate_geolocation(){
//navigator.geolocation.getCurrentPosition(句柄\地理位置\查询,句柄\错误);
// http://www.thedotproduct.org/2010/04/example-of-navigator-geolocation-watchposition/
navigator.geolocation.watchPosition(handle\u geolocation\u query,handle\u errors,{enableHighAccurance:true,maximumAge:30000});
}
函数句柄_错误(错误){
开关(错误代码)
{
案例错误。权限被拒绝:警报(“用户未共享地理位置数据”);
打破
case error.POSITION_不可用:警报(“无法检测当前位置”);
打破
案例错误。超时:警报(“检索位置超时”);
打破
默认值:警报(“未知错误”);
打破
}
}
函数句柄\地理位置\查询(位置){
userPositionLat=位置.coords.latitude;
userPositionLong=position.coords.longitude;
警报('您的纬度为'+userPositionLat+',经度为'+userPositionLong');
IsUserNearTarget();
}
函数计算站(lat1、long1、lat2、long2){
//平移到一定距离
var距离=
Math.sin(lat1*Math.PI)*Math.sin(lat2*Math.PI)+
Math.cos(lat1*Math.PI)*Math.cos(lat2*Math.PI)*Math.cos(Math.abs(long1-long2)*Math.PI);
//返回以米为单位的距离
返回数学.acos(距离)*6370981.162;
}
函数IsUserNearTarget()
{
//目标经纬度
var targetlong=0.0;//使用坐标更改此值以进行测试
var targetlat=0.0;//使用要测试的坐标更改此值
//每1s开始一次间隔
var-OurInterval=setInterval(OnInterval,1000);
//暂停一下
函数OnInterval(){
var距离=计算距离(targetlat、targetlong、userPositionLat、userPositionLong);
//距离合适吗?(200米)
如果(距离要将度转换为弧度,请乘以π/180
,而不是π