SRID 4326 e geometria
Come nota a margine dell'eccellente, completa e attuale risposta di MikeT . Molte persone sembrano porre questa domanda perché vogliono impostare lo SRID su una colonna POINT.
CREATE TABLE foo ( geom geometry(Point,4326) );
Ma quando lo fanno incontrano problemi con quello che sembra il metodo migliore per creare un punto, ma purtroppo si trovano in difficoltà.
INSERT INTO foo (geom) VALUES ( ST_MakePoint(1,2) );
ERROR: Geometry SRID (0) does not match column SRID (4326);
Da lì, pensano di avere due opzioni
- Impostare manualmente l'SRID,
ST_SetSRID( ST_MakePoint(1,2) )che è il modo più giusto ma crufty, o
- Costruisci usando il testo
ST_GeomFromText, questo è logicamente più lento e non ha bisogno di parametri di riferimento: PostgreSQL deve analizzare gli argomenti del costruttore dal testo. È anche estremamente brutto stesso.
Ahimè, c'è un altro modo.
Tipo di geografia
L'SRID predefinito per geographyè 4326. Se sei nuovo, suggerirei di utilizzare geographyinvece di geometry. In effetti, generalmente se non conosci la differenza che probabilmente desideri geography. Puoi cambiare le colonne abbastanza facilmente.
BEGIN;
ALTER TABLE foo ADD COLUMN geog geography(point,4326);
UPDATE foo SET geog = geom::geography;
ALTER TABLE foo DROP COLUMN geom;
COMMIT;
Ora l'inserimento è più semplice perché il tipo è già associato per impostazione predefinita a SRID 4326. Ora è possibile eseguire il cast esplicito geographyo semplicemente consentire al cast implicito di funzionare
ST_MakePoint(x,y) -- implicit cast and srid
ST_MakePoint(x,y)::geography -- explicit cast, implicit srid
ST_SetSRID( ST_MakePoint(3,4), 4326 ) -- explicit cast and srid
Che assomiglia a questo, (tutti inseriscono la stessa cosa)
INSERT INTO foo (geog) VALUES
-- implicit cast and SRID
( ST_MakePoint(1,2) ),
-- explicit cast, implicit SRID
( ST_MakePoint(1,2)::geography ),
-- explicit cast and SRID
( ST_SetSRID( ST_MakePoint(3,4), 4326 )::geography );
La conversione in testo e quindi forzare PostgreSQL a analizzare il testo con
ST_GeomFromTexto ST_GeogFromTextè sciocco e lento.