GIS-LAB

Географические информационные системы и дистанционное зондирование

PostGIS

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

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

Содержание

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.

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

Обсудить в форуме Комментариев — 21

Последнее обновление: January 28 2015