GIS-Lab: Руководство по PostGIS: 4.4. Восстановление данных ГИС

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

4.4. Получение данных ГИС

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

Данные могут быть извлечены из базы с помощью SQL или загрузчика/дампера шейп-файлов. В разделе об SQL мы обсудим некоторые запросы к пространственным таблицам и операторы для сравнения данных.

4.4.1. Использование SQL

Самый простой способ получить данные из базы - использовать SQL-запрос "SELECT" с сохранением результирующих столбцов в форматированный текстовый файл:

db=# SELECT road_id, AsText(road_geom) AS geom, road_name FROM roads;
			
			road_id | geom                                    | road_name
			--------+-----------------------------------------+-----------
				  1 | LINESTRING(191232 243118,191108 243242) | Jeff Rd
				  2 | LINESTRING(189141 244158,189265 244817) | Geordie Rd
				  3 | LINESTRING(192783 228138,192612 229814) | Paul St
				  4 | LINESTRING(189412 252431,189631 259122) | Graeme Ave
				  5 | LINESTRING(190131 224148,190871 228134) | Phil Tce
				  6 | LINESTRING(198231 263418,198213 268322) | Dave Cres
				  7 | LINESTRING(218421 284121,224123 241231) | Chris Way
			(6 rows)

Иногда необходимо сократить число возвращаемых полей. В случае ограничений на основе атрибутов, просто используйте тот же синтаксис SQL, как в случае обычной, непространственной таблицы. В случае пространственных ограничений можно использовать следующие операторы:

&&
Этот оператор используется для проверки, пересекаются ли границы одной геометрии с границами другой.

~=
Этот оператор проверяет, являются ли две геометрии геометрически идентичными. Например, 'POLYGON((0 0,1 1,1 0,0 0))' совпадает с 'POLYGON((0 0,1 1,1 0,0 0))'.

=
Более простой оператор. Он проверяет только совпадение границ геометрий.

Вы можете использовать эти операторы в запросах. Заметим, что если геометрии и охваты одновременно указываются в строке команды SQL, вы должны явно указывать необходимость конвертации строки в геометрию с помощью функции "GeomFromText()". Например:

SELECT road_id, road_name
FROM roads
WHERE roads_geom ~= GeomFromText('LINESTRING(191232 243118,191108 243242)',-1);

Этот запрос возвратит единственную запись таблицы "ROADS_GEOM", геометрия которой равна указанному значению.

Когда используется оператор "&&", вы можете для сравнения указывать как BOX3D так и GEOMETRY. Разумеется, если вы указываете GEOMETRY, для сравнения будет использоваться охват объекта.

SELECT road_id, road_name
FROM roads
WHERE roads_geom && GeomFromText('POLYGON((...))',-1);

Этот запрос будет использовать для сравнения охват полигона.

Большинство простых пространственных запросов, вероятно, являются "фрейм-ориентированными" ("frame-based") запросами, используемыми в клиентском ПО, таком, как просмотровщики данных и приложения для веб картографии, захватывающие "фрейм" данных для показа. Используйте для фрейма объект "BOX3D", как в запросе ниже:

SELECT AsText(roads_geom) AS geom
FROM roads
WHERE
 roads_geom && SetSRID('BOX3D(191232 243117,191232 243119)'::box3d,-1);

Отметьте, использование SRID для определения проекции BOX3D. Значение -1 используется для указания неопределенного SRID.

4.4.2. Использование дампера

Дампер таблиц pgsql2shp соединяется с базой данных и конвертирует таблицу (возможно, заданную запросом) в шейп-файл. Основной синтаксис:

pgsql2shp [<options>] <database> [<schema>.]<table>
pgsql2shp [<options>] <database> <query>

Опции командной строки:

-f <имя_файла>
Записать вывод в указанный файл.

-h <хост>
Хост базы данных, с которой осуществляется соединение.

-p <порт>
Порт базы данных, с которой осуществляется соединение.

-P <пароль>
Пароль, используемый для соединения с базой данных.

-u <пользователь>
Имя пользователя, используемое для соединения с базой данных.

-g <геометрический столбец>
Эта опция указывает столбец геометрии, используемый для записи в шейп-файл. Используется для таблиц с несколькими столбцами геометрии.

-b
Использовать бинарный курсор. Это ускорит операцию, но не будет работать, если какой-то из НЕ-геометрических атрибутов таблицы не может быть приведен к тесту.

-r
raw-режим. Не удаляйте поле gid, и не эскейпируйте имена столбцов.

-d
Для обратной совместимости: записывает дамп в 3-мерный шейп-файл для старых (до 1.0.0) баз данных PostGIS (по умолчанию в этом случае записывается 2-мерный шейп-файл). Начиная с PostGIS-1.0.0+, измерения кодируются полностью.

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

Back to top

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