#php #javascript #geolocation
#php #javascript #геолокация
Вопрос:
Я создаю скрипт, который, надеюсь, будет в основном PHP, поэтому позже он не потребует Javascript, но сейчас я застрял на нескольких вещах.
-
Каков наилучший способ сохранить местоположения GPS, а затем сравнить их? Я мог бы использовать их для хранения в базе данных (в настоящее время используется MySQL), а затем находить людей поблизости с помощью некоторого кода, но я боюсь, что это будет довольно трудоемким, особенно если в базе данных много значений. Это должно быть выполнено на сервере, в настоящее время я использую PHP прямо сейчас.
-
Как я могу получить эти данные, а затем представить их в Картах 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. Да, вы правы. Я обновил сообщение, чтобы оно стало немного более понятным.