Это, наверное, простой вопрос, но я не очень хорошо разбираюсь в PostGIS и не полностью понимаю все это.
В принципе у меня есть таблица (nodes
) с столбцом POINT (point
). Я создал индекс в этом столбце
create index nodes__points on nodes using gist (point)
Столбец был создан с помощью
select addgeometrycolumn('nodes', 'points', 'POINT', 4326, 2)
Я использую srid 4326, потому что добавляю данные, которые в форме (широта, долгота). (т.е. система координат, в которой позиция Дублина, Ирландия, равна lat = 53.353 lon = -6.264 (которую я добавил с помощью GeomFromText('POINT(-6.264 53.535)')
)).
Для каждой точки я хочу найти все точки, расположенные примерно в пределах 1-километрового окна, расположенного в центре этой точки (так что selcet a.id, count(*) from nodes as a, nodes as b where SOME_DISTANCE_FUNCTION_HERE(a.point, b.point, 1000) group by a.id;
. Это не должно быть точным, всего лишь грубой фигурой в стиле hueristic., кружок в 1 км в порядке. Он не должен быть точно в 1 км, только на порядок.
ST_Distance
/ST_DWithin
/etc. все используют единицы SRID, что для 4326/WGS64 - это градусы (так 1 = 1 градус долготы/долготы). Но я хочу использовать счетчики.
Я попробовал ST_distance_sphere
и ST_DWithin
, которые могут использовать счетчики, но если я это сделаю, explain
показывает, что индекс не используется.
Как я могу получить примерно то, что хочу, и использовать географический индекс?
UPDATE. Это на PostgreSQL 9.1 и PostGIS 2.0 svn build.