Domanda

PostgreSQL supporta una varietà di tipi geometrici dal box, insieme a molti geometrici indici GiST che sembrano offrire l'indicizzazione spaziale dei dati.

E poi c'è anche PostGIS , che è un'estensione di PG.

Qual è la differenza tra il supporto spaziale integrato in PG e PostGIS?

Se la mia applicazione deve memorizzare coordinate geografiche (punti, aree, poligoni) e quindi eseguire query in modo efficiente (come punto-in-poligono, intersezione poligonale), ho bisogno di PostGIS o posso usare (probabilmente) il più conveniente e sintassi / tipi di dati integrati più semplici?

È stato utile?

Soluzione

Per prima cosa vorrei chiarire gli indici GiST: GiST è in realtà un framework per la creazione di indici per nuovi tipi di dati, non uno specifico schema di indicizzazione stesso. Questo framework sembra essere utilizzato per i tipi geometrici forniti con Postgres, ma è anche usato per un indice di somiglianza del testo corrispondente al trigramma su colonne di testo standard e, naturalmente, viene utilizzato dagli schemi di indicizzazione di molti pacchetti esterni, tra cui possiamo numero PostGIS.

Se i tipi di dati geometrici standard funzioneranno per te o se hai bisogno di PostGIS dipende interamente dalla tua applicazione.

PostGIS memorizza i dati geometrici in una colonna di tipo "geometria"; in questo puoi archiviare dati più o meno arbitrari (punti, cerchi, poligoni, what-have-you). L'indicizzazione è veloce e piuttosto sofisticata: può fare cose come l'indicizzazione con perdita di dati utilizzando i riquadri di delimitazione per forme complesse che non sono indicizzabili in altro modo ragionevole. Sono supportati diversi sistemi di riferimento spaziale, con conversione automatica dei risultati delle query. PostGIS supporta anche i formati OpenGIS standard del settore, che possono aiutare a condividere dati con altri sistemi.

Al contrario, l'insieme di tipi geometrici interni e i loro indici è molto meno sofisticato. Non esiste un vero "generico" tipo di geometria; invece devi scegliere di avere un tipo di colonna come punto, linea, cerchio, poligono o what-have-you; per le combinazioni, probabilmente dovrai usare più colonne. L'indicizzazione non è buona; non è possibile indicizzare molti tipi diversi di forme (sebbene sia possibile aggiungere il supporto per i box di delimitazione utilizzando una colonna separata per loro e generando manualmente i box di delimitazione) e gli indici probabilmente non sono così veloci in alcune situazioni. D'altra parte, se i tipi geometrici interni soddisfano le tue esigenze, ottieni il vantaggio che la tua applicazione è più facilmente trasportabile su altri sistemi su cui è installato Postgres ma non PostGIS.

Il mio consiglio sarebbe di giocare con i tipi geometrici interni e vedere quanto bene funziona per te; se inizi a riscontrare problemi, prova PostGIS.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top