Домой О курсе На предыдущем шаге мы загрузили в базу наши данные. Но прежде чем переходить к непосредственной работе с ними, рассмотрим несколько простых примеров. Откройте 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