Інсталяція:
sudo apt-get install -y postgresql postgresql-contrib postgis
Після чого від імені користувача postgres (це суперкористувач для postgres), створюємо користувача gisuser
та базу для нього, яку наприклад назвемо gis
:
sudo -u postgres createuser gisuser sudo -u postgres createdb --encoding=UTF-8 --owner=gisuser gis # і створимо пароль для користувача: sudo -u postgres psql -d gis -c "ALTER USER gisuser WITH PASSWORD 'password';" # і увімкнути розширення postgis: sudo -u postgres psql -d gis -c "CREATE EXTENSION postgis;" sudo -u postgres psql -d gis -c "CREATE EXTENSION postgis_topology;" CREATE EXTENSION
Тепер ми можемо з’єднуватись з нашою базою за допомогою клієнта, вказавши базу і користувача:
psql -d gis -U gisuser
У випадку отримання помилки:
psql: FATAL: Peer authentication failed for user
Треба відредагувати файл sudo vim /etc/postgresql/9.4/main/pg_hba.conf
, чи який там буде для вашої версії, і зробити таку заміну десь ближче до кінця:
- local all all peer + local all all md5
Тоді можна буде логінитись (дивно, але в мене навіть пароль не питає), і виконувати запити:
select postgis_full_version(); -- В мене дає щось схоже на: -- POSTGIS="2.1.5 r13152" GEOS="3.4.2-CAPI-1.8.2 r3921" -- PROJ="Rel. 4.8.0, 6 March 2012" GDAL="GDAL 1.11.2, released 2015/02/10" -- LIBXML="2.9.2" LIBJSON="UNKNOWN" RASTER
Можна ще поставити гарний GUI-клієнт:
sudo apt-get install -y pgadmin3
Гаразд, давайте тепер створимо табличку з містами:
CREATE TABLE cities ( id SERIAL PRIMARY KEY, name VARCHAR(100), location GEOGRAPHY(POINT,4326) );
4326 це ідентифікатор системи координат (SRID, Spatial Reference system ID) і означає що ми використовуватимемо систему координат WGS 84. Здається це популярна система координат.
Тепер заповнимо таблицю якимись даними:
INSERT INTO cities (name, location) VALUES ('Львів', ST_GeographyFromText('SRID=4326;POINT(49.83 24.014167)') ), ('Київ', ST_GeographyFromText('SRID=4326;POINT(50.45 30.523611)') ), ('Івано-Франківськ', ST_GeographyFromText('SRID=4326;POINT(48.922778 24.710556)') ) ;
І спробуємо зробити якийсь запит, наприклад скільки метрів від Львова до Києва:
select ST_Distance( (select location from cities where name='Львів'), (select location from cities where name='Київ') );
І цей запит дає мені 723904.293225235
, що приблизно 723 км, в той час як до Києва по прямій менш ніж 500 км. Я вибрав неправильну проекцію, або переписав з вікіпедії неправильні координати, або передав функції якісь неправильні параметри. :(
Але на сьогодні напевне просто піду спати. До речі, може ви підкажете в чому помилка?
Посилання
- http://wiki.openstreetmap.org/wiki/PostGIS/Installation#Ubuntu_and_Debian
- http://postgis.net/docs/manual-1.5/ch04.html
Filed under: Інструменти, Кодерство Tagged: linux