2012-02-25 6 views
3

Я пытаюсь создать простой трекер, используя карты php и google. Сейчас у меня работает трекер, но я хочу, чтобы он обнаруживал близость к определенным маркерам. Например, если пользователь находится в пределах 30 м от моего «дома» (маркер), сценарий обновит его статус, заявив, что он находится в «так и в доме». Я хотел бы, чтобы это было возможно в PHP. Лучше всего было бы определить длинный/лат каждого маркера и создать вокруг него простой периметр, а затем определить, будут ли пользователи длинными и латами располагаться в пределах этого периметра. Существуют ли примеры этого, которые я мог бы использовать, или математические уравнения.PHP/Google Maps - Geofence

+0

Пожалуйста, не пишите ответы на вопросы или используйте [SOLVED] в заголовке. Если вы сами определились с ответом, разместите его в поле ниже. Поскольку вы новый пользователь с rep <100, вы сможете сделать это за 7 часов. – abcd

+0

@ Keiran Lovett, какой db вы используете? Есть ли шанс, что вы можете использовать postgresql? –

+0

Спасибо, что указали, что из Йода! –

ответ

2

Формула Haversine - это то, что вы ищете. Там an article on Google Code описывает, как использовать его с MySQL и PHP.

2

Решение Used -

function calc_distance($point1, $point2) 
{ 
    $radius  = 3958;  // Earth's radius (miles) 
    $deg_per_rad = 57.29578; // Number of degrees/radian (for conversion) 

    $distance = ($radius * pi() * sqrt(
       ($point1['lat'] - $point2['lat']) 
       * ($point1['lat'] - $point2['lat']) 
       + cos($point1['lat']/$deg_per_rad) // Convert these to 
       * cos($point2['lat']/$deg_per_rad) // radians for cos() 
       * ($point1['long'] - $point2['long']) 
       * ($point1['long'] - $point2['long']) 
     )/180); 

    return $distance; // Returned using the units used for $radius. 
} 

Я использовал формулу Haversine я нашел на другом посту.