답변:
기존 테이블에 열을 추가하려면 다음과 같이 ALTER TABLE DDL을 사용하십시오 .
ALTER TABLE my_table
ADD COLUMN the_geom_mercator
geometry(Geometry,3857);
다음을 사용하여 다른 열 (the_geom)에서 채울 수 있습니다.
UPDATE my_table SET
the_geom_mercator = ST_Transform(the_geom, 3857)
FROM spatial_ref_sys
WHERE ST_SRID(the_geom) = srid;
세 번째 줄 FROM spatial_ref_sys ...
은 필요하지 않지만 알 수 없거나 유효하지 않은 투영으로 변환 시도를 보호하여 오류가 발생합니다.
이 테이블을 유지 관리 (추가 / 업데이트)하려는 경우 트리거 기능을 사용하여 _geom_mercator를 업데이트 할 수 있습니다. 예를 들면 다음과 같습니다.
CREATE OR REPLACE FUNCTION my_table_tg_fn() RETURNS trigger AS
$BODY$BEGIN
IF TG_OP = 'INSERT' AND NEW.the_geom ISNULL THEN
RETURN NEW; -- no new geometry
ELSIF TG_OP = 'UPDATE' THEN
IF NEW.the_geom IS NOT DISTINCT FROM OLD.the_geom THEN
RETURN NEW; -- same old geometry
END IF;
END IF;
-- Attempt to transform a geometry
BEGIN
NEW.the_geom_mercator := ST_Transform(NEW.the_geom, 3857);
EXCEPTION WHEN SQLSTATE 'XX000' THEN
RAISE WARNING 'the_geom_mercator not updated: %', SQLERRM;
END;
RETURN NEW;
END;$BODY$ LANGUAGE plpgsql;
CREATE TRIGGER my_table_tg BEFORE INSERT OR UPDATE
ON my_table FOR EACH ROW
EXECUTE PROCEDURE my_table_tg_fn();
ST_Transform은 오류를 포착하고 경고를 표시해야합니다. 예를 들면 다음과 같습니다.
postgis=# INSERT INTO my_table(the_geom)
postgis-# VALUES (ST_SetSRID(ST_MakePoint(0,1), 123))
postgis-# RETURNING the_geom, the_geom_mercator;
WARNING: the_geom_mercator not updated: GetProj4StringSPI: Cannot find SRID (123) in spatial_ref_sys
-[ RECORD 1 ]-----+---------------------------------------------------
the_geom | 01010000207B0000000000000000000000000000000000F03F
the_geom_mercator |
INSERT 0 1
shp2psql
통해 파이프를 만들 때 테이블이 생성됩니다 psql
. 그래서 테이블이 존재하기 전에 트리거를 실제로 추가 할 수 없습니까?
제한되지 않은 SRID 지오메트리 열을 생성하여 기본 형식을 유지 한 다음 기존 형식으로 변환 할 수 있습니다. 다음은 준비 테이블에서 복사하는 다각형이 있다고 가정 한 예입니다. 혼합 한 경우 유형을 기하학 (예 : geometry (Geometry, 3857))으로 설정할 수 있습니다.
CREATE TABLE poi(gid serial primary key,
geom_native geometry(POLYGON),
geom_mercator geometry(POLYGON,3857) );
INSERT INTO TABLE poi(geom_native, geom_mercator)
SELECT geom, ST_Transform(geom, 3857)
FROM staging.imported_poly;
geom
열 이있는 테이블이 있고 다른 the_geom_webmercator
열 을 추가하려고 한다고 가정 해 봅시다 . 어떻게해야합니까?