置顶

加拿大机器人 SHP文件导入PostGIS及格式转换

作者:admin | 分类:加拿大机器人 | 浏览:2 | 日期:2026年05月15日

一、SHP文件导入PostGIS及格式转换

在处理SHP文件时,通常先将其导入PostGIS数据库,再进行格式转换,常用导入方法及后续转换如下:

1. 使用shp2pgsql工具导入并转换

shp2pgsql是PostGIS自带的命令行工具,可将SHP文件转换为SQL脚本并导入数据库,同时可指定输出格式:

# 将SHP文件转换为含WKT格式的SQL脚本
shp2pgsql -s 4326 -W "UTF-8" /path/to/your/file.shp your_table > wkt_output.sql

# 将SHP文件转换为含EWKB格式的SQL脚本
shp2pgsql -s 4326 -W "UTF-8" -b /path/to/your/file.shp your_table > ewkb_output.sql

参数说明:

  • -s 4326:指定空间参考系为WGS84(EPSG:4326)

  • -W "UTF-8":设置文件编码为UTF-8

  • -b:以二进制(EWKB)格式输出几何数据

导入SQL脚本到数据库:

psql -d your_database -U your_user -f wkt_output.sql

2. 使用ogr2ogr工具导入并转换

ogr2ogr是GDAL库的一部分,支持多种地理空间数据格式转换,可直接将SHP文件导入PostGIS并指定格式:

# 导入SHP文件并将几何数据存储为WKT格式
ogr2ogr -f PostgreSQL "dbname='your_database' host='localhost' port='5432' user='postgres' password='your_password'" /path/to/your/file.shp -nln your_table -lco geometry_name=geom -lco FID=gid -lco GEOMETRY_TYPE=WKT

# 导入SHP文件并将几何数据存储为EWKB格式
ogr2ogr -f PostgreSQL "dbname='your_database' host='localhost' port='5432' user='postgres' password='your_password'" /path/to/your/file.shp -nln your_table -lco geometry_name=geom -lco FID=gid -lco GEOMETRY_TYPE=EWKB

二、PostGIS中Geom字段与WKT相互转换

1. Geom字段转WKT

使用ST_AsText函数可将PostGIS中的几何对象转换为WKT格式:

-- 将单个几何对象转换为WKT
SELECT ST_AsText(geom) AS wkt_geom FROM your_table WHERE id = 1;

-- 将整列几何对象转换为WKT
SELECT id, ST_AsText(geom) AS wkt_geom FROM your_table;

若需要包含空间参考系(SRID)信息,可使用ST_AsEWKT函数:

SELECT ST_AsEWKT(geom) AS ewkt_geom FROM your_table WHERE id = 1;

2. WKT转Geom字段

使用ST_GeomFromText函数可将WKT格式的文本转换为PostGIS几何对象:

-- 将WKT转换为几何对象并插入表中
INSERT INTO your_table (geom) VALUES (ST_GeomFromText('POINT(116.403874 39.914885)', 4326));

-- 更新表中的几何对象
UPDATE your_table SET geom = ST_GeomFromText('LINESTRING(116.403874 39.914885, 116.405874 39.916885)', 4326) WHERE id = 1;

参数说明:

  • 第一个参数为WKT格式的文本

  • 第二个参数为空间参考系ID(如4326代表WGS84)

若WKT文本中已包含SRID信息(如SRID=4326;POINT(116.403874 39.914885)),可使用ST_GeomFromEWKT函数:

INSERT INTO your_table (geom) VALUES (ST_GeomFromEWKT('SRID=4326;POINT(116.403874 39.914885)'));

三、PostGIS中Geom字段与EWKB相互转换

1. Geom字段转EWKB

使用ST_AsEWKB函数可将PostGIS中的几何对象转换为EWKB格式:

-- 将单个几何对象转换为EWKB(十六进制字符串形式)
SELECT ST_AsEWKB(geom) AS ewkb_geom FROM your_table WHERE id = 1;

-- 将整列几何对象转换为EWKB
SELECT id, ST_AsEWKB(geom) AS ewkb_geom FROM your_table;

若需要二进制格式的EWKB,可使用ST_AsBinary函数:

SELECT ST_AsBinary(geom) AS ewkb_binary FROM your_table WHERE id = 1;

2. EWKB转Geom字段

使用ST_GeomFromEWKB函数可将EWKB格式的数据转换为PostGIS几何对象:

-- 将十六进制字符串形式的EWKB转换为几何对象
INSERT INTO your_table (geom) VALUES (ST_GeomFromEWKB('0101000020E6100000000000000000F03F0000000000000040'));

-- 将二进制格式的EWKB转换为几何对象
INSERT INTO your_table (geom) VALUES (ST_GeomFromEWKB('\x0101000020E6100000000000000000F03F0000000000000040'));

也可使用ST_GeomFromWKB函数,需同时指定SRID:

INSERT INTO your_table (geom) VALUES (ST_SetSRID(ST_GeomFromWKB('\x0101000000000000000000F03F0000000000000040'), 4326));

四、批量转换与数据导出

1. 批量将Geom字段转换为WKT并导出

-- 将查询结果导出为CSV文件,包含ID和WKT格式的几何数据
COPY (SELECT id, ST_AsText(geom) AS wkt_geom FROM your_table) TO '/path/to/wkt_output.csv' WITH CSV HEADER;

2. 批量将WKT数据导入并转换为Geom字段

假设存在一个包含WKT数据的CSV文件(wkt_data.csv),格式如下:

id,wkt_geom
1,POINT(116.403874 39.914885)
2,LINESTRING(116.403874 39.914885, 116.405874 39.916885)

可使用以下命令导入并转换:

# 创建临时表存储CSV数据
CREATE TEMP TABLE temp_wkt_data (id INT, wkt_geom TEXT);

# 导入CSV数据到临时表
COPY temp_wkt_data FROM '/path/to/wkt_data.csv' WITH CSV HEADER;

# 将WKT数据转换为几何对象并插入目标表
INSERT INTO your_table (id, geom) SELECT id, ST_GeomFromText(wkt_geom, 4326) FROM temp_wkt_data;

</doc_start> 以上涵盖了SHP文件与PostGIS数据库间WKT和EWKB格式相互转换的常用SQL操作及工具使用方法,您可根据实际需求选择合适的方式进行数据处理。