Это, вероятно, простой вопрос, но я не очень хорош в PostGIS и не до конца понимаю все это.
В основном у меня есть таблица (nodes
) со столбцом POINT (point
). Я создал индекс для этого столбца
create index nodes__points on nodes using gist (point)
Столбец был создан с
select addgeometrycolumn('nodes', 'points', 'POINT', 4326, 2)
Я использую srid 4326, потому что я добавляю данные в форме (широта, долгота). (то есть система координат, в которой позиция Дублина, Ирландия, широта = 53,353 лон = -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;
. Это не обязательно должно быть точно, просто грубая цифра. 1-километровый bbox хорош , круг в 1 км - это хорошо. Он не должен быть точно 1 км, просто такого порядка.
ST_Distance
/ ST_DWithin
/ и т. Д. все используют единицы измерения SRID, который для 4326 / WGS64 равен градусам (поэтому 1 = 1 градус широты / долготы). Но я хочу использовать метры.
Я пробовал ST_distance_sphere
и st_dwithin
, которые могут использовать счетчики, но если я это сделаю, explain
показывает, что индекс не используется.
Как я могу получить примерно то, что хочу, и использовать географический индекс?
ОБНОВЛЕНИЕ : Это в PostgreSQL 9.1 и PostGIS 2.0 svn build.