kleshnin a. postgis-open solution for spatial data-database

Post on 16-Jun-2015

1.428 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

PostGIS - open solution for storing and processing of spatial data in the databaseAlexander Kleshnin, Kharkiv, Intetics Co

TRANSCRIPT

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 запроса через консоль

Экспорт данных из базы данных в шейп-файл

Спасибо!Вопросы?

top related