пространственная индексация postgres - PullRequest
3 голосов
/ 15 октября 2010

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

Ответы [ 2 ]

5 голосов
/ 16 октября 2010

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

2 голосов
/ 16 октября 2010

Вы смотрели в Postgis и contrib / earthdistance?

http://www.postgis.org/

http://www.postgresql.org/docs/9.0/interactive/earthdistance.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...