24 votos

Creación de tablas espaciales con PostGIS

En el PostGIS la documentación dice que hay dos pasos para crear una tabla espacial con SQL:

  1. Crear una normal de no-espacial de la tabla.
  2. Agregar una columna espacial a la mesa con el OpenGIS "AddGeometryColumn" de la función.

Si he seguido los ejemplos, me gustaría crear una tabla llamada terrain_points como este:

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, me parece que se podría crear la misma tabla como esta:

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);

Hacer estos dos métodos producen el mismo resultado? Es la versión basada en pgAdmin III simplemente más detallado, y hacer las cosas que AddGeometryColumn lo haría por defecto?

Gracias.

9voto

Daniel Auger Puntos 8459

No, no producen los mismos resultados.

Con el segundo método aún se necesita agregar un registro en la tabla GEOMETRY_COLUMNS, y tendría que hacerlo con una instrucción INSERT, o el uso de la Populate_Geometry_Columns función de como se sugiere en la otra respuesta.

AddGeometryColumn se encargará de hacer esto para usted (junto con la creación del índice y las restricciones).

7voto

Knox Puntos 1979

Los dos métodos debe producir los mismos resultados. AddGeometryColumn no sólo crear la geometría de campo, se podrá validar y crear necesarios índices demasiado. Mientras haces todas estas cosas manualmente, el resultado será el mismo. Si usted tiene una geometría de la columna, puede utilizar el Populate_Geometry_Columns función para validar y crear los índices.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X