Получите всех пользователей в радиусе от MySQL с пространственной точкой - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть таблица MySQL на моем локальном сервере. Таблица содержит широту, долготу и POINT (широта, долгота) для каждого пользователя. Я пытаюсь получить всех пользователей идентификатора в пределах 10 километров от центра.

Я бы хотел использовать не широту и долготу, а только точку. Но я не знаю, как это сделать. Я также слышал о SRID для изменения в POINT, но я не совсем понял

Вот моя таблица на данный момент

#   Name        Type
1   lat         decimal(10,8)   
2   lng         decimal(11,8)       
3   latlng      point
4   id_user     int(10) 

Индексы

Keyname Type    Unique  Packed  Column  Cardinality Collation   Null    Comment
latlng  SPATIAL No      No      latlng (32)     A   No  

Как я могу сделать это в PHP?

Просто для информации, что является лучшим между использованием точки и широтой / долготой?

1 Ответ

0 голосов
/ 03 апреля 2020

Я пользователь postgres / postgis, но у них есть эквиваленты. Если у вас есть возможность добавлять столбцы в таблицу, вы должны преобразовать объекты lat / lons в объекты Point (), возможно, используя что-то вроде ST_PointFromText, а затем сравнить их друг с другом, используя ST_Distance () Ref: https://dev.mysql.com/doc/refman/8.0/en/gis-data-formats.html

Редактировать: очевидно, mySql не имеет более эффективного ST_DWithin () (см .: Что эквивалентно ST_DWithin (PostGIS - PostgreSQL) для MySQL? ) так что вы, вероятно, застряли с ST_Distance ().

SRID 4326 является распространенным для этих типов систем координат широты и долготы. Ссылка: https://desktop.arcgis.com/en/arcmap/10.3/manage-data/using-sql-with-gdbs/what-is-an-srid.htm

...