GIS矢量数据上传到postgresql数据库的三种方式
上传GIS矢量数据到PostgreSQL数据库可以通过以下几种方式实现:
- 使用PostGIS扩展的
shp2pgsql
工具:
shp2pgsql -s SRID source_shp_file | psql -U username -d database_name
- 使用PostGIS扩展的
ogr2ogr
工具:
ogr2ogr -f "PostgreSQL" PG:username:database_name source_vector_file
- 编写自定义的数据导入脚本,使用Python的
psycopg2
库和GDAL
库。
以下是一个简单的Python脚本示例,使用psycopg2
和GDAL
将矢量数据上传到PostgreSQL数据库:
from osgeo import ogr
import psycopg2
# 连接PostgreSQL数据库
conn = psycopg2.connect(dbname="database_name", user="username", password="password")
cur = conn.cursor()
# 加载矢量数据
vector_file = 'path_to_vector_data.shp'
ds = ogr.Open(vector_file, 0)
layer = ds.GetLayer()
# 创建PostGIS表
cur.execute("CREATE TABLE schema_name.table_name (LIKE schema_name.table_name_template INCLUDING ALL)")
# 设置SRS(坐标参考系统)
srs = layer.GetSpatialRef().ExportToWkt()
cur.execute(f"SELECT AddGeometryColumn('schema_name', 'geometry', %s, %s)", (layer.GetGeometryType(), srs))
# 创建索引以提高性能
cur.execute("CREATE INDEX idx_geometry ON schema_name.table_name USING GIST (geometry)")
# 遍历每个特征并插入数据库
for feature in layer:
geom = feature.GetGeometryRef()
geom.ExportToWkb()
wkt = geom.ExportToWkt()
values = (wkt,)
columns = 'geometry'
cur.execute(f"INSERT INTO schema_name.table_name ({columns}) VALUES (%s)", values)
# 提交更改并关闭连接
conn.commit()
cur.close()
conn.close()
确保在运行脚本之前已经安装了psycopg2
和GDAL
库,并且配置好了PostgreSQL数据库以及相应的PostGIS扩展。
评论已关闭