#postgis #geo-json #postgresql #dataset #import #performance

app popgis

将GeoJSON和ShapeFile快速插入PostGIS数据库的方法

6个版本

0.3.4 2024年7月24日
0.3.3 2024年7月20日
0.2.0 2024年7月8日

数据库接口中排名#105

Download history 206/week @ 2024-07-05 99/week @ 2024-07-12 230/week @ 2024-07-19 42/week @ 2024-07-26 1/week @ 2024-08-02

每月下载量275

授权MIT/ApacheAGPL-3.0+

1.5MB
871

PopGIS

将大量GeoJSON和ShapeFile快速插入PostGIS数据库的方法。

为什么?

将大型数据集导入PostGIS数据库可能需要很长时间,Popgis的目的是优化此类操作的性能。Popgis比ogr2ogr快2倍,特别是在与远程数据库的大文件输入时。虽然对于较小的数据集的性能提升可能很小,但对于大型数据集的效率提升是显著的。更多详细信息,请参阅基准测试部分。

安装

Cargo

如果您喜欢使用Cargo,可以通过运行Cargo install命令直接安装Popgis。

cargo install popgis

Homebrew

对于使用Homebrew的macOS用户,您可以通过添加适当的Homebrew tap来安装Popgis。

brew tap jjcfrancisco/popgis
brew install popgis
popgis --help

使用方法

以下是Popgis的可用命令和标志。

标志

input (简写: -i): 选择要插入PostGIS数据库的geojsonshapefile文件。

uri (简写: -u): 您要插入输入数据的PostGIS数据库。

schema (简写: -s): 指定表的位置。 可选默认为public。

table (简写: -t): 选择结果的表名。

srid:选择4326(WGS84)或3857(Web Mercator)。 可选默认为4326。

mode (简写: -m):选择覆盖追加失败模式。更多信息请参阅此处

示例

## GeoJSON -> PostGIS ##
popgis --input spain.geojson \
       --uri postgresql://my_username:my_password@localhost:5432/my_database \
       --schema osm \
       --table waters \
       --srid 3857

## ShapeFile -> PostGIS ##
popgis -i water_polygons.shp \
       -u  postgresql://my_username:my_password@localhost:5432/my_database \
       -s osm \
       -t waters
       -m overwrite

模式

覆盖模式将删除与模式/表名相同的现有表,并将数据写入新表。追加模式仅向现有表插入新数据。失败模式确保如果表中已存在表,则作业将失败以防止数据丢失。

基准测试

尽管基准测试范围有限,但基准测试表明,Popgis比ogr2ogr快2倍。这一点在大文件中最为明显。

ShapeFile

文件大小 popgis耗时 ogr2ogr 执行 环境
1.2GB 36秒 1分15秒 本地 PostGIS
1.2GB 36分钟 1小时14分钟 虚拟机 (n2-standard-4) PostGIS

本次测试使用的文件可以在这里找到。

GeoJSON

文件大小 popgis耗时 ogr2ogr 执行 环境
103.9MB 2秒 5秒 本地 PostGIS
103.9MB 2分14秒 5分钟 虚拟机 (n2-standard-4) PostGIS

本次测试使用的文件可以在这里找到。

未来实现

以下列出了即将实现的功能。

  • 从4326到3857(反之亦然)的项目。
  • 允许嵌套GeoJSON属性。
  • 降低GeoJSON文件的精度。
  • 新的验证命令来验证文件。
  • 合并不同类型的两列。

许可证

查看 LICENSE

依赖项

~16–26MB
~387K SLoC