Dalam dokumentasi PostGIS dikatakan bahwa ada dua langkah untuk membuat tabel spasial dengan SQL:
- Buat tabel non-spasial normal.
- Tambahkan kolom spasial ke tabel menggunakan fungsi "AddGeometryColumn" OpenGIS.
Jika saya mengikuti contoh, saya akan membuat tabel bernama terrain_points
seperti ini:
CREATE TABLE terrain_points (
ogc_fid serial NOT NULL,
elevation double precision,
);
SELECT AddGeometryColumn('terrain_points', 'wkb_geometry', 3725, 'POINT', 3 );
Atau, jika saya melihat tabel yang ada di pgAdmin III , sepertinya saya bisa membuat tabel yang sama seperti ini:
CREATE TABLE terrain_points
(
ogc_fid serial NOT NULL,
wkb_geometry geometry,
elevation double precision,
CONSTRAINT terrain_points_pk PRIMARY KEY (ogc_fid),
CONSTRAINT enforce_dims_wkb_geometry CHECK (st_ndims(wkb_geometry) = 3),
CONSTRAINT enforce_geotype_wkb_geometry CHECK (geometrytype(wkb_geometry) = 'POINT'::text OR wkb_geometry IS NULL),
CONSTRAINT enforce_srid_wkb_geometry CHECK (st_srid(wkb_geometry) = 3725)
)
WITH (
OIDS=FALSE
);
ALTER TABLE terrain_points OWNER TO postgres;
-- Index: terrain_points_geom_idx
-- DROP INDEX terrain_points_geom_idx;
CREATE INDEX terrain_points_geom_idx
ON terrain_points
USING gist
(wkb_geometry);
Apakah kedua metode ini menghasilkan hasil yang sama? Apakah versi berdasarkan pgAdmin III hanya lebih verbose, dan melakukan hal-hal yang AddGeometryColumn
akan dilakukan secara default?
postgis
sql
postgresql
BenjaminGolder
sumber
sumber
Jawaban:
Tidak, mereka tidak menghasilkan hasil yang sama.
Dengan metode kedua Anda masih perlu menambahkan catatan di tabel GEOMETRY_COLUMNS, dan Anda perlu melakukannya dengan pernyataan INSERT, atau menggunakan fungsi Populate_Geometry_Columns seperti yang disarankan dalam jawaban lain.
AddGeometryColumn akan menangani hal ini untuk Anda (bersama-sama dengan membuat indeks dan kendala).
sumber
Kedua metode harus menghasilkan hasil yang sama.
AddGeometryColumn
tidak hanya akan membuat bidang geometri, itu akan memvalidasi dan membuat indeks yang diperlukan juga. Selama Anda melakukan semua hal ini secara manual, hasilnya akan sama. Jika Anda memiliki kolom geometri yang ada, Anda bisa menggunakanPopulate_Geometry_Columns
fungsi untuk memvalidasinya dan membuat indeks yang diperlukan.sumber
Di PostGIS 2.0+ Anda dapat membuat kolom geometri secara langsung menggunakan bahasa definisi data umum.
Sebagai contoh:
sumber