Load shapefiles into a SQLite (optionally SpatiaLite) database.
Project background: Things I learned about shapefiles building shapefile-to-sqlite
How to install
$ pip install shapefile-to-sqlite
How to use
You can run this tool against a shapefile file like so:
$ shapefile-to-sqlite my.db features.shp
This will load the geometries as GeoJSON in a text column.
Using with SpatiaLite
If you have SpatiaLite available you can load them as SpatiaLite geometries like this:
$ shapefile-to-sqlite my.db features.shp --spatialite
The data will be loaded into a table called
features - based on the name of the shapefile. You can specify an alternative table name using
$ shapefile-to-sqlite my.db features.shp --table=places --spatialite
The tool will search for the SpatiaLite module in the following locations:
If you have installed the module in another location, you can use the
--spatialite_mod=xxx option to specify where:
$ shapefile-to-sqlite my.db features.shp \ --spatialite_mod=/usr/lib/mod_spatialite.dylib
You can use the
--spatial-index option to create a spatial index on the
$ shapefile-to-sqlite my.db features.shp --spatial-index
You can omit
--spatialite if you use either
By default, this tool will attempt to convert geometries in the shapefile to the WGS 84 projection, for best conformance with the GeoJSON specification.
If you want it to leave the data in whatever projection was used by the shapefile, use the
You can convert the data to another output projection by passing it to the
--crs option. For example, to convert to EPSG:2227 (California zone 3) use
The full list of formats accepted by the
--crs option is documented here.
If your data contains columns with a small number of heavily duplicated values - the names of specific agencies responsible for parcels of land for example - you can extract those columns into separate lookup tables referenced by foreign keys using the
$ shapefile-to-sqlite my.db features.shp -c agency
This will create a
agency table with
name columns, and will create the
agency column in your main table as an integer foreign key reference to that table.
-c option can be used multiple times.
CPAD_2020a_Units is an example of a table created using the