PostGIS를 사용하여 공간 테이블 생성


20

PostGIS 문서 에는 SQL로 공간 테이블을 생성하는 두 단계가 있다고 말합니다 .

  1. 일반 비 공간 테이블을 작성하십시오.
  2. 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기본적으로 수행되는 작업을 수행합니까?


난 당신이 래스터의 모든 단일 픽셀을 잡아 포인트로 저장하지 않기를 바랍니다 :)
Ragi Yaser Burhum

아니, 전혀. :) 그러나이 표를 채우기 위해 일부 등고선 문자열에 ST_DumpPoints를 사용하려고합니다.
BenjaminGolder

답변:


9

아니요, 동일한 결과를 생성하지 않습니다.

두 번째 방법을 사용하면 GEOMETRY_COLUMNS 테이블에 레코드를 추가해야하며, INSERT 문 또는 다른 답변에서 제안 된 Populate_Geometry_Columns 함수를 사용하여 레코드를 추가해야합니다.

AddGeometryColumn은 인덱스 및 제약 조건 생성과 함께이 작업을 처리합니다.


2
나중에 참조하기 위해 이것은 더 이상 사실이 아닙니다. postgis.net/docs/AddGeometryColumn.html
Janosimas

7

두 방법 모두 동일한 결과를 생성해야합니다. AddGeometryColumn지오메트리 필드를 생성 할뿐만 아니라 필요한 인덱스도 검증하고 생성합니다. 이 모든 작업을 수동으로 수행하는 한 결과는 동일합니다. 기존 기하학 열이있는 경우 Populate_Geometry_Columns함수 를 사용하여 유효성을 검사하고 필요한 색인을 작성할 수 있습니다.


이것이 두 방법이 동일한 결과를 생성한다는 것을 의미합니까?
BenjaminGolder

기존 geometry_columns를 사용하는 경우 인덱스의 유효성을 검사하고 올바로 만들면 동일하게 수행됩니다. elsasoft.org/samples/postgre_postgis/…를
Senthil

미안 @Senthil, 나는 당신의 문장을 이해하지 못합니다. "기존 geometry_columns를 사용하는 경우 인덱스의 유효성을 검사하고 올바로 만들었습니다"라는 말의 의미는 무엇입니까? 예제에서 누락 된 명령입니까?
BenjaminGolder

@BenjaminGolder이 링크를 사용하여 AddGeometryColumn이 수행하는 작업을 살펴보십시오. elsasoft.org/samples/postgre_postgis/… wkb_geometry가 이미 geometry_columns 테이블에 있고 인덱스를 수동으로 생성하는 한. 그래서 괜찮아 보입니다. 그러나 가장 쉬운 옵션은 AddGeometryColumn을 사용하여 새 필드를 만드는 것입니다.
Senthil

더 명확하게 답변을 편집했습니다. 고맙습니다.
BenjaminGolder

5

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);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.