Подтвердить что ты не робот

Пространственные данные в PostgreSQL

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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