Qual è lo scopo di PostGIS su PostgreSQL?


49

PostgreSQL supporta già tipi di dati spaziali, operatori e indicizzazione.

Cosa fornisce esattamente PostGIS che ha reso necessario esistere come estensione di PostgreSQL?

Perché non usiamo tutti solo la funzionalità spaziale di PostgreSQL?


2
È PostGIS che fornisce quei tipi di dati spaziali, operatori e indicizzazione ...
DPSSpatial

5
No, sta parlando dei tipi di geometria PostgreSQL nativi.
Evan Carroll,

4
La risposta breve è che PostGIS è (ora) 10 volte più funzionale dei tipi PgSQL. La risposta lunga, che comprende la domanda "perché sviluppare nuovi tipi, e non solo migliorare quelli già lì", è affrontata di seguito.
Paul Ramsey,

1
La stessa cosa è successa con il framework Java Spring. Java aveva difetti / funzionalità mancanti. Spring ha corretto molti difetti Java e ha aggiunto utili funzionalità. Java ha copiato le correzioni + le funzionalità di Spring. La gente poi chiede perché esiste la primavera ...
Neil McGuigan,

Risposte:


86

Se riavvolgi l'universo all'inizio del 2001 e non solo permetti agli inventori di PostGIS di vedere il futuro, ma permetti anche al PSC di PgSQL di vedere il futuro, forse PostGIS sarebbe una serie di patch su PgSQL. Ma come minimo, se avessimo iniziato come patch per core, la prima cosa che avremmo incontrato è:

  • le aree core di PgSQL non supportano i buchi, ma il modello GIS vuole davvero buchi, possiamo cambiarlo?

E il core PgSQL avrebbe detto: "no, certo che no, le aree hanno un semantico ben compreso e non possiamo fare cambiamenti incompatibili come quelli precedenti".

Come sviluppatori non core, PostGIS è stato in grado di eliminare le versioni mensili e semestrali per un certo numero di anni, mentre il core PgSQL è andato avanti con versioni annuali e più lunghe. Siamo stati anche in grado di aggiungere qualsiasi funzionalità desiderassimo, ogni volta, poiché avevamo i diritti di commit nel nostro progetto, ma ottenere i diritti di commit in PgSQL richiede molto tempo.

Quando PostGIS stava dimostrando abbastanza valore esterno che il core di PgSQL si guardava e diceva a se stesso "eh, sarebbe stato bello avere nel core come funzionalità extra", c'era già così tanto codice di uno standard e uno stile così diversi da PgSQL (per non parlare di una licenza incompatibile) che l'idea di unire non era realmente possibile.

Invece, PostGIS è diventato l'esempio canonico di un'estensione davvero grande complessa che aiuta PgSQL a rimanere modulare ed estensibile. "In che modo questo avrà un effetto simile a PostGIS" è una domanda spesso posta dal core PgSQL che valuta alcuni cambiamenti. Anche questa è una buona cosa, forse non abbastanza carina come PostGIS fa parte del core, ma abbastanza buono.

Ci sono altri motivi, come il lungo elenco di dipendenze che PgSQL core avrebbe odiato vedere, la coerenza del codice generalmente inferiore e la pulizia dell'API che avrebbero disperato di migliorare, e così via. Anche al momento del concepimento, PostGIS era una palla troppo grande perché PgSQL potesse ingoiare in un boccone.


Inoltre ... PostGIS è C ++. Questo sarebbe uno showtopper per una fusione PostgreSQL. Sia che dovrebbe essere o meno . Anche le dipendenze lo fermerebbero completamente: GDAL? Ha! Non riesco nemmeno a ottenere il core per accettare di dipendere da Perl> 5.8.0. Il ritmo di sviluppo è lento anche se si dispone di diritti di commit; i committer non si limitano a liberarsi gratuitamente di tutte le cose spinte nell'albero, devono anche passare attraverso la revisione del codice e ottenere grandi cambiamenti in mesi o anni. Ci sono vantaggi in termini di qualità del codice ma sicuramente non si muove rapidamente.
Craig Ringer,

È un problema particolare che il core Pg continua a reinventare le cose da evitare a seconda di più librerie esterne. Perché significherebbe $ ancient_unix_42 con $ weird_vendor_compiler su $ dead_architecture dovrebbe supportarlo, tutti i membri di buildfarm dovrebbero essere aggiornati, ecc. È uno dei problemi con l'essere maturo e stabile, credo.
Craig Ringer,

@CraigRinger Perché pensi che PostGIS sia C ++? Questo è un insulto :-)
Nicklas Avén il

Non è vero? Avrei potuto giurare Ma abbastanza sicuro non sembra. Colpa mia. In realtà mi piace comunque l'uso moderato e moderato del C ++.
Craig Ringer,

4
Per un certo periodo di tempo PostGIS ha avuto alcuni pezzi di C ++ per creare un legame con GEOS. Una volta che GEOS ha aggiunto la propria API C, quei pezzi sono stati rimossi e PostGIS è diventato "puro" C.
Paul Ramsey,

34

Semplicemente non è vero, PostgreSQL non supporta i tipi di dati spaziali. Supporta tipi geometrici. Questi sono perfettamente adatti per alcune cose, ma sono totalmente separati dai sistemi di coordinate del mondo reale. Tipi nativi

Aggiornare

Per quanto riguarda la domanda sull'indice, è nelle FAQ

Perché gli indici R-Tree PostgreSQL non sono supportati?

Le prime versioni di PostGIS utilizzavano gli indici PostgreSQL R-Tree. Tuttavia, gli alberi R PostgreSQL sono stati completamente scartati dalla versione 0.6 e l'indicizzazione spaziale è fornita con uno schema R-Tree-over-GiST.

I nostri test hanno dimostrato che la velocità di ricerca di R-Tree e GiST nativi è comparabile. Gli alberi R nativi PostgreSQL hanno due limitazioni che li rendono indesiderabili per l'uso con le funzionalità GIS (si noti che queste limitazioni sono dovute all'attuale implementazione nativa di R-Tree PostgreSQL, non al concetto R-Tree in generale):

  • Gli indici R-Tree in PostgreSQL non sono in grado di gestire funzionalità di dimensioni superiori a 8 KB. Gli indici GiST possono, usando il trucco "lossy" di sostituire il riquadro di delimitazione con la funzione stessa.

  • Gli indici R-Tree in PostgreSQL non sono "null safe", quindi la costruzione di un indice su una colonna geometrica che contiene geometrie null avrà esito negativo. [Gli indici GiST sono null-safe]


Puoi espandere il tuo ultimo punto: quello sugli indici GiST? PostgreSQL stava fornendo R-Tree e ora lo sta fornendo attraverso un indice GiST, quindi sono confuso su questo punto.
Zeruno,

aggiornato con testo diretto dalla faq.
Evan Carroll,

1
L'API GiST è una cosa PostgreSQL fornito da accesso / gist.h . Puoi vederlo in uso in PostGIS qui
Evan Carroll,

3
Mentre PostGIS ha la sua implementazione rtree-on-gist è molto simile a quello usato da PgSQL per il suo supporto core di oggetti grafici per la semplice ragione che originariamente abbiamo copiato il loro.
Paul Ramsey,

1
@Zeruno, No, la modifica dello splitter rtree in PgSQL non cambierà il comportamento di PostGIS, perché abbiamo il nostro, in gserialized_gist_picksplit_2d (). Non è così diverso da quello di PgSQL, se non del tutto.
Paul Ramsey,

8

PostGIS è un estensore di database spaziale per il database relazionale di oggetti PostgreSQL . Aggiunge il supporto per oggetti geografici consentendo l'esecuzione di query sulla posizione in SQL.

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

Oltre alla conoscenza di base della posizione, PostGIS offre molte funzionalità che raramente si trovano in altri database spaziali concorrenti come Oracle Locator / Spatial e SQL Server. Fare riferimento all'elenco delle funzioni di PostGIS per maggiori dettagli.

L'elenco delle caratteristiche di PostGIS espande anche queste funzionalità:

PostGIS aggiunge altri tipi (geometria, geografia, raster e altri) al database PostgreSQL . Aggiunge inoltre funzioni, operatori e miglioramenti dell'indice che si applicano a questi tipi spaziali. Queste funzioni aggiuntive, operatori, associazioni e tipi di indici aumentano la potenza del core DBMS PostgreSQL, rendendolo un sistema di gestione del database spaziale veloce, ricco di funzionalità e robusto.

Elenco delle caratteristiche

La serie PostGIS 2+ offre:

  • Funzioni di elaborazione e analisi per dati vettoriali e raster per giunzioni, cubetti, morphing, riclassificazione e raccolta / unione con la potenza dell'algebra delle mappe raster SQL per l'elaborazione raster a grana fine
  • Riproiezione spaziale Funzioni richiamabili SQL sia per i dati vettoriali che per quelli raster Supporto per l'importazione / esportazione di dati vettoriali di file di forma ESRI tramite sia gli strumenti impacchettati della riga di comando che della GUI e supporto per più formati tramite altri strumenti Open Source di terze parti
  • Riga di comando in pacchetto per l'importazione di dati raster da molti formati standard: GeoTiff, NetCDF, PNG, JPG

  • Rendering e importazione di funzioni di supporto di dati vettoriali per formati testuali standard come KML, GML, GeoJSON, GeoHash e WKT utilizzando SQL Rendering di dati raster in vari formati standard GeoTIFF, PNG, JPG, NetCDF, per citarne alcuni usando SQL

  • Funzioni SQL richiamabili senza soluzione di continuità raster / vettoriale per estrusione di valori di pixel per regione geometrica, esecuzione di statistiche per regione, raster di ritaglio di una geometria e vettorializzazione di raster Supporto di oggetti 3D, indice spaziale e funzioni Supporto di topologia di rete Packed Tiger Loader / Geocoder / Reverse Geocoder / utilizzando i dati US Census Tiger

Inoltre, ai punti / parti già menzionati in questo post. Vorrei aggiungere come indicato sul sito Web di PostGIS Come funziona

Poiché PostGIS è in C, può fare uso di altre librerie in C e C ++ e lo fa liberamente. PostGIS dipende da:

  • GEOS per molti algoritmi di elaborazione della geometria
  • Proj.4 per le funzioni di riproiezione di coordinate
  • GDAL per l'elaborazione raster e il supporto del formato
  • LibXML2 per l'analisi XML
  • JSON-C per l'analisi JSON
  • SFCGAL per supporto 3D esteso e algoritmi di geoprocessing aggiuntivi
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.