W dokumentacji PostGIS jest napisane, że istnieją dwa kroki do utworzenia tabeli przestrzennej za pomocą SQL:
- Utwórz normalną tabelę nieprzestrzenną.
- Dodaj kolumnę przestrzenną do tabeli za pomocą funkcji „AddGeometryColumn” OpenGIS.
Gdybym podążał za przykładami, stworzyłbym tabelę o terrain_points
takiej nazwie :
CREATE TABLE terrain_points (
ogc_fid serial NOT NULL,
elevation double precision,
);
SELECT AddGeometryColumn('terrain_points', 'wkb_geometry', 3725, 'POINT', 3 );
Alternatywnie, jeśli spojrzę na istniejące tabele w pgAdmin III , wygląda na to, że mógłbym stworzyć taką samą tabelę:
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);
Czy te dwie metody dają ten sam wynik? Czy wersja oparta na pgAdmin III jest po prostu bardziej gadatliwa i robi rzeczy, AddGeometryColumn
które domyślnie by działały?
postgis
sql
postgresql
BenjaminGolder
źródło
źródło
Odpowiedzi:
Nie, nie dają takich samych wyników.
Drugą metodą nadal musisz dodać rekord do tabeli GEOMETRY_COLUMNS i musisz to zrobić za pomocą instrukcji INSERT lub za pomocą funkcji Populate_Geometry_Columns, jak sugerowano w drugiej odpowiedzi.
AddGeometryColumn zajmie się tym za Ciebie (wraz z tworzeniem indeksu i ograniczeń).
źródło
Dwie metody powinny dawać takie same wyniki.
AddGeometryColumn
nie tylko utworzy pole geometrii, ale także zweryfikuje i utworzy niezbędne indeksy. Tak długo, jak robisz to wszystko ręcznie, rezultat będzie taki sam. Jeśli masz istniejącą kolumnę geometrii, możesz użyćPopulate_Geometry_Columns
funkcji do sprawdzenia jej poprawności i utworzenia niezbędnych indeksów.źródło
W PostGIS 2.0+ możesz bezpośrednio utworzyć kolumnę geometrii, używając wspólnego języka definicji danych.
Na przykład:
źródło