У меня есть кнопка, которая вызывает функцию с именем HomeTest ().В этой функции я вызываю geoFindMe (), простую функцию геолокации.Этот geoFindMe () дает мне переменную широту и переменную долготу.В HomeTest () я использую эти переменные, чтобы увидеть, нахожусь ли я в определенном многоугольнике.Если я нахожусь в правильном многоугольнике, кнопка должна измениться на другой .html-файл
Моя проблема заключается в том, что я должен нажать кнопку ДВАЖДЫ, чтобы сайт загрузился на новом.html-файл, так как он, кажется, не получает переменные широты и долготы с первой попытки, хотя я вызываю geoFindMe () перед использованием переменных.Я немного новичок в js, поэтому я не совсем уверен, почему меня не перемещают в новый .html-файл после одного клика, когда я нахожусь в нужной области.У кого-нибудь есть идеи?
function geoFindMe() {
if (!navigator.geolocation){
output.innerHTML = "<p>Your browser doesn't support geolocation.</p>";
return;
}
function success(position) {
latitude = position.coords.latitude;
longitude = position.coords.longitude;
};
function error() {
output.innerHTML = "The site was not able to locate you";
alert("Please use another browser.");
};
navigator.geolocation.getCurrentPosition(success, error);
}
function HomeTest(){
geoFindMe();
var polygon = [ [ longitude1, latitude1], [ longitude2, latitude2], [ longitude3, latitude3], [ longitude4, latitude4] ];
insideTest([ longitude, latitude ], polygon); // true -> point coordinates that are searched
//alert("is inside is " + isInsideTest + " " + latitude + " " + longitude);
//Test_LockButton();
if(isInsideTest){
location.href = './html/testhome.html';
}
}
Эта функция проверяет, находятся ли широта и долгота в 4 точках многоугольника (см. Выше)
function insideTest(point, vs) {
var x = point[0], y = point[1];
for (var i = 0, j = vs.length - 1; i < vs.length; j = i++) {
var xi = vs[i][0], yi = vs[i][1];
var xj = vs[j][0], yj = vs[j][1];
var intersect = ((yi > y) != (yj > y))
&& (x < (xj - xi) * (y - yi) / (yj - yi) + xi);
if (intersect) isInsideTest = !isInsideTest;
}
return isInsideTest;
}