当我们有一些存为csv文本形式的地理数据,其中的地理要素用wkt表示,如何导入PostGIS呢?
我们拥有一个csv文件,内容如下:
id,participant,geom,startt,endt
1,1,"LINESTRING(20.331 54.33, 21.67 44.89, 12.67 13.5679)",2014-03-09 13:30:33,2014-03-09 13:31:33
2,2,"LINESTRING(25.331 14.33, 41.67 44.119, 15.67 23.5679, 34.55 48.11)",2014-03-10 13:30:33,2014-03-10 13:31:33
3,1,"LINESTRING(21.331 51.33, 11.67 44.32, 32.67 13.59)",2014-03-22 13:30:33,2014-03-23 13:31:33
4,5,"LINESTRING(10.331 24.22, 23.37 34.89, 22.17 12.29)",2014-03-24 13:30:33,2014-03-24 13:31:33
我们希望将该csv文件加载到Postgres里,并且将其中的地理数据从文本形式转化为几何要素(地理要素)。
1)首先,在你的数据库中,确保已经创建了postgis拓展。
SELECT PostGIS_Full_Version();
如果查询结果显示尚未创建postgis拓展,那么运行以下代码创建postgis拓展:
CREATE EXTENSION postgis; ;
2)然后,打开PgAdmin,在你的数据库中运行以下script,以新建一个表。
CREATE TABLE public.linestringtest
(
id integer NOT NULL,
participant integer,
geom text,
startt timestamp without time zone,
endt timestamp without time zone,
CONSTRAINT linestringtest_pkey PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.linestringtest
OWNER TO postgres;
3)此后,运行以下代码将csv文件中的数据导入新建的表。需要注意的是,在csv文件中,不要含有题头那一栏(“id,participant,geom,startt,endt”),首行应当直接从数据内容本身开始。DELIMITER参数是指你的csv文件中用于分隔的符号。
COPY linestringtest (id,participant,geom,startt,endt)
FROM '/home/linestringtest.csv'
WITH (FORMAT csv , DELIMITER E',', NULL '');
4)现在,我们要将几何元素所在列geom从text文本格式转为geometry几何格式。此步骤中,可以将坐标系统SRID同时写入数据。
ALTER TABLE public.linestringtest ALTER COLUMN geom TYPE geometry USING ST_SetSRID((geom::GEOMETRY), 4326);
完成✅