2010-10-15 2 views
3

Я не могу найти много документации по этому вопросу. Каков самый простой способ создать базу данных/таблицу для postgres, поддерживающих такой запрос, как эта таблица SELECT * FROM WHERE distance (POINT (0,0), table.location) < = 1000m; Где POINT (0,0) и table.location должна быть пара широты/долготы, а 1000 м - 1000 метров. И как мне следует индексировать эту таблицу? Спасибо.postgres пространственное индексирование

ответ

5

поддержка PostgreSQL индексы на выражениях, а также в частных индексов, вероятно, можно смешать их.

Это просто случайное предположение, я не знаю, если это работает, но дать ему попробовать:

CREATE INDEX foobar ON table (distance(POINT(0,0), location)) 
WHERE distance(POINT(0,0), location) <= 1000; 

http://www.postgresql.org/docs/9.0/interactive/indexes-expressional.html

http://www.postgresql.org/docs/9.0/interactive/indexes-partial.html

+3

Имейте в виду, что Земля не является плоской , В общем случае такие контурные расчеты не будут хорошо работать. – skalee