Dans la documentation PostGIS, il est indiqué qu'il existe deux étapes pour créer une table spatiale avec SQL:
- Créez une table non spatiale normale.
- Ajoutez une colonne spatiale à la table à l'aide de la fonction OpenGIS "AddGeometryColumn".
Si je suivais les exemples, je créerais un tableau appelé terrain_points
comme ceci:
CREATE TABLE terrain_points (
ogc_fid serial NOT NULL,
elevation double precision,
);
SELECT AddGeometryColumn('terrain_points', 'wkb_geometry', 3725, 'POINT', 3 );
Alternativement, si je regarde les tables existantes dans pgAdmin III , il semble que je pourrais créer la même table comme ceci:
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);
Ces deux méthodes produisent-elles le même résultat? La version basée sur pgAdmin III est-elle simplement plus verbeuse et fait-elle des choses qui AddGeometryColumn
feraient par défaut?
postgis
sql
postgresql
BenjaminGolder
la source
la source
Réponses:
Non, ils ne produisent pas les mêmes résultats.
Avec la deuxième méthode, vous devrez toujours ajouter un enregistrement dans la table GEOMETRY_COLUMNS, et vous devrez le faire avec une instruction INSERT, ou en utilisant la fonction Populate_Geometry_Columns comme suggéré dans l'autre réponse.
AddGeometryColumn se chargera de le faire pour vous (avec la création de l'index et des contraintes).
la source
Les deux méthodes devraient produire les mêmes résultats.
AddGeometryColumn
créera non seulement le champ de géométrie, mais aussi validera et créera les index nécessaires. Tant que vous effectuez toutes ces opérations manuellement, le résultat sera le même. Si vous avez une colonne de géométrie existante, vous pouvez utiliser laPopulate_Geometry_Columns
fonction pour la valider et créer les index nécessaires.la source
Dans PostGIS 2.0+, vous pouvez créer la colonne de géométrie directement à l'aide du langage de définition de données commun.
Par exemple:
la source