ActiveRecord :: StatementInvalid: PG :: InternalError: ОШИБКА: ошибка анализа - неверная геометрия - PullRequest
0 голосов
/ 08 мая 2018

Мне нужно узнать пользователей на определенном расстоянии от широты и долготы.

organisation.users.joins(:location)
            .where("ST_DWithin(ST_GeomFromText('POINT(locations.longitude locations.latitude)', 4326),ST_GeomFromText('POINT(? ?)', 4326), ?)", longitude, latitude, distance)
            .pluck(:id)

Я получаю эту ошибку ActiveRecord::StatementInvalid: PG::InternalError: ERROR: parse error - invalid geometry

1 Ответ

0 голосов
/ 08 мая 2018

Вы ссылаетесь на имена столбцов внутри строки, поэтому эта строка используется вместо предполагаемых координат.

Чтобы преодолеть это, вам нужно объединить текстовую команду ('point(' со значениями столбца и, наконец, объединить конец текстовой команды (')'). В результате имя столбцабольше не находится в одинарных кавычках.

organisation.users.joins(:location)
            .where("ST_DWithin(ST_GeomFromText('POINT(' || locations.longitude  || ' ' ||  locations.latitude ||')', 4326),ST_GeomFromText('POINT(? ?)', 4326), ?)", longitude, latitude, distance)
            .pluck(:id)
...