SRID 4326 ve Geometri
MikeT'nin mükemmel, kapsamlı ve güncel cevabına bir not olarak . Birçok kişi bu soruyu soruyor gibi görünüyor, çünkü SRID'yi POINT sütununa ayarlamak istiyorlar.
CREATE TABLE foo ( geom geometry(Point,4326) );
Fakat bunu yaptıklarında, bir nokta yaratmanın en iyi yöntemi gibi görünen problemlerle karşılaşırlar, ancak ne yazık ki başları belaya girerler.
INSERT INTO foo (geom) VALUES ( ST_MakePoint(1,2) );
ERROR: Geometry SRID (0) does not match column SRID (4326);
Oradan iki seçeneğe sahip olma nedeni
ST_SetSRID( ST_MakePoint(1,2) )
SRID’yi manuel olarak ayarlayın; bu, en doğru yoldur ancak
- Kullanarak metinden yapılandırın
ST_GeomFromText
, bu mantıksal olarak yavaştır ve kıyaslamalara gerek duymaz: PostgreSQL, yapıcının argümanlarını metinden ayrıştırmak zorundadır. Aynı zamanda son derece çirkin kendisi.
Ne yazık ki, başka bir yol var.
Coğrafya Türü
İçin varsayılan SRID geography
değeri 4326'dır. Yeniyseniz, geography
yerine kullanmanızı öneririm geometry
. Aslında, genellikle istediğiniz farkı bilmiyorsanız geography
. Sütunları kolayca değiştirebilirsiniz.
BEGIN;
ALTER TABLE foo ADD COLUMN geog geography(point,4326);
UPDATE foo SET geog = geom::geography;
ALTER TABLE foo DROP COLUMN geom;
COMMIT;
Türü zaten açıkça yayın yapabilirsiniz Şimdi SRID 4326. ile ilişkili default çünkü artık ekleme daha kolaydır geography
, ya da sadece örtülü cast çalışmasına izin
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
Hangi şeye benziyor, (hepsi aynı şeyi ekler)
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 );
Metne dönüştürme ve daha sonra metni ayrıştırmak için PostgreSQL zorlayarak
ST_GeomFromText
veya ST_GeogFromText
saçma ve yavaştır.