创建普通的非空间表。
添加空间列使用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
会执行的操作?#1 楼
不,它们不会产生相同的结果。使用第二种方法,您仍然需要在GEOMETRY_COLUMNS表中添加一条记录,并且您需要使用INSERT语句或使用Populate_Geometry_Columns的功能如另一个答案中所建议。
AddGeometryColumn将为您执行此操作(以及创建索引和约束)。
评论
供以后参考,这不再是正确的:postgis.net/docs/AddGeometryColumn.html
–Janosimas
17年7月7日13:21
#2 楼
两种方法应产生相同的结果。AddGeometryColumn
不仅会创建几何字段,还将验证并创建必要的索引。只要您手动执行所有这些操作,结果将是相同的。 如果现有几何列,则可以使用
Populate_Geometry_Columns
函数进行验证并创建必要的索引。评论
这是否意味着两种方法将产生相同的结果?
– BenjaminGolder
11年4月18日在23:01
如果您使用现有的geometry_columns,则将执行相同的操作,并正确验证和创建索引。您可以检查elsasoft.org/samples/postgre_postgis/…
– Senthil
2011年4月18日在23:10
抱歉@Senthil,我不太理解您的句子。当您说:“如果您使用现有的geometry_columns,请正确验证并创建索引”是什么意思?示例中缺少该命令吗?
– BenjaminGolder
2011年4月18日在23:42
@BenjaminGolder看看AddGeometryColumn使用此链接做了什么:elsasoft.org/samples/postgre_postgis / ...在您的情况下,只要在geometry_columns表中已经存在wkb_geometry并手动创建索引。因此,看起来不错。但是,最简单的选择是将AddGeometryColumn用于新字段。
– Senthil
2011-4-18 23:54
我修改了您的答案,使其更清晰。谢谢。
– BenjaminGolder
2011年4月19日在0:49
#3 楼
在PostGIS 2.0+中,可以直接使用通用数据定义语言创建几何列。例如:
-- 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);
评论
希望您不要抓取栅格的每个像素并将其存储为点:)一点都不。 :)但是我将在一些轮廓线串上使用ST_DumpPoints来填充此表。