kleshnin a. postgis-open solution for spatial data-database
DESCRIPTION
PostGIS - open solution for storing and processing of spatial data in the databaseAlexander Kleshnin, Kharkiv, Intetics CoTRANSCRIPT
PostGIS - открытое решение для хранения и обработки пространственных данных в базе данных
Александр Клешнин Харьков, Intetics Co
Содержание
Теоретический обзорЧто такое PostGIS?Стоимость/функциональность пространственных баз данныхФункции/возможности PostGIS
Практическая демонстрацияУстановка PostgreSQL/PostGISИмпорт данных в пространственную базу данныхВыполнение запросов расчета длины/площадиПространственные индексыСоздание функции PostGISВыполнение запросов обновления атрибутивных данных в слоеСоздание объектов через SQL запросЭкспорт данных из пространственной базы данных
Open Geospatial Consortium (OGC)
http://www.opengeospatial.org/
СУБД для пространственных данных
Проприетарные решения:Oracle SpatialMS SQL Server 2008Informix Spatial BladeDB2 Spatial ExtenderArcSDE (SDE – Spatial Database Engine)
Свободные решения:PostgreSQL/PostGISSQLite/SpatiaLiteMySQL/Spatial
Стоимость & функциональность
Сто
им
ость
Функциональность
Что такое PostGIS?
PostGIS – расширение СУБД PostgreSQL для хранения в базе данных географических данных
экономически эффективная альтернатива Oracle Spatial & Locator, IBM DB2 Spatial, Informix Spatial DataBlade, Microsoft SQL Server
PostGIS – GPL Open Source Project
PostGIS объекты
OpenGIS Simple Features for SQL Objects
POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION
OpenGIS Simple Features for SQL Representations
AsText( ) Well-Known Text• POINT(2 4)• MULTILINESTRING((-128 45,-128 46),(-130 50,-131 55))
AsBinary( ) Well-Known Binary • 000000000140000000000000004010000000000000
Геопроцессинг с PostGIS
Функции управления
Функции геометрической связи
Функции обработки геометрии
Функции измерения
• ST_Distance• ST_DWithin• ST_Intersects
• ST_Area• ST_Length• ST_Distance_Spheroi
d
• ST_Buffer• ST_Intersection• ST_Union
• ST_Touches• ST_Crosses• ST_Within
• AddGeometryColumn• DropGeometryColumn• ST_SetSRID
PostGIS функции (~800) доступны посредством SQL
• ST_Centroid• ST_ConvexHull• ST_Difference
PostgreSQL/PostGIS и другое ПО
Практическая работа: структура системы/ПО
Сервер БД
Пользователи
Установка PostgreSQL / PostGIS
http://www.postgresql.org/ http://postgis.refractions.net/
PostgreSQL PostGIS
Установка PostgreSQL
Установка PostgreSQL
Установка PostgreSQL
Установка PostgreSQL
Установка PostgreSQL
Установка PostGIS
Установка PostGIS
Установка PostGIS
Установка PostGIS
Установка PostGIS
Установка PostGIS
Установка PostGIS
Установка PostGIS
Установка PostGIS
pgAdmin – инструмент управления БД PostgreSQL/PostGIS
SELECT version() || ' ' || postgis_full_version();
Создание пользователей
-- Role: admin-- DROP ROLE admin;
CREATE ROLE admin LOGIN ENCRYPTED PASSWORD 'md5f6fdffe48c908deb0f4c3bd36c032e72' SUPERUSER INHERIT CREATEDB CREATEROLE REPLICATION CONNECTION LIMIT 5;
-- Role: gis-- DROP ROLE gis;
CREATE ROLE gis LOGIN ENCRYPTED PASSWORD 'md5d1eac6a9b9835a37d71bac718a80a7ac' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION CONNECTION LIMIT 100;
Administrator - admin User - gis
Создание пространственной базы данных
-- Database: template_postgis_20-- DROP DATABASE template_postgis_20;CREATE DATABASE template_postgis_20 WITH OWNER = postgres
ENCODING = 'UTF8' TABLESPACE = pg_default LC_COLLATE = 'Russian_Russia.1251'
LC_CTYPE = 'Russian_Russia.1251'CONNECTION LIMIT = -1;
ALTER DATABASE template_postgis_20 SET search_path = "$user", public, topology;
База данных - database
Структура пространственной базы данных
Импорт shp-файлов в базу данных PostGIS
SQL команды shp2pgsql // PostGIS 2.0 Shapefile and DBF Loader Exporter (GUI)
ogr2ogr (OGR – свободная библиотека для работы с векторными данными)
SPIT (Quantum GIS Tool)
ESRI’s Data Interoperability extension ($)
ogr2ogr -f PostgreSQL PG:"host=localhost user=admin dbname=database password=admin" streets.shp;
shp2pgsql -s 2964 lakes.shp lakes_new | psql gis_data
Исходные данные
http://gis-lab.info/qa/geosample.html
Исходные данные
admin
oopt
poi-osm
road-l-osm
settlements
Импорт shape-файлов в базу данных - SPIT
pgAdmin – выделение прав
pgAdmin – выделение прав
admin
SQL-window для пользовательских запросов
Вычисление длины линейных объектов
--length in kilometersSELECT "NAME" AS name, ST_Length_Spheroid("road-l-osm".the_geom,'SPHEROID["WGS 84",6378137,298.257223563]')/1000 AS length FROM "road-l-osm";--sum length in kilometersSELECT Sum(ST_Length_Spheroid("road-l-osm".the_geom,'SPHEROID["WGS 84",6378137,298.257223563]')/1000) AS sum_length FROM "road-l-osm";
Вычисление длины линейных объектов по АТД
SELECTm."NAME",sum(ST_Length_Spheroid(r.the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000 AS roads_kmFROM"road-l-osm" AS r,"admin" AS mWHERE ST_Intersects(m.the_geom, r.the_geom)GROUP BYm."NAME"ORDER BYm."NAME"
Пространственные индексы
• B-Tree• R-Tree • GiST
CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometryfield] );
Вычисление длины линейных объектов по АТД + GiST
-- Index: "sidx_road-l-osm_the_geom«-- DROP INDEX "sidx_road-l-osm_the_geom";CREATE INDEX "sidx_road-l-osm_the_geom" ON "road-l-osm" USING gist (the_geom);
Вычисление площади
Перепроецирование данных
Перепроецирование данных
Создание функции выбора зоны СК
Создание колонки и запись значений площади
Таблица атрибутов слоя с площадями для объектов
Создание пространственной таблицы “poi”
-- Table: poiCREATE TABLE "poi"( gid serial NOT NULL, "NAME" character varying(64), the_geom geometry(Point,4326), CONSTRAINT "poi_pkey" PRIMARY KEY (gid))WITH ( OIDS=FALSE);ALTER TABLE "poi" OWNER TO admin;GRANT ALL ON TABLE "poi" TO admin;GRANT ALL ON TABLE "poi" TO public;
-- Sequence: poi_gid_seqALTER TABLE "poi_gid_seq" OWNER TO admin;GRANT ALL ON TABLE "poi_gid_seq" TO admin;GRANT ALL ON TABLE "poi_gid_seq" TO public;
Загрузка пространственной таблицы “poi” в QGIS
Создание объектов в слое “poi”, которые находятся в “oopt”
Обновление количества объектов “poi” в слое “oopt”
--ALTER TABLE "oopt" ADD COLUMN count INTEGER;
UPDATE "oopt" tSETcount = calc.objectscountFROM (SELECTm."NAME_PRT_R",count(*) AS objectscountFROM"poi" AS r,"oopt" AS m WHERE ST_Intersects(m.the_geom, r.the_geom)GROUP BYm."NAME_PRT_R") calc WHERE t."NAME_PRT_R" = calc."NAME_PRT_R";
Количество объектов “poi” в слое “oopt”
Запуск SQL запроса через консоль
Экспорт данных из базы данных в шейп-файл
Спасибо!Вопросы?