(Javascript)如何检查navigator.geolocation.getCurrentPosition()的long/lat坐标是否在基于中心点的半径范围内?
我使用navigator.geolocation.getCurrentPosition()从浏览器请求用户的位置,但我想检查它们是否在距离中心点100英尺的半径范围内。中心点将是一个商店,用户只有在给定半径内才能访问某个页面 我对Javascript相当陌生,所以我不确定是否有一种不需要计算半径边界的简单方法可以做到这一点(Javascript)如何检查navigator.geolocation.getCurrentPosition()的long/lat坐标是否在基于中心点的半径范围内?,javascript,django-templates,geolocation,coordinates,distance,Javascript,Django Templates,Geolocation,Coordinates,Distance,我使用navigator.geolocation.getCurrentPosition()从浏览器请求用户的位置,但我想检查它们是否在距离中心点100英尺的半径范围内。中心点将是一个商店,用户只有在给定半径内才能访问某个页面 我对Javascript相当陌生,所以我不确定是否有一种不需要计算半径边界的简单方法可以做到这一点 <script> var x = document.getElementById("demo"); function getLocationSta
<script>
var x = document.getElementById("demo");
function getLocationStarbucks() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(checkPosition, showError);
} else {
location.href="{% url 'location-unavailable' %}"
}
}
function checkPosition(position) {
var lat = position.coords.latitude;
var long = position.coords.longitude;
var centerLat = 100.0;
var centerLong = 100.0;
//calculate radius of 100ft from center coordinates
if ( (lat, long) in radius)
location.href="{% url 'main-update' %}"
else
location.href="{% url 'location-invalid' %}"
}
function showError(error) {
switch(error.code) {
case error.PERMISSION_DENIED:
location.href="{% url 'location-denied' %}"
break;
case error.POSITION_UNAVAILABLE:
location.href="{% url 'location-unavailable' %}"
break;
case error.TIMEOUT:
location.href="{% url 'location-unavailable' %}"
break;
case error.UNKNOWN_ERROR:
location.href="{% url 'location-unavailable' %}"
break;
}
}
</script>
var x=document.getElementById(“演示”);
函数getLocationStarbucks(){
if(导航器.地理位置){
navigator.geolocation.getCurrentPosition(checkPosition,ror);
}否则{
location.href=“{%url”位置不可用“%}”
}
}
功能检查位置(位置){
var lat=位置坐标纬度;
var long=位置坐标经度;
var centerat=100.0;
var centerLong=100.0;
//计算距离中心坐标100英尺的半径
如果((横向,纵向)半径)
location.href=“{%url”主更新“%}”
其他的
location.href=“{%url”位置无效“%}”
}
功能错误(错误){
开关(错误代码){
案例错误。权限被拒绝:
location.href=“{%url”位置被拒绝“%”
打破
案例错误。位置不可用:
location.href=“{%url”位置不可用“%}”
打破
大小写错误。超时:
location.href=“{%url”位置不可用“%}”
打破
案例错误。未知错误:
location.href=“{%url”位置不可用“%}”
打破
}
}
编辑:解决方案
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(checkPosition, showError);
} else {
// geolocation not supported
location.href="{% url 'location-unavailable' %}"
}
}
function checkPosition(position) {
var centerLat = 123.45;
var centerLong = 123.45;
var userLat = position.coords.latitude;
var userLong = position.coords.longitude;
var dis = getDistanceFromLatLonInFt(centerLat, centerLong, userLat, userLong);
if (dis < 100) {
location.href="{% url 'main-update' %}";
} else {
location.href="{% url 'location-invalid' %}";
}
}
// calculates distance between points in feet
function getDistanceFromLatLonInFt(lat1, lon1, lat2, lon2) {
var R = 20902464; // Radius of the earth in ft
var dLat = deg2rad(lat2-lat1); // deg2rad below
var dLon = deg2rad(lon2-lon1);
var a =
Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) *
Math.sin(dLon/2) * Math.sin(dLon/2)
;
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c; // Distance in feet
return d;
}
function deg2rad(deg) {
return deg * (Math.PI/180);
}
function showError(error) {
switch(error.code) {
case error.PERMISSION_DENIED:
location.href="{% url 'location-denied' %}"
break;
case error.POSITION_UNAVAILABLE:
location.href="{% url 'location-unavailable' %}"
break;
case error.TIMEOUT:
location.href="{% url 'location-unavailable' %}"
break;
case error.UNKNOWN_ERROR:
location.href="{% url 'location-unavailable' %}"
break;
}
}
函数getLocation(){
if(导航器.地理位置){
navigator.geolocation.getCurrentPosition(checkPosition,ror);
}否则{
//不支持地理定位
location.href=“{%url”位置不可用“%}”
}
}
功能检查位置(位置){
var centerat=123.45;
var centerLong=123.45;
var userLat=position.coords.latitude;
var userLong=position.coords.longitude;
var dis=GetDistanceFromLatOnft(centerLat、centerLong、userLat、userLong);
如果(dis<100){
location.href=“{%url”主更新“%}”;
}否则{
location.href=“{%url”位置无效“%}”;
}
}
//以英尺为单位计算点之间的距离
函数getDistanceFromLatLonInFt(lat1、lon1、lat2、lon2){
var R=20902464;//地球半径(英尺)
var dLat=deg2rad(lat2-lat1);//下面是deg2rad
var-dLon=deg2rad(lon2-lon1);
变量a=
数学单(dLat/2)*数学单(dLat/2)+
数学cos(deg2rad(lat1))*数学cos(deg2rad(lat2))*
数学单(dLon/2)*数学单(dLon/2)
;
var c=2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a));
var d=R*c;//以英尺为单位的距离
返回d;
}
功能deg2rad(度){
返回度*(数学PI/180);
}
功能错误(错误){
开关(错误代码){
案例错误。权限被拒绝:
location.href=“{%url”位置被拒绝“%”
打破
案例错误。位置不可用:
location.href=“{%url”位置不可用“%}”
打破
大小写错误。超时:
location.href=“{%url”位置不可用“%}”
打破
案例错误。未知错误:
location.href=“{%url”位置不可用“%}”
打破
}
}
您是在寻找本机JavaScript或库提供的函数来解决此问题,还是在询问如何解决您遇到的问题?@spjy我想使用我拥有的,并根据条件重定向用户请求(如果可能)