Яка мета PostGIS на PostgreSQL?


49

PostgreSQL вже підтримує просторові типи даних, оператори та індексацію.

Що PostGIS забезпечує саме тим, що стало необхідним існувати як розширення до PostgreSQL?

Чому ми не просто використовуємо просторову функціональність PostgreSQL?


2
Саме PostGIS забезпечує ті типи просторових даних, оператори та індексацію ...
DPSSpatial

5
Ні, він говорить про рідні типи геометрії PostgreSQL.
Еван Керролл

4
Коротка відповідь полягає в тому, що PostGIS (зараз) в 10 разів настільки ж функціональний, як і типи PgSQL. Нижча відповідь, яка охоплює питання "чому розробляти нові типи, а не просто вдосконалювати ті, які вже є", розглянута нижче.
Пол Рамзі

1
Те ж саме сталося і з рамкою Java Spring. У Java були недоліки / відсутні функції. Весна виправила багато недоліків Java та додала корисні функції. Java скопіювала виправлення Spring + функції. Тоді люди запитують, чому існує Весна ...
Ніл МакГуган

Відповіді:


86

Якщо ви повторно намотували Всесвіт до початку 2001 року і не тільки дозволяли винахідникам PostGIS бачити майбутнє, але і дозволяли PSC PgSQL бачити майбутнє, можливо, PostGIS буде серією патчів на PgSQL. Але як мінімум, якби ми починали як основні виправлення, перше, проти чого ми би зіткнулися, це:

  • основні області PgSQL не підтримують отвори, але GIS-модель дуже хоче дір, ми можемо це змінити?

І core PgSQL сказав би: "ні, звичайно, ні. У областях є вже добре зрозуміла семантика, і ми не можемо йти назад, таким чином, несумісними змінами".

Як непрофільні розробники, PostGIS змогла вибити щомісячні та шестимісячні випуски протягом декількох років, тоді як PgSQL ядро ​​розширювалося разом з річними та більш тривалими версіями. Ми також змогли додавати будь-які функції, які ми хотіли, коли завгодно, оскільки ми мали права на виконання проекту в нашому проекті, але отримання прав на прихильність у PgSQL займає дуже довгий час.

На той час, коли PostGIS демонстрував достатню зовнішню цінність, яку ядро ​​PgSQL переглянуло і сказало собі "так, це було б добре мати в ядрі як додаткову функцію", вже було стільки коду такого іншого стандарту та стилю від PgSQL (не кажучи вже про несумісну ліцензію), що ідея об'єднання насправді неможлива.

Натомість PostGIS став канонічним прикладом дійсно великого складного розширення, яке допомагає PgSQL залишатися модульним та розширюваним. "Як це вплине на щось на кшталт PostGIS" - питання, яке часто задають, оскільки ядро ​​PgSQL оцінює певні зміни. Це також гарна річ, не дуже гарна, як PostGIS, що є частиною ядра, але досить хороша.

Є й інші причини, як-от довгий перелік залежностей, які ядро ​​PgSQL не хотілося б бачити, загалом менша узгодженість коду та чистота API, які вони бажали б покращити, і далі. Навіть зачаття, PostGIS був занадто великим стрибком волосся для PgSQL, щоб проковтнути одним укусом.


Також ... PostGIS - це C ++. Це було б для зупинить всю роботу PostgreSQL merge.Whether чи ні повинно бути. Залежності також повністю зупинять це - GDAL? Га! Я навіть не можу отримати ядро, щоб погодитися залежати від Perl> 5.8.0. Темп розвитку повільний, навіть якщо у вас є права на виконання зобов'язань; Команди не просто отримують безкоштовно для всіх речей, що просуваються на дереві, вони повинні пройти перегляд коду та отримати великі зміни, які потребують місяців або років. Є переваги якості коду, але це впевнено, що це не швидко рухається.
Крейг Рінгер

Особлива проблема полягає в тому, що ядро ​​Pg продовжує винаходити речі, щоб уникнути, залежно від більшості зовнішніх бібліотек. Оскільки це означатиме, що $ ancient_unix_42 з $ weird_vendor_compiler у $ dead_architecture повинні було б його підтримувати, всі члени buildfarm потребуватимуть оновлення тощо. Це, напевно, одна з проблем.
Крейг Рінгер

@CraigRinger Чому ви вважаєте, що PostGIS - це C ++? Це образа :-)
Nicklas Avén

Це ... ні? Я міг присягати. Але досить впевнено, це не схоже на це. Моє ліжко. Насправді мені подобається (помірне та стримане) використання C ++ у будь-якому випадку.
Крейг Рінгер

4
Протягом періоду часу PostGIS мав кілька фрагментів C ++ для того, щоб зробити прив'язку до GEOS. Після того, як GEOS додав власний API API, ці фрагменти були вилучені, а PostGIS став "чистим" C.
Пол Рамзі

34

Це просто не вірно, PostgreSQL не підтримує просторові типи даних. Він підтримує геометричні типи. Вони є ідеальними для деяких речей, але вони повністю відокремлені від реальних систем координат. Рідні типи

Оновлення

Щодо питання щодо індексу, то це у FAQ

Чому не підтримуються індекси PostgreSQL R-Tree?

Ранні версії PostGIS використовували індекси PostgreSQL R-Tree. Однак, PostgreSQL R-Trees були повністю відкинуті з версії 0.6, а просторова індексація забезпечується схемою R-Tree-over-GiST.

Наші тести показали, що швидкість пошуку для рідного R-Tree та GiST є порівнянною. Native PostgreSQL R-Trees мають два обмеження, які роблять їх небажаними для використання з функціями GIS (зауважте, що ці обмеження пов'язані з поточною реалізацією PostgreSQL, яка є рідною R-Tree, а не концепцією R-Tree в цілому):

  • Індекси R-Tree в PostgreSQL не можуть обробляти функції, розміри яких перевищують 8K. Індекси GiST можуть, використовуючи "втратний" трюк, замінивши обмежувальну рамку для самої функції.

  • Індекси R-Tree в PostgreSQL не є "нульовими", тому побудувати індекс на стовпчику геометрії, який містить нульову геометрію, не вдасться. [Індекси GiST захищені від нуля]


Чи можете ви розширити свій останній пункт - той, який стосується індексів GiST? PostgreSQL надав R-Tree, і тепер він надає це через індекс GiST, тому я плутаюся з цього приводу.
Zeruno

оновлений прямим текстом з faq.
Еван Керролл

1
GiST API є PostgreSQL , що забезпечує доступ / gist.h . Ви можете побачити його у використанні в PostGIS тут
Еван Керролл

3
У той час як у PostGIS є власна програма rtree-on-gist, вона дуже схожа на ту, яку використовує PgSQL для основної підтримки графічних об'єктів з тієї простої причини, що ми спочатку скопіювали їх.
Пол Рамзі

1
@ Zeruno, Ні, зміна роздільника rtree в PgSQL не змінить поведінку PostGIS, оскільки у нас є власний, в gserialized_gist_picksplit_2d (). Ви не все, що він відрізняється від PgSQL, якщо він взагалі є.
Пол Рамзі

8

PostGIS - це розширювач просторової бази даних для об'єктно-реляційної бази даних PostgreSQL . Він додає підтримку географічних об'єктів, що дозволяє виконувати запити про місцезнаходження у SQL.

SELECT superhero.name
FROM city, superhero
WHERE ST_Contains(city.geom, superhero.geom)
AND city.name = 'Gotham';

На додаток до базової обізнаності про місцеположення, PostGIS пропонує безліч функцій, які рідко зустрічаються в інших конкуруючих просторових базах даних, таких як Oracle Locator / Spatial та SQL Server. Див PostGIS список функцій для більш докладної інформації.

Список функцій PostGIS також розширює ці можливості:

PostGIS додає додаткові типи (геометрія, географія, растр та інші) до бази даних PostgreSQL . Він також додає вдосконалення функцій, операторів та індексів, які застосовуються до цих просторових типів. Ці додаткові функції, оператори, прив’язки до індексу та типи збільшують потужність основної СУБД PostgreSQL, роблячи її швидкою, багатофункціональною та надійною системою управління просторовою базою даних.

Список функцій

Серія PostGIS 2+ передбачає:

  • Обробка та аналітичні функції як векторних, так і растрових даних для сплайсінгу, дікінгування, морфінгу, перекласифікації та збору / об'єднання з потужністю алгебри растрової карти SQL для дрібнозернистої растрової обробки
  • Просторова репроекція SQL-функцій, що викликаються як для векторних, так і для растрових даних
  • Упакований командний рядок для імпорту растрових даних з багатьох стандартних форматів: GeoTiff, NetCDF, PNG, JPG

  • Візуалізація та імпорт функцій підтримки векторних даних для стандартних текстових форматів, таких як KML, GML, GeoJSON, GeoHash та WKT з використанням растрових даних SQL в різних стандартних форматах GeoTIFF, PNG, JPG, NetCDF, щоб назвати декілька за допомогою SQL

  • Безшовні растрові / векторні SQL-дзвінкі функції для екструзії значень пікселів за геометричною областю, запущена статистика за регіонами, відсікання растрових елементів за геометрією та векторизація растрових 3D-об'єктів, просторовий індекс та функції Підтримка мережевої топології. / використання даних Тигра перепису США

Крім того, до пунктів / частин, згаданих уже в цій публікації. Я б додав, як згадувалося на веб-сайті PostGIS Як це працює

Оскільки PostGIS знаходиться в C, він може використовувати інші бібліотеки в C і C ++, і це робить це ліберально. PostGIS залежить від:

  • ГЕОС для багатьох алгоритмів обробки геометрії
  • Proj.4 для функцій повторного проектування координат
  • GDAL для растрової обробки та підтримки формату
  • LibXML2 для розбору XML
  • JSON-C для розбору JSON
  • SFCGAL для розширеної підтримки 3D та додаткових алгоритмів геообробки
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.