In der PostGIS-Dokumentation heißt es, dass es zwei Schritte zum Erstellen einer räumlichen Tabelle mit SQL gibt:
- Erstellen Sie eine normale nicht räumliche Tabelle.
- Fügen Sie der Tabelle mit der OpenGIS-Funktion "AddGeometryColumn" eine räumliche Spalte hinzu.
Wenn ich den Beispielen folgen würde, würde ich eine Tabelle mit folgendem Namen erstellen terrain_points
:
CREATE TABLE terrain_points (
ogc_fid serial NOT NULL,
elevation double precision,
);
SELECT AddGeometryColumn('terrain_points', 'wkb_geometry', 3725, 'POINT', 3 );
Wenn ich mir alternativ vorhandene Tabellen in pgAdmin III ansehe , könnte ich die gleiche Tabelle wie folgt erstellen:
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);
Erzielen diese beiden Methoden dasselbe Ergebnis? Ist die auf pgAdmin III basierende Version einfach ausführlicher und erledigt sie Dinge, AddGeometryColumn
die standardmäßig funktionieren würden?
postgis
sql
postgresql
BenjaminGolder
quelle
quelle
Antworten:
Nein, sie liefern nicht die gleichen Ergebnisse.
Bei der zweiten Methode müssten Sie weiterhin einen Datensatz in die Tabelle GEOMETRY_COLUMNS einfügen und dies mit einer INSERT-Anweisung oder mit der Funktion Populate_Geometry_Columns, wie in der anderen Antwort vorgeschlagen.
AddGeometryColumn übernimmt dies für Sie (zusammen mit der Erstellung des Index und der Einschränkungen).
quelle
Die beiden Methoden sollten die gleichen Ergebnisse liefern.
AddGeometryColumn
erstellt nicht nur das Geometriefeld, sondern validiert und erstellt auch die erforderlichen Indizes. Solange Sie all diese Dinge manuell erledigen, ist das Ergebnis dasselbe. Wenn Sie über eine vorhandene Geometriespalte verfügen, können Sie diese mit derPopulate_Geometry_Columns
Funktion validieren und die erforderlichen Indizes erstellen.quelle
In PostGIS 2.0+ können Sie die Geometriespalte direkt mithilfe einer gemeinsamen Datendefinitionssprache erstellen.
Beispielsweise:
quelle