В документации PostGIS говорится, что есть два шага для создания пространственной таблицы с SQL:
- Создайте обычную непространственную таблицу.
- Добавьте пространственный столбец в таблицу, используя функцию OpenGIS «AddGeometryColumn».
Если бы я следовал за примерами, я бы создал таблицу под названием terrain_points
так:
CREATE TABLE terrain_points (
ogc_fid serial NOT NULL,
elevation double precision,
);
SELECT AddGeometryColumn('terrain_points', 'wkb_geometry', 3725, 'POINT', 3 );
В качестве альтернативы, если я посмотрю на существующие таблицы в pgAdmin III , мне кажется, что я мог бы создать такую же таблицу, например:
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);
Эти два метода дают одинаковый результат? Является ли версия, основанная на pgAdmin III, просто более многословной, и делает ли она то, что AddGeometryColumn
будет по умолчанию?
postgis
sql
postgresql
BenjaminGolder
источник
источник
Ответы:
Нет, они не дают одинаковых результатов.
Со вторым методом вам все равно нужно добавить запись в таблицу GEOMETRY_COLUMNS, и вам нужно будет сделать это с помощью оператора INSERT или с помощью функции Populate_Geometry_Columns, как это предлагается в другом ответе.
AddGeometryColumn позаботится о том, чтобы сделать это за вас (вместе с созданием индекса и ограничений).
источник
Два метода должны давать одинаковые результаты.
AddGeometryColumn
не только создаст поле геометрии, но также проверит и создаст необходимые индексы. Пока вы делаете все это вручную, результат будет одинаковым. Если у вас есть столбец геометрии, вы можете использоватьPopulate_Geometry_Columns
функцию для его проверки и создания необходимых индексов.источник
В PostGIS 2.0+ вы можете создавать столбец геометрии напрямую, используя общий язык определения данных.
Например:
источник