geojson-to-sqlite 作者:simonw

星标

README 源代码

geojson-to-sqlite

PyPI Changelog Tests License

用于将 GeoJSON 转换为 SQLite(可选择使用 SpatiaLite)的 CLI 工具

RFC 7946: GeoJSON 格式

如何安装

$ pip install geojson-to-sqlite

如何使用

您可以像这样针对 GeoJSON 文件运行此工具

$ geojson-to-sqlite my.db features features.geojson

这将把 features.geojson 文件中的所有要素加载到名为 features 的表中。

每一行将有一个包含要素几何的 geometry 列,以及附加到这些要素的任何 properties 中找到的每个键对应的列。(要将所有属性打包成一个 JSON 对象,请使用 --properties 标志。)

第一次运行此命令时将创建该表。

在后续运行中,您可以使用 --alter 选项添加表中缺失的任何新列。

您可以传递多个 GeoJSON 文件,在这种情况下,所有文件的内容将被插入到同一个表中。

如果您的要素具有 "id" 属性,它将被用作该表的主键。您也可以使用 --pk=PROPERTY 并指定不同属性的名称来将其用作主键。如果您不想使用 "id" 作为主键(可能它包含重复值),您可以使用 --pk '' 来指定没有主键。

指定主键还将允许您将数据 upsert 到行中,而不是将数据插入到新行中。

如果未指定主键,将使用 SQLite rowid 列。

您可以使用 - 作为文件名从标准输入导入。例如

$ curl https://eric.clst.org/assets/wiki/uploads/Stuff/gz_2010_us_040_00_20m.json \
    | geojson-to-sqlite my.db states - --pk GEO_ID

与 SpatiaLite 一起使用

默认情况下,geometry 列将包含 JSON。

如果您已经安装了 SQLite 的 SpatiaLite 模块,您可以改为将几何数据导入到具有地理空间索引的列中。

您可以使用 --spatialite 选项来实现,如下所示

$ geojson-to-sqlite my.db features features.geojson --spatialite

该工具将在以下位置查找 SpatiaLite 模块

  • /usr/lib/x86_64-linux-gnu/mod_spatialite.so
  • /usr/local/lib/mod_spatialite.dylib

如果您已将模块安装在其他位置,可以使用 --spatialite_mod=xxx 选项来指定位置

$ geojson-to-sqlite my.db features features.geojson \
    --spatialite_mod=/usr/lib/mod_spatialite.dylib

您可以使用 --spatial-index 选项在 geometry 列上创建 SpatiaLite 空间索引

$ geojson-to-sqlite my.db features features.geojson --spatial-index

使用此选项意味着同时也使用了 --spatialite,因此您无需另外添加该选项。

流式处理大型数据集

对于大型数据集,考虑使用换行符分隔的 JSON(newline-delimited JSON)将要素流式传输到数据库中,而无需将整个要素集合加载到内存中。

例如,要从 USGS 加载一天的地震报告

$ geojson-to-sqlite quakes.db quakes tests/quakes.ndjson \
  --nl --pk=id --spatialite

使用换行符分隔的 JSON 时,表也将从第一个要素创建,而不是根据前 100 个要素猜测类型。

如果您想使用更大一部分数据来猜测列类型(例如,如果某些字段不一致),您可以使用 fiona 将要素收集到单个集合中。

$ head tests/quakes.ndjson | fio collect | \
  geojson-to-sqlite quakes.db quakes - --spatialite

这将从 tests/quakes.ndjson 中获取前 10 行,将它们传递给 fio collect,后者将它们转换为单个要素集合,然后依次将该集合传递给 geojson-to-sqlite

与 Datasette 一起使用

使用此工具创建的数据库可以使用 Datasette 进行探索和发布。

Datasette 文档中包含一个关于 如何使用它浏览 SpatiaLite 数据库 的章节。

datasette-leaflet-geojson 插件可用于在 Leaflet 地图上可视化包含 GeoJSON 几何数据的列。

如果您正在使用 SpatiaLite,您需要将几何数据输出为 GeoJSON 格式才能使该插件正常工作。您可以使用 SpaitaLite 的 AsGeoJSON() 函数来做到这一点 - 示例如下

select rowid, AsGeoJSON(geometry) from mytable limit 10

datasette-geojson-map 是一个替代插件,它会在相应的表页面上自动将 SpatiaLite 几何数据渲染为 Leaflet 地图,而无需您调用 AsGeoJSON(geometry)