понедельник, 17 октября 2016 г.

Поиск близлежайших объектов в postgis

Есть postgis, в ней база OSM. Нужно получить точки, находящиеся рядом (ближе 50 метров) с заданной точкой с координатами 132.77883 и 43.17676:

  select osm_id,ref from planet_osm_point where st_distance(ST_Transform(way,4326),  ST_GeographyFromText('SRID=4326;POINT(' || '132.77883' || ' ' || '43.17676' || ')')) <=50;

Пояснения:
ST_Transform(way,4326) - геометрия в planet_osm_point хранится в поле way хитрым образом, но т.к. координаты в postgis-е хранятся в меркарторе (SRID=900913), а функции вычисления растояний работают с WGS84 (SRID=4326), а так же и наши координаты  132.77883 и 43.17676 тоже в WGS84, то нужно меркартор трафнсформировать в WGS84.

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

Отправить комментарий