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

Ответить
JonnyB
Новоприбывший
Сообщения: 4
Зарегистрирован: 13 ноя 2013, 13:07
Репутация: 0

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

Сообщение JonnyB » 13 ноя 2013, 13:15

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

JonnyB
Новоприбывший
Сообщения: 4
Зарегистрирован: 13 ноя 2013, 13:07
Репутация: 0

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

Сообщение JonnyB » 13 ноя 2013, 15:18

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

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9128
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

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

Сообщение Максим Дубинин » 13 ноя 2013, 19:43

потому что 100 градусов это много
пристегивайтесь, турбулентность прямо по курсу

JonnyB
Новоприбывший
Сообщения: 4
Зарегистрирован: 13 ноя 2013, 13:07
Репутация: 0

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

Сообщение JonnyB » 14 ноя 2013, 09:11

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

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

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

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

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

JonnyB
Новоприбывший
Сообщения: 4
Зарегистрирован: 13 ноя 2013, 13:07
Репутация: 0

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

Сообщение JonnyB » 14 ноя 2013, 09:16

Максим, то есть в функции ST_DWithin третий аргумент принимает размерность первых двух?

Ответить

Вернуться в «PostGIS/PostgreSQL»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 22 гостя