Данные могут быть извлечены из базы с помощью 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 (Наверх)
|