fix office location detection radius and GPS accuracy
This commit is contained in:
@@ -251,6 +251,8 @@ SVG;
|
||||
|
||||
const referenceLat = 32.6504751;
|
||||
const referenceLng = 51.6936045;
|
||||
const OFFICE_RADIUS_METERS = 100;
|
||||
const MAX_ACCURACY_CREDIT_METERS = 80;
|
||||
|
||||
const submitBtn = document.getElementById("submitBtn");
|
||||
const latInput = document.getElementById("latitude");
|
||||
@@ -278,26 +280,31 @@ SVG;
|
||||
return earthRadius * c;
|
||||
}
|
||||
|
||||
function isInsideOffice(distanceMeters, accuracyMeters) {
|
||||
const accuracyCredit = Math.min(Math.max(0, accuracyMeters || 0), MAX_ACCURACY_CREDIT_METERS);
|
||||
return Math.max(0, distanceMeters - accuracyCredit) <= OFFICE_RADIUS_METERS;
|
||||
}
|
||||
|
||||
navigator.geolocation.getCurrentPosition(
|
||||
position => {
|
||||
const lat = position.coords.latitude;
|
||||
const lng = position.coords.longitude;
|
||||
const accuracy = position.coords.accuracy || 0;
|
||||
|
||||
latInput.value = lat;
|
||||
lngInput.value = lng;
|
||||
|
||||
const dist = Math.round(getDistanceInMeters(referenceLat, referenceLng, lat, lng));
|
||||
distanceInput.value = dist;
|
||||
if (dist < 20) {
|
||||
distanceMessage.textContent = `مکان: شرکت`;
|
||||
} else {
|
||||
distanceMessage.textContent = `مکان: خارج از شرکت`;
|
||||
}
|
||||
const inside = isInsideOffice(dist, accuracy);
|
||||
distanceMessage.textContent = inside
|
||||
? `مکان: شرکت (~${dist}م)`
|
||||
: `مکان: خارج از شرکت (~${dist}م)`;
|
||||
|
||||
distanceMessage.classList.remove("bg-gray-400", "bg-blue-500", "bg-green-500", "bg-orange-500", "cursor-not-allowed");
|
||||
if (dist < 10) {
|
||||
distanceMessage.classList.remove("bg-gray-400", "bg-blue-500", "bg-green-500", "bg-orange-500", "cursor-not-allowed", "text-green-500", "text-blue-500", "text-orange-500", "text-gray-400");
|
||||
if (inside) {
|
||||
distanceMessage.classList.add("text-green-500");
|
||||
} else if (dist < 50) {
|
||||
} else if (dist < OFFICE_RADIUS_METERS * 2) {
|
||||
distanceMessage.classList.add("text-blue-500");
|
||||
} else if (dist > 2000) {
|
||||
distanceMessage.classList.add("text-orange-500");
|
||||
@@ -311,7 +318,7 @@ SVG;
|
||||
},
|
||||
error => alert("⛔ خطا در دریافت موقعیت مکانی: " + error.message), {
|
||||
enableHighAccuracy: true,
|
||||
timeout: 10000,
|
||||
timeout: 20000,
|
||||
maximumAge: 0
|
||||
}
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user