Loading geospatial data¶
Now let`s load some geospatial data into our database so that we can familiarise ourselves with the tools and processes used to retrieve that data.
Natural Earth provides a great source of basic data for the whole world on various scales. And the best thing is that this data is in the public domain:
Download the data
$ mkdir nedata $ cd !$ cd nedata $ wget https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/110m/cultural/ne_110m_admin_0_countries.zip
Unzip the file
$ sudo apt install unzip $ unzip ne_110m_admin_0_countries.zip Archive: ne_110m_admin_0_countries.zip inflating: ne_110m_admin_0_countries.README.html extracting: ne_110m_admin_0_countries.VERSION.txt extracting: ne_110m_admin_0_countries.cpg inflating: ne_110m_admin_0_countries.dbf inflating: ne_110m_admin_0_countries.prj inflating: ne_110m_admin_0_countries.shp inflating: ne_110m_admin_0_countries.shx
Load into our
postgis_dbdatabaseThe files
.dbf,.prj,.shpand.shpform a so-called ShapeFile, a popular geospatial data format that is used by GIS software. To load this into our database, we also need GDAL, the Geospatial Data Abstraction Library. When we install GDAL we also get OGR, OpenGIS Simple Features Reference Implementation, a vector data translation library that we can use to translate the shapefile into data.GDAL can be easily installed with the package manager:
$ sudo apt install gdal-bin
Then we switch to the
postgresqluser:$ sudo -i -u postgres
Now we convert the shapefile with
ogr2ogrand import it into our database:$ ogr2ogr -f PostgreSQL PG:dbname=postgis_db -progress \ -nlt PROMOTE_TO_MULTI \ /srv/jupyter/nedata/ne_110m_admin_0_countries.shp 0...10...20...30...40...50...60...70...80...90...100 - done.
-f PostgreSQLindicates that the target is a PostgreSQL database
PG:dbname=postgis_dbspecifies the PostgreSQL database name. In addition to the name, other options can also be specified, in general:
PG:"dbname='db_ename' host='addr' port='5432' user='x' password='y'"
-progressoutputs a progress bar
-nlt PROMOTE_TO_MULTIindicates that all object types should be loaded into the database as multipolygons
/home/veit/nedata/ne_110m_admin_0_countries.shpspecifies the path to the input file
See also
Check the import with
ogrinfo$ ogrinfo -so PG:dbname=postgis_db ne_110m_admin_0_countries Output INFO: Open of `PG:dbname=postgis_db' using driver `PostgreSQL' successful. Layer name: ne_110m_admin_0_countries Geometry: Multi Polygon Feature Count: 177 …
Alternatively, we can also list individual tables:
$ psql -d postgis_db postgis_db=# \dt List of relations Schema | Name | Type | Owner --------+---------------------------+-------+---------- public | ne_110m_admin_0_countries | table | postgres public | spatial_ref_sys | table | postgres (2 rows)
Finally, we can log out of the database with
psql> \q
See also