Пространственные данные в PostgreSQL - PullRequest
29 голосов
/ 21 июня 2009

PostgreSQL поддерживает множество геометрических типов из коробки, наряду с множеством геометрических операторов и индексов GiST , которые, кажется, предлагают пространственную индексацию данных .

И еще есть PostGIS , который является расширением для PG.

В чем разница между встроенной пространственной поддержкой в ​​PG и PostGIS?

Если моему приложению необходимо сохранять географические координаты (точки, области, многоугольники), а затем эффективно выполнять запросы (такие как точка-многоугольник, пересечение многоугольников), мне нужен PostGIS или я могу использовать (возможно) более удобный а проще встроенные типы данных / синтаксис?

1 Ответ

31 голосов
/ 21 июня 2009

Сначала я хотел бы уточнить индексы GiST: GiST на самом деле является основой для создания индексов для новых типов данных, а не какой-либо конкретной схемы индексации. Эта структура используется для геометрических типов, поставляемых с Postgres, но она также используется для сопоставления триграмм индекса сходства текста в стандартных текстовых столбцах и, конечно, используется в схемах индексации многих внешних пакетов, среди которых мы можем номер PostGIS.

Подойдет ли вам стандартный тип геометрических данных или вам нужен PostGIS, полностью зависит от вашего приложения.

PostGIS хранит геометрические данные в столбце типа «геометрия»; в этом вы можете хранить более или менее произвольные данные (точки, круги, многоугольники, что у вас есть). Индексирование быстрое и довольно сложное: оно может выполнять такие вещи, как индексирование с потерями, используя ограничивающие рамки для сложных фигур, которые иначе не могут быть проиндексированы каким-либо разумным способом. Поддерживаются различные системы пространственной привязки с автоматическим преобразованием результатов запросов. PostGIS также поддерживает стандартные форматы OpenGIS, которые могут помочь с обменом данными с другими системами.

Напротив, набор внутренних геометрических типов и их индексы намного менее сложны. Там нет реального "универсального" типа геометрии; вместо этого вы должны выбрать тип столбца: точка, линия, круг, многоугольник или что-то еще; для комбинаций вам, вероятно, придется использовать несколько столбцов. Индексирование не так хорошо; не так много разных типов фигур можно индексировать (хотя вы можете добавить поддержку ограничивающего прямоугольника, используя для них отдельный столбец и создав ограничивающие прямоугольники вручную), и в некоторых ситуациях индексы, вероятно, не такие быстрые. С другой стороны, если внутренние геометрические типы удовлетворяют вашим потребностям, вы получаете преимущество, заключающееся в том, что ваше приложение легче переносить на другие системы, на которых установлен Postgres, но не установлен PostGIS.

Мой совет - поиграться с внутренними геометрическими типами и посмотреть, насколько хорошо это работает для вас; если вы начинаете сталкиваться с проблемами, попробуйте PostGIS.

...