Creando tablas espaciales con PostGIS

18

En la documentación de PostGIS dice que hay dos pasos para crear un espacio tabla con SQL:

  
  1. Cree una tabla no espacial normal.
  2.   
  3. Agregue una columna espacial a la tabla usando la función "AddGeometryColumn" de OpenGIS.
  4.   

Si siguiera los ejemplos, crearía una tabla llamada terrain_points como esta:

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ía por defecto?

    
pregunta BenjaminGolder 19.04.2011 - 00:50

3 respuestas

8

No, no están produciendo los mismos resultados.

Con el segundo método aún necesitarías agregar un registro en la tabla GEOMETRY_COLUMNS, y deberías 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).

    
respondido por el capooti 19.04.2011 - 14:26
6

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 hagas todas estas cosas manualmente, el resultado será el mismo. Si tiene una columna de geometría existente, puede usar la Populate_Geometry_Columns function para validarla y crearla. Índices necesarios.

    
respondido por el Senthil 19.04.2011 - 00:57
4

En PostGIS 2.0+ puede crear la columna de geometría directamente usando un lenguaje de definición de datos común.

Por ejemplo:

-- points in geographic wgs84 coordinates (epsg:4326)
create table mypoints (id serial, name varchar, geom geometry(Point, 4326));

-- lines in spherical mercator (epsg:3857)
create table mylines (id serial, name varchar, geom geometry(LineString, 3857));

-- polygons in Dutch national coordinate system (epsg:28992)
create table mypolygons (id serial, name varchar, geom geometry(Polygon, 28992));

-- multipolygons in British National Grid (epsg:27700)
create table 
  mymultipolygons(id serial, name varchar, geom geometry(Multipolygon, 27700));

-- generic geometry (no data type constraints)
create table mygeometries(id serial, name varchar, geom geometry);
    
respondido por el anneb 23.10.2017 - 13:33

Lea otras preguntas en las etiquetas