Страница 1 из 1

Найти записи из таблицы, в радиусе M метров

Добавлено: 13 ноя 2013, 13:15
JonnyB
Есть табличка с полем coordinates типа geometry (POINT).
Есть координаты человека (x, y) и запрос - найти все записи в радиусе M метров.
В мануале есть вариант такой выборки, но там берется прямоугольная область для ограничения выборки - http://gis-lab.info/docs/postgis/manual ... #id2699521 . Можно ли тоже самое сделать с кругом?
Нагуглил ST_Point_Inside_Circle, но не понятно в каких попугаях измеряется последний аргумент (float radius) :(

Re: Найти записи из таблицы, в радиусе M метров

Добавлено: 13 ноя 2013, 15:18
JonnyB
Нашел один из вариантов, указываю через ST_DWithin(coordinates, ST_SetSRID(ST_MakePoint(х, у), 4326) , 100)
Но находятся объекты, которые дальше на пару километров, из-за чего это?

Re: Найти записи из таблицы, в радиусе M метров

Добавлено: 13 ноя 2013, 19:43
Максим Дубинин
потому что 100 градусов это много

Re: Найти записи из таблицы, в радиусе M метров

Добавлено: 14 ноя 2013, 09:11
JonnyB
Кажется проблема оказалась в этом: http://gis.stackexchange.com/questions/ ... -of-meters (srid 4326 - радианы). Что бы получить более точны результат нужно привести к типу geography

Код: Выделить всё

ST_DWithin(coordinates::geography...
Ну и что бы не шерстить всю табличку еще один индекс:

Код: Выделить всё

CREATE INDEX ...index_name... ON ...table... USING gist (geography(...row...))

Re: Найти записи из таблицы, в радиусе M метров

Добавлено: 14 ноя 2013, 09:16
JonnyB
Максим, то есть в функции ST_DWithin третий аргумент принимает размерность первых двух?