На предыдущем шаге мы загрузили в базу наши данные. Но прежде чем переходить
к непосредственной работе с ними, рассмотрим несколько простых примеров.
Откройте pgAdmin, подключитесь к базе данных и откройте окно SQL-запросов.
Выполните следующий SQL-запрос:
CREATE TABLE geometries (name varchar, geom geometry);
INSERT INTO geometries VALUES
('Point', 'POINT(0 0)'),
('Linestring', 'LINESTRING(0 0, 1 1, 2 1, 2 2)'),
('Polygon', 'POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))'),
('PolygonWithHole', 'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(1 1, 1 2, 2 2, 2 1, 1 1))'),
('Collection', 'GEOMETRYCOLLECTION(POINT(2 0),POLYGON((0 0, 1 0, 1 1, 0 1, 0 0)))');
SELECT name, ST_AsText(geom) FROM geometries;
Результат выполнения запроса:
name | st_astext
-----------------+---------------------------------------------------------------
Point | POINT(0 0)
Linestring | LINESTRING(0 0,1 1,2 1,2 2)
Polygon | POLYGON((0 0,1 0,1 1,0 1,0 0))
PolygonWithHole | POLYGON((0 0,10 0,10 10,0 10,0 0),(1 1,1 2,2 2,2 1,1 1))
Collection | GEOMETRYCOLLECTION(POINT(2 0),POLYGON((0 0,1 0,1 1,0 1,0 0)))
(5 rows)
В данном примере создаётся новая таблица `geometries` и затем в неё записываются
5 записей, состоящих из текстового поля и поля геометрии, после чего
записи запрашиваются в человекочитаемом формате.
Таблицы метаданных
------------------
Согласно спецификации Simple Features for SQL ([SFSQL](http://workshops.opengeo.org/postgis-intro/glossary.html#term-sfsql)) PostGIS предоставляет 2 служебные таблицы для хранения информации о таблицах, содержащих
пространственную информацию в базе данных:
* **spatial_ref_sys** - содержит описание всех проекций, доступных PostGIS;
* **geometry_columns** - содержит список всех таблиц, содержащих поля геометрий
и их описание;
![][01-postgis-06]
Количество записей представления **geometry_columns** равно общему
количеству полей геометрий в базе (одна таблица может содержать
несколько таких полей).
Выполните следующий запрос:
SELECT * FROM geometry_columns;
Результат:
f_table_catalog | f_table_schema | f_table_name | f_geometry_column | coord_dimension | srid | type
-----------------+----------------+-----------------------+-------------------+-----------------+------+-----------------
dbvega | public | water_polygon | wkb_geometry | 2 | 4326 | POLYGON
dbvega | public | building_polygon | wkb_geometry | 2 | 4326 | MULTIPOLYGON
dbvega | public | highway_line | wkb_geometry | 2 | 4326 | MULTILINESTRING
dbvega | public | railway_station_point | wkb_geometry | 2 | 4326 | POINT
dbvega | public | geometries | geom | 2 | 0 | GEOMETRY
(5 rows)
Путём запроса к данной таблице ГИС-клиенты или библиотеки могут
определить характер содержимого базы данных без анализа каждой таблицы
по отдельности.
Форматы геометрий
-----------------
Внутри базы данных геометрии хранятся на диске в формате, используемом только
в PostGIS. Соответственно, для того чтобы предоставить их другим приложениям,
геометрии должны быть представленны в формате, который это приложение будет
поддерживать.
* **WKT**
* **ST_GeomFromText(text)**
* **ST_AsText(geometry)**
* **WKB**
* **ST_GeomFromWKB(bytea)**
* **ST_AsBinary(geometry)**
* **GML**
* **ST_GeomFromGML(text)**
* **ST_AsGML(geometry)**
* **KML**
* **ST_GeomFromKML(text)**
* **ST_AsKML(geometry)**
* **GeoJSON**
* **ST_AsGeoJSON(geometry)**
* **SVG**
* **ST_AsSVG(geometry)**
Выполните следующие запросы и ознакомьтесь с полученными результатами:
SELECT ST_AsText(geom) FROM geometries;
SELECT encode(ST_AsBinary(geom), 'hex') FROM geometries;
SELECT ST_AsGML(geom) FROM geometries;
SELECT ST_AsGeoJSON(geom) FROM geometries;
SELECT ST_AsSVG(geom) FROM geometries;
[01-postgis-05]: ../img/01-postgis-05.png
[01-postgis-06]: ../img/01-postgis-06.png
[01-postgis-07]: ../img/01-postgis-07.png