En la documentación de PostGIS dice que hay dos pasos para crear una tabla espacial con SQL:
- Crea una tabla normal no espacial.
- Agregue una columna espacial a la tabla usando la función OpenGIS "AddGeometryColumn".
Si siguiera los ejemplos, crearía una tabla llamada terrain_points
así:
CREATE TABLE terrain_points (
ogc_fid serial NOT NULL,
elevation double precision,
);
SELECT AddGeometryColumn('terrain_points', 'wkb_geometry', 3725, 'POINT', 3 );
Alternativamente, si miro las tablas existentes en pgAdmin III , parece que podría crear la misma tabla de esta manera:
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);
¿Estos dos métodos producen el mismo resultado? ¿La versión basada en pgAdmin III es simplemente más detallada y hace cosas que AddGeometryColumn
harían de manera predeterminada?
postgis
sql
postgresql
BenjaminGolder
fuente
fuente
Respuestas:
No, no están produciendo los mismos resultados.
Con el segundo método aún necesitaría agregar un registro en la tabla GEOMETRY_COLUMNS, y necesitaría hacerlo con una instrucción INSERT, o usando la función Populate_Geometry_Columns como se sugiere en la otra respuesta.
AddGeometryColumn se encargará de hacer esto por usted (junto con la creación del índice y las restricciones).
fuente
Los dos métodos deberían producir los mismos resultados.
AddGeometryColumn
no solo creará el campo de geometría, sino que también validará y creará los índices necesarios. Mientras haga todas estas cosas manualmente, el resultado será el mismo. Si tiene una columna de geometría existente, puede usar laPopulate_Geometry_Columns
función para validarla y crear los índices necesarios.fuente
En PostGIS 2.0+ puede crear la columna de geometría directamente usando un lenguaje de definición de datos común.
Por ejemplo:
fuente