2013-12-22 2 views
0

OK Я пытаюсь использовать одну из проверенных и правильных формул для Geofence. Мое второе предупреждение в коде должно быть результатом истины ... но оно всегда говорит false. Есть идеи?Geofencing with Javascript

var points = [{ 
    x: 35.586680, 
    y: -80.874079 
}, { 
    x: 35.586646, 
    y: -80.872840 
}, { 
    x: 35.585852, 
    y: -80.872732 
}, { 
    x: 35.585673, 
    y: -80.873918 
}]; 


function isPointInPoly(poly, pt) { 
    for (var c = false, i = -1, l = poly.length, j = l - 1; ++i < l; j = i)((poly[i].y <= pt.y && pt.y < poly[j].y) || (poly[j].y <= pt.y && pt.y < poly[i].y)) && (pt.x < (poly[j].x - poly[i].x) * (pt.y - poly[i].y)/(poly[j].y - poly[i].y) + poly[i].x) && (c = !c); 
    return c; 
} 

jQuery(window).ready(function() { 
    jQuery("#btnInit").click(initiate_geolocation); 
    jQuery("#checkit").click(e); 
}); 

function initiate_geolocation() { 
    navigator.geolocation.getCurrentPosition(handle_geolocation_query); 
} 

function handle_geolocation_query(position) { 
    alert('Lat: ' + position.coords.latitude + ' ' + 
     'Lon: ' + position.coords.longitude); 
    alert(isPointInPoly(points, { 
     X: 35.586488, 
     Y: -80.873660 
    })); 
    alert(isPointInPoly(points, { 
     X: position.coords.latitude, 
     y: position.coords.longitude 
    })); 
} 

Вот JSFiddle Link

http://jsfiddle.net/D2RL3/

+0

Он предупреждает верно, когда 'c' изменяется истина, потому что вы говорите' возвращение c' – Cilan

ответ

0

Вы послали в 'неправильном' объект. Вы использовали капитал X и Y вместо x и y для свойств объекта:

alert(isPointInPoly(points, { 
     X: 35.586488, 
     Y: -80.873660 
    })); 
    alert(isPointInPoly(points, { 
     X: position.coords.latitude, 
     y: position.coords.longitude 
    })); 

JavaScript имена переменных чувствительны к регистру. Этот код должен быть с небольшими x и y свойства объектов:

alert(isPointInPoly(points, { 
     x: 35.586488, 
     y: -80.873660 
    })); 
    alert(isPointInPoly(points, { 
     x: position.coords.latitude, 
     y: position.coords.longitude 
    })); 
+1

мозга пердеть ..... спасибо Anto! – ddpishere

+0

@ddpishere: Если этот ответ работает на вас, не могли бы вы отметить его как принятое. Благодарю. –