SRID 4326 dan Geometri
Sebagai catatan untuk jawaban yang sangat baik, komprehensif, dan saat ini oleh MikeT . Banyak orang tampaknya mengajukan pertanyaan ini karena mereka ingin mengatur SRID pada kolom TITIK.
CREATE TABLE foo ( geom geometry(Point,4326) );
Tetapi ketika mereka melakukannya mereka mengalami masalah dengan apa yang tampaknya merupakan metode terbaik untuk menciptakan suatu poin, tetapi sayangnya mereka mengalami masalah.
INSERT INTO foo (geom) VALUES ( ST_MakePoint(1,2) );
ERROR: Geometry SRID (0) does not match column SRID (4326);
Dari sana, mereka beralasan memiliki dua opsi
- Atur SRID secara manual,
ST_SetSRID( ST_MakePoint(1,2) )
yang merupakan cara paling kanan tetapi kekar, atau
- Buat dari teks menggunakan
ST_GeomFromText
, ini lebih lambat secara logis dan tidak perlu benchmark: PostgreSQL harus menguraikan argumen konstruktor dari teks. Itu juga sangat jelek.
Sayangnya, ada cara lain.
Jenis Geografi
SRID default untuk geography
adalah 4326. Jika Anda baru, saya sarankan menggunakan geography
sebagai gantinya geometry
. Bahkan, umumnya jika Anda tidak tahu perbedaan yang mungkin Anda inginkan geography
. Anda dapat mengganti kolom dengan cukup mudah.
BEGIN;
ALTER TABLE foo ADD COLUMN geog geography(point,4326);
UPDATE foo SET geog = geom::geography;
ALTER TABLE foo DROP COLUMN geom;
COMMIT;
Sekarang penyisipan lebih mudah karena jenisnya sudah dikaitkan dengan default dengan SRID 4326. Sekarang Anda dapat secara eksplisit dilemparkan ke geography
, atau biarkan saja karya pemeran implisit bekerja
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
Yang terlihat seperti ini, (mereka semua memasukkan hte hal yang sama)
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 );
Konversi ke teks dan kemudian memaksa PostgreSQL untuk mem-parsing teks dengan
ST_GeomFromText
atau ST_GeogFromText
konyol dan lambat.