У меня есть таблица в базе данных MySQL с тысячами проверок с моего телефона. Каждые x секунд вставляется новое местоположение.
Вот как выглядит таблица:
+----+-----------+----------+------------+------------+
| id | lat | lon | date | timestamp |
+----+-----------+----------+------------+------------+
| 1 | 51.650586 | 5.622935 | 14-08-2018 | 1534233062 |
+----+-----------+----------+------------+------------+
| 2 | 51.65181 | 5.622228 | 14-08-2018 | 1534230962 |
+----+-----------+----------+------------+------------+
| 3 | 51.653715 | 5.6194 | 14-08-2018 | 1534230121 |
+----+-----------+----------+------------+------------+
Помимо координат GPS, даты и времени, я также сохраняю адресные данные из Google Maps Geocode API, но названия улиц не всегда правильные, поэтому их бесполезно использовать для группировки данных.
В настоящее время я показываю последнее вставленное местоположение на карте Google с помощью JavaScript, как единственный указатель. Я ищу MySQL-запрос, который выводит список из 5 наиболее посещаемых мест на определенную дату. Есть несколько сотен заселений в день.
Было бы здорово, если бы их можно было сгруппировать вместе, установив дистанцию в 500 метров. Так, например, 3 точки сверху будут сгруппированы вместе, так как расстояние между ними меньше 500 метров.
Может ли кто-нибудь помочь мне написать запрос для этого? Любая помощь очень ценится.
PostgreSQL имеет встроенные типы географических столбцов. Может быть, может быть лучше.
Я бы рекомендовал использовать для этого MongoDB. Он имеет встроенные функции геокодирования и должен быть лучшим решением для вашей задачи.
MySQL поддерживает openGIS (dev.mysql.com/doc/refman/8.0/en/spatial-types.html), если вы хотите включить пространственные элементы в свои запросы.






Что, если каждая точка находится в пределах 500 м от другой точки?