В PostGIS для точек с широтой и долготой существует тип данных географии.
Чтобы добавить столбец:
alter table your_table add column geog geography;
Чтобы вставить данные:
insert into your_table (geog) values ('SRID=4326;POINT(longitude latitude)');
4326 - это идентификатор пространственной привязки, который сообщает, что данные в градусах долготы и широты, такие же, как в GPS.Подробнее об этом: http://epsg.io/4326
Порядок - Долгота, Широта - поэтому, если вы нанесете его на карту, то это (x, y).
Чтобы найти ближайшую точку, вам сначала нужносоздайте пространственный индекс:
create index on your_table using gist (geog);
, а затем запросите, скажем, 5 ближайших к заданной точке:
select *
from your_table
order by geog <-> 'SRID=4326;POINT(lon lat)'
limit 5;