PHP в массивы Javascript и местоположения GPS

#php #javascript #geolocation

#php #javascript #геолокация

Вопрос:

Я создаю скрипт, который, надеюсь, будет в основном PHP, поэтому позже он не потребует Javascript, но сейчас я застрял на нескольких вещах.

  1. Каков наилучший способ сохранить местоположения GPS, а затем сравнить их? Я мог бы использовать их для хранения в базе данных (в настоящее время используется MySQL), а затем находить людей поблизости с помощью некоторого кода, но я боюсь, что это будет довольно трудоемким, особенно если в базе данных много значений. Это должно быть выполнено на сервере, в настоящее время я использую PHP прямо сейчас.

  2. Как я могу получить эти данные, а затем представить их в Картах Google? В настоящее время мой код работает, когда я уже ввел данные, но я хотел бы получить эти данные из базы данных. Будет ли слишком много требовать от пользователя размещения, скажем, 100 маркеров в одном представлении Google Maps, чтобы представлять всех людей по всему миру? Или я должен просто придерживаться людей в определенной области? Мой текущий код:

     var people = [ ['Type1', -33.890542, 151.274856],
                   ['Type2', -33.923036, 151.259052],  
                   ['Type2', -34.028249, 151.157507],  
                   ['Type2', -33.80010128657071, 151.28747820854187],  
                   ['Type1', -33.950198, 151.259302]
                 ];
      

    Каждый «тип» отображает другое изображение, поэтому мне нужно извлечь тип, широту и длину из базы данных и поместить их в этот массив Javascript.

Я знаю, что там есть несколько вопросов, я новичок в этой части javascript и карт 🙂

Комментарии:

1. code.google.com/apis/maps/documentation/javascript/…

2. Я на самом деле использовал это, спасибо Petah. Я работаю над тем, чтобы использовать это для сохранения их местоположения (с их разрешения), а затем сопоставить его с другими пользователями, которые заходят на сайт.

3. Вы могли бы хранить данные, используя пространственные функции MySQL: dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html

Ответ №1:

1. Ваш первый вопрос

Мне пришлось решить что-то подобное на прошлой неделе, и я сделал это так.
Допустим, у меня есть список некоторых офисов в базе данных MySQL с их координатами GPS ( gps_lat , gps_lon ), и я хочу отсортировать их по расстоянию до моего текущего местоположения ( $latitude , $longtitude ) в км.

 // MySQL query in PHP
// btw, I'm storing GPS coordinates in decimal format like 51.123234
$varA = "(POW(SIN((gps_lat - $latitude) / 2 * 0.017453293), 2)   COS($latitude * 0.017453293)
        * COS(gps_lat * 0.017453293) * POW(SIN((gps_lon - $longtitude) / 2 * 0.017453293), 2))";
    
$query = "SELECT *, (6378.140 * 2 * ATAN2(SQRT($varA), SQRT(1-$varA))) AS distanceInKm ";
$query  = 'FROM Office ORDER BY distanceInKm'); 

$mysqli->query($query);
// ...

// the magic constant 0.017453293 is PI / 180 (just check the link below).
  

Возможно, проверьте эту ссылку, выводящую формулу Haversine, это мне очень помогло. Я знаю, что это выглядит странно в SQL. Это $varA всего лишь одна часть формулы, которая повторяется дважды. Исходная формула в приведенной выше ссылке выглядит следующим образом:

 dlon = lon2 - lon1
dlat = lat2 - lat1
a = (sin(dlat/2))^2   cos(lat1) * cos(lat2) * (sin(dlon/2))^2
c = 2 * atan2(sqrt(a), sqrt(1-a)) 
d = R * c
  

Комментарии:

1. Спасибо за это, выглядит очень хорошо. Прочитал ссылку, и я думаю, что понял, как это работает, я попытаюсь реализовать ее сейчас. Я предполагаю, что мы сравниваем текущее местоположение пользователя (gps_lat и gps_lon) с некоторыми переменными координатами, $ latitude и $ longtitude? Я не совсем понимаю последнюю часть, но я не настолько хорошо разбираюсь в таком синтаксисе! 🙁

2. Да, вы правы. Я обновил сообщение, чтобы оно стало немного более понятным.