Как установить и настроить PostGIS в Ubuntu 14.04

Вступление

PostGIS - это пространственное расширение реляционной базы данных PostgreSQL. PostGIS позволяет хранить пространственные данные с использованием типов данных геометрии и географии, выполнять пространственные запросы с пространственными функциями для определения площади, расстояния, длины и периметра, а также создавать пространственные индексы для ваших данных для ускорения пространственных запросов.

В этом руководстве вы будете устанавливать PostGIS, настраивать PostgreSQL для пространственных данных, загружать некоторые пространственные объекты в базу данных и выполнять базовый запрос.

Предпосылки

Прежде чем начать это руководство, вам понадобится следующее:

Шаг 1 - Установка PostGIS

PostGIS не включен в репозитории по умолчанию для Ubuntu, но мы можем получить его через UbuntuGIS, внешний репозиторий, который поддерживает ряд пакетов ГИС с открытым исходным кодом. Хотя пакет PostGIS в этом репозитории не всегда является передовым выпуском, он хорошо поддерживается и устраняет необходимость компилировать PostGIS из исходного кода. Поэтому, чтобы установить PostGIS, мы добавим этот репозиторий в наши источники, а затем установим его с нашим менеджером пакетов.

Войдите на свой сервер под пользователем без полномочий root:

ssh @

Поскольку мы используем Ubuntu 14.04, нам понадобится нестабильная ветвь репозитория. Выполните следующую команду, чтобы добавить хранилище в ваши источники:

sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable

Вы увидите следующий вывод:

OutputUnstable releases of Ubuntu GIS packages. These releases are more bleeding edge and while generally they should work well, they dont receive the same amount of quality assurance as our stable releases do.
More info: https://launchpad.net/~ubuntugis/+archive/ubuntu/ubuntugis-unstable
Press [ENTER] to continue or ctrl-c to cancel adding it

Нажмите + ENTER +, чтобы принять предупреждение, и источник будет добавлен:

Outputgpg: keyring `/tmp/tmpintg192h/secring.gpg' created
gpg: keyring `/tmp/tmpintg192h/pubring.gpg' created
gpg: requesting key 314DF160 from hkp server keyserver.ubuntu.com
gpg: /tmp/tmpintg192h/trustdb.gpg: trustdb created
gpg: key 314DF160: public key "Launchpad ubuntugis-stable" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
OK

Прежде чем вы сможете установить PostGIS, обновите список доступных пакетов, чтобы пакеты из нового репозитория были добавлены в список.

sudo apt-get update

После обновления ваших источников установите PostGIS.

sudo apt-get install postgis

Введите + Y +, когда будет предложено установить PostGIS вместе с необходимыми зависимостями.

Теперь мы можем подключиться к PostgreSQL и интегрировать PostGIS.

Шаг 2 - Включение пространственных функций с PostGIS

Функции PostGIS должны быть активированы для каждой базы данных, прежде чем вы сможете хранить пространственные данные. Мы будем работать с базой данных + test1 + и пользователем + postgres + с https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu- 14-04 Учебное пособие [Как установить и использовать PostgreSQL в Ubuntu 14.04], которым вы руководствовались перед началом этого учебного пособия.

Используя команду + sudo +, переключитесь на пользователя + postgres +:

sudo -i -u postgres

Затем подключитесь к базе данных + test1 +:

psql -d test1

Затем включите расширение PostGIS для базы данных:

CREATE EXTENSION postgis;

Давайте проверим, что все работает правильно. Выполните следующую команду:

SELECT PostGIS_version();

Вы увидите этот вывод:

Output            postgis_version
---------------------------------------
2.2 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
(1 row)

У нас все готово. Type

\q

выйти из сеанса SQL и вернуться в окно терминала.

Затем вернитесь к своей основной учетной записи:

su

Теперь у нас есть база данных с установленным PostGIS, но давайте настроим некоторые параметры PostgreSQL, чтобы все работало гладко.

Шаг 3 - Оптимизация PostgreSQL для объектов базы данных ГИС

PostgreSQL предназначен для работы на любых объектах, от интегрированных систем до больших корпоративных баз данных, но из коробки он настроен очень консервативно. Объекты ГИС-базы данных большие по сравнению с текстовыми данными, поэтому давайте настроим PostgreSQL для лучшей работы с этими объектами.

Мы настраиваем PostgreSQL, редактируя файл + postgresql.conf +. Откройте этот файл:

sudo nano /etc/postgresql/9.3/main/postgresql.conf

В этот файл нужно внести несколько изменений для поддержки пространственных данных.

Во-первых, + shared_buffers + должен быть заменен примерно на 75% оперативной памяти вашего сервера. Таким образом, + 200 МБ + - это хорошее значение для сервера с 512 МБ ОЗУ. Найдите строку + shared_buffers + и измените ее следующим образом:

/etc/postgresql/9.3/main/postgresql.conf

shared_buffers =                   # min 128kB

Затем найдите строку, начинающуюся с + # work_mem +. Эта строка закомментирована по умолчанию, поэтому раскомментируйте эту строку и увеличьте ее значение до + 16MB:

/etc/postgresql/9.3/main/postgresql.conf

work_mem =                          # min 64kB

Затем найдите + # maintenance_work_mem +, раскомментируйте его и увеличьте его значение до + 128MB:

/etc/postgresql/9.3/main/postgresql.conf

maintenance_work_mem =             # min 1MB

Найдите + checkpoint_segments +, затем раскомментируйте его и измените его значение на + 6 +:

/etc/postgresql/9.3/main/postgresql.conf

checkpoint_segments = 6         # in logfile segments, min 1, 16MB each

Наконец, ищите + # random_page_cost +. Когда вы найдете это, раскомментируйте его и установите его значение + 2.0 +:

/etc/postgresql/9.3/main/postgresql.conf

random_page_cost = 2.0                 # same scale as above

Нажмите + CTRL + X + для выхода, затем + Y + и + ENTER +, чтобы сохранить изменения в этом файле.

Вы можете проверить учебник Tuning PostgreSQL для Spatial для получения дополнительной информации об этих настройках.

Перезапустите PostgreSQL, чтобы изменения вступили в силу:

sudo service postgresql restart

Теперь у нас установлен PostGIS и настроен PostgreSQL. Давайте добавим некоторые данные в базу данных, чтобы мы могли проверить все.

Шаг 4 - Загрузка пространственных данных

Давайте загрузим некоторые пространственные данные в нашу базу данных, чтобы мы могли ознакомиться с инструментами и процессом передачи этих данных в PostgreSQL, чтобы мы могли выполнить некоторые пространственные запросы позже.

Natural Earth предоставляет отличный источник базовых данных для всего мира в различных масштабах. Лучше всего, эти данные находятся в свободном доступе.

Перейдите в свою домашнюю папку и создайте новую папку с именем + nedata +. Мы будем использовать эту папку для хранения данных о Земле, которые мы скачаем.

cd ~
mkdir nedata

Затем перейдите в эту новую папку:

cd nedata

Мы загрузим набор данных стран 1: 110 м из Natural Earth. Используйте + wget +, чтобы вытащить этот файл на ваш сервер:

wget http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/110m/cultural/ne_110m_admin_0_countries.zip

Файл, который вы только что скачали, сжат, поэтому вам понадобится команда + unzip +, которую вы можете установить через менеджер пакетов. Установите его с помощью следующей команды:

sudo apt-get install unzip

Затем распакуйте файл:

unzip ne_110m_admin_0_countries.zip

Теперь у вас в папке будет шесть дополнительных файлов:

  • + Ne_110m_admin_0_countries.README.html

  • + + Ne_110m_admin_0_countries.VERSION.txt

  • + + Ne_110m_admin_0_countries.dbf

  • + + Ne_110m_admin_0_countries.prj

  • + + Ne_110m_admin_0_countries.shp

  • + + Ne_110m_admin_0_countries.shx

Файлы * .dbf *, * .prj *, * .shp * и * .shp * составляют http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/Shapefile_file_extensions/ 005600000003000000 / [ShapeFile], популярный формат геопространственных векторных данных, используемый программным обеспечением ГИС. Мы можем загрузить это в нашу базу данных + test1 +.

Для этого мы установим GDAL библиотеку абстракций геопространственных данных. Когда мы устанавливаем GDAL, мы также получим OGR (Реализованная реализация OpenGIS Simple Features Reference) и команду + ogr2ogr +. Это библиотека перевода векторных данных, которую мы будем использовать для преобразования шейп-файла в данные, которые PostGIS может использовать.

Установите GDAL с помощью менеджера пакетов:

sudo apt-get install gdal-bin

Теперь снова переключитесь на пользователя + postgres:

sudo -i -u postgres

Теперь преобразуйте Shapefile, полученный из Natural Earth, в таблицу PostGIS, используя + ogr2ogr +, например так:

ogr2ogr -f PostgreSQL PG:dbname=test1 -progress -nlt PROMOTE_TO_MULTI /home//nedata/ne_110m_admin_0_countries.shp

Давайте разберем эту команду и рассмотрим каждую опцию подробно. Сначала мы указываем эту опцию:

-f PostgreSQL

Этот переключатель указывает, что тип выходного файла представляет собой таблицу PostgreSQL.

Далее у нас есть эта опция:

PG:dbname=test1

Это устанавливает строку подключения к нашей базе данных. Мы просто указываем здесь имя базы данных, но если вы хотите использовать другого пользователя, хост и порт, вы можете указать эти параметры, например:

PG:"dbname='databasename' host='addr' port='5432' user='x' password='y'"

Следующее в нашем списке вариантов это:

-progress

Эта опция отображает индикатор выполнения, чтобы мы могли визуализировать процесс.

Далее мы передаем этот аргумент:

-nlt PROMOTE_TO_MULTI

PostgreSQL строго по типам объектов. Команда + ogr2ogr + сделает предположение о типе геометрии на основе первых нескольких объектов в файле. Данные, которые мы импортируем, содержат сочетание типов * Polygon * и многоугольников или * MultiPolygons *. Они не могут быть вставлены в одно и то же поле, поэтому мы продвигаем все объекты в многоугольники, и поле геометрии будет создано как * MultiPolygon *.

Наконец, мы указываем путь к входному файлу:

/home//nedata/ne_110m_admin_0_countries.shp

Посетите веб-сайт ogr2ogr, чтобы увидеть полный набор параметров.

Когда вы выполните полную команду, вы увидите следующий вывод:

Output0...10...20...30...40...50...60...70...80...90...100 - done.

Мы можем проверить, что данные были импортированы с помощью команды + ogrinfo +. Выполните следующую команду:

ogrinfo -so PG:dbname=test1 ne_110m_admin_0_countries

Это отобразит следующий вывод:

OutputINFO: Open of `PG:dbname=test1'
     using driver `PostgreSQL' successful.

Layer name:
Geometry:
Feature Count: 177
Extent: (-180.000000, -90.000000) - (180.000000, 83.645130)
Layer SRS WKT:
GEOGCS["WGS 84",
   DATUM["WGS_1984",
       SPHEROID["WGS 84",6378137,298.257223563,
           AUTHORITY["EPSG","7030"]],
       AUTHORITY["EPSG","6326"]],
   PRIMEM["Greenwich",0,
       AUTHORITY["EPSG","8901"]],
   UNIT["degree",0.0174532925199433,
       AUTHORITY["EPSG","9122"]],
   AUTHORITY["EPSG","4326"]]
FID Column = ogc_fid
Geometry Column = wkb_geometry
scalerank: Integer (4.0)
featurecla: String (30.0)

...

region_wb: String (254.0)
name_len: Real (16.6)
long_len: Real (16.6)
abbrev_len: Real (16.6)
tiny: Real (16.6)
homepart: Real (16.6)

Теперь у нас есть пространственные данные в нашей базе данных, поэтому давайте посмотрим, как мы можем использовать их для решения проблем.

Шаг 5 - Запрос пространственных данных

Предположим, нас попросили найти десять самых северных стран мира. Это легко с помощью PostGIS и данных, которые мы импортировали.

Войдите в базу данных + test1 +.

psql -d test1

Перечислите таблицы в базе данных:

\dt

Это вернет две таблицы:

Output                   List of relations
Schema |           Name            | Type  |  Owner
--------+---------------------------+-------+----------
public | ne_110m_admin_0_countries | table | postgres
public | spatial_ref_sys           | table | postgres
(2 rows)

Мы будем использовать таблицу + ne_110m_admin_0_countries +, которая содержит данные, которые помогут нам ответить на наш вопрос. Эта таблица имеет столбец + admin +, который содержит название страны, и столбец + wkb_gemoetry +, который содержит геометрические данные. Если вы хотите увидеть все столбцы в таблице + ne_110m_admin_0_countries +, вы можете выполнить команду:

\d ne_110m_admin_0_countries

Вы увидите столбцы и их типы данных. Тип данных столбца + wbk_geometry + выглядит следующим образом:

wkb_geometry | geometry(MultiPolygon,4326) |

Столбец + wbk_geometry + содержит многоугольники. Мы имеем дело со странами и их нерегулярными границами, и поэтому каждая страна в нашей базе данных не имеет единого значения широты. Таким образом, чтобы получить широту для каждой страны, мы сначала определяем центр тяжести каждой страны, используя функцию PostGIS + ST_Centroid +. Затем мы извлекаем значение Y центроида с помощью функции + ST_Y +. Мы можем использовать это значение в качестве широты.

Вот запрос, который мы запустим:

SELECT admin, ST_Y(ST_Centroid(wkb_geometry)) as latitude
FROM ne_110m_admin_0_countries
ORDER BY latitude DESC
LIMIT 10;

Мы упорядочиваем результаты в порядке убывания, потому что самая северная страна будет иметь самую высокую широту.

Выполните этот запрос, и вы увидите десятку самых северных стран:

Output   admin   |    latitude
-----------+------------------
Greenland | 74.7704876939899
Norway    | 69.1568563971328
Iceland   |  65.074276335291
Finland   | 64.5040939185674
Sweden    | 62.8114849680803
Russia    | 61.9808407507127
Canada    | 61.4690761453491
Estonia   |  58.643695240707
Latvia    | 56.8071751342793
Denmark   | 56.0639344617945
(10 rows)

Теперь, когда у вас есть свой ответ, вы можете выйти из базы данных с

\q

Более подробную информацию о различных функциях PostGIS можно найти в разделе PostGIS Reference документации PostGIS.

Заключение

Теперь у вас есть пространственно активированная база данных, настроенная для пространственных запросов, и у вас есть некоторые данные в этой базе данных, которые вы можете использовать для дальнейшего исследования.

Более подробное руководство по созданию пространственных запросов см. В Boundless PostGIS Tutorial

Related