GIS-Lab: Руководство по PostGIS: Глава 4. Использование PostGIS

Руководство по PostGIS

Глава 4. Использование PostGIS

<<< предыдущая глава | оглавление | следующая глава >>>

Содержание

4.1. Объекты ГИС
4.1.1. OpenGIS WKB и WKT
4.1.2. PostGIS EWKB, EWKT и Канонические формы
4.1.3. SQL-MM часть 3
4.2. Использование стандартов OpenGIS
4.2.1. Таблица SPATIAL_REF_SYS
4.2.2. Таблица GEOMETRY_COLUMNS
4.2.3. Создание пространственной таблицы
4.2.4. Обеспечение геометрий, согласованных с OpenGIS
4.3. Получение данных ГИС
4.3.1. Использование SQL
4.3.2. Использование загрузчика
4.4. Восстановление данных ГИС
4.4.1. Использование SQL
4.4.2. Использование дампера
4.5. Разработка индексов
4.5.1. Индексы GiST
4.5.2. Использование индексов
4.6. Сложные запросы
4.6.1. Преимущества индексов
4.6.2. Примеры пространственного SQL
4.7. Использование Mapserver
4.7.1. Основы использования
4.7.2. Часто задаваемые вопросы
4.7.3. Продвинутое использование
4.7.4. Примеры
4.8. Клиенты Java (JDBC)
4.9. Клиенты C (libpq)
4.9.1. Текстовые указатели
4.9.2. Бинарные указатели

4.1. Объекты ГИС

Объекты ГИС, поддерживаемые PostGIS, являются надмножествами "Simple Features", определенных Консорциумом OpenGIS (OGC). Начиная с версии 0.9, PostGIS поддерживает все объекты и функции, определенные OGC в спецификации "Simple Features SQL".

PostGIS расширяет стандарт поддержкой координат 3DZ, 3DM и 4D.

4.1.1. OpenGIS WKB и WKT

Спецификация OpenGIS определяет два стандартных способа определения пространственных объектов: в форме Well-Known Text (WKT) и в форме Well-Known Binary (WKB). WKT и WKB включают информацию о типе объекта и координаты, составляющие объект.

Примеры текстового представления (WKT) пространственных объектов приведены ниже:

  • POINT(0 0)
  • LINESTRING(0 0,1 1,1 2)
  • POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1))
  • MULTIPOINT(0 0,1 2)
  • MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4))
  • MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))
  • GEOMETRYCOLLECTION(POINT(2 3),LINESTRING((2 3,3 4)))

Кроме этого, спецификация OpenGIS требует, чтобы внутренний формат хранения пространственных объектов включал идентификатор системы координат (spatial referencing system identifier - SRID). SRID необходим для добавления обекта в базу данных.

Ввод/вывод в этих форматах доступен с использованием следующих интерфейсов:

bytea WKB = asBinary(geometry);
text WKT = asText(geometry);
geometry = GeomFromWKB(bytea WKB, SRID);
geometry = GeometryFromText(text WKT, SRID);

Например, правильный запрос insert для создания и вставки пространственного объекта OGC может быть таким:

INSERT INTO geotable ( the_geom, the_name )
VALUES ( GeomFromText('POINT(-126.4 45.32)', 312), 'A Place');


4.1.2. PostGIS EWKB, EWKT и Канонические формы

Формат OGC поддерживает только 2d геометрии, и соответствующие SRID никогда не вставляются в вводимые/выводимые представления.

PostGIS расширяет форматы текущего набора OGC (всякий валидный WKB/WKT является валидным EWKB/EWKT), но это может измениться в будущем, если OGC выпустит новый формат, противоречащий нашим. Таким образом, вам НЕ СЛЕДУЕТ полагаться на эту возможность!

В EWKB/EWKT PostGIS добавлена поддержка координат 3dm, 3dz, 4d и встроена информация SRID.

Примеры текстовых представлений (EWKT) пространственных объектов, расширенных описанными возможностями:

  • POINT(0 0 0) -- XYZ
  • SRID=32632;POINT(0 0) -- XY с SRID
  • POINTM(0 0 0) -- XM
  • POINT(0 0 0 0) -- XYZM
  • SRID=4326;MULTIPOINTM(0 0 0,1 2 1) -- XYM с SRID
  • MULTILINESTRING((0 0 0,1 1 0,1 2 1),(2 3 1,3 2 1,5 4 1))
  • POLYGON((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0))
  • MULTIPOLYGON(((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0)),((-1 -1 0,-1 -2 0,-2 -2 0,-2 -1 0,-1 -1 0)))
  • GEOMETRYCOLLECTIONM(POINTM(2 3 9), LINESTRINGM(2 3 4, 3 4 5))

Ввод/вывод в этих форматах возможен с использованием следующих интерфейсов:

bytea EWKB = asEWKB(geometry);
text EWKT = asEWKT(geometry);
geometry = GeomFromEWKB(bytea EWKB);
geometry = GeomFromEWKT(text EWKT);

Пример правильного запроса insert для создания и вставки пространственного объекта PostGIS:

INSERT INTO geotable ( the_geom, the_name )
VALUES ( GeomFromEWKT('SRID=312;POINTM(-126.4 45.32 15)'), 'A Place' )

"Канонические формы" типов в PostgreSQL позволяют вам получить представления с помощью простых запросов (без вызова каких либо функций) и гарантируют выполнение простых операций insert, update или копирования. Эти формы для PostGIS-овского типа "geometry":

- Вывод
			  - binary: EWKB
				ascii: HEXEWKB (EWKB в 16-ричной форме)
			- Ввод
			  - binary: EWKB
				ascii: HEXEWKB|EWKT 

Например, следующий запрос читает EWKT и возвращает HEXEWKB в процессе канонического ввода/вывода ascii:

=# SELECT 'SRID=4;POINT(0 0)'::geometry;
geometry
----------------------------------------------------
01010000200400000000000000000000000000000000000000
(1 row)


4.1.3. SQL-MM Часть 3

Пространственная спецификация мультимедийных приложений SQL расширяет простые возможности спецификации SQL, определяя несколько кривых, интерполированных дугами.

Определения SQL-MM определяют координаты 3dm, 3dz и 4d, но не позволяют включать информацию о SRID.

WKT расширения еще поддерживаются не полностью. Ниже показаны примеры некоторых простых криволинейных геометрий:

  • CIRCULARSTRING(0 0, 1 1, 1 0)
  • COMPOUNDCURVE(CIRCULARSTRING(0 0, 1 1, 1 0),(1 0, 0 1))
  • CURVEPOLYGON(CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0),(1 1, 3 3, 3 1, 1 1))
  • MULTICURVE((0 0, 5 5),CIRCULARSTRING(4 0, 4 4, 8 4))
  • MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0),(1 1, 3 3, 3 1, 1 1)),((10 10, 14 12, 11 10, 10 10),(11 11, 11.5 11, 11 11.5, 11 11)))

Замечание

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

Замечание

Все числовые сравнения с плавающей точкой в SQL-MM выполняются в пределах допустимой точности, в настоящее время - 1E-8.

Последнее обновление: August 14 2008
(Наверх)

Back to top

(С) Виктор Вислобоков, 2008-2023