<<< предыдущая глава | оглавление | следующая глава >>>
Данные могут быть извлечены из базы с помощью SQL или загрузчика/дампера шейп-файлов. В разделе об 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, как в случае обычной, непространственной таблицы. В случае пространственных ограничений можно использовать следующие операторы:
Вы можете использовать эти операторы в запросах. Заметим, что если геометрии и охваты одновременно указываются в строке команды 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.
Дампер таблиц pgsql2shp соединяется с базой данных и конвертирует таблицу (возможно, заданную запросом) в шейп-файл. Основной синтаксис:
pgsql2shp [<options>] <database> [<schema>.]<table>
pgsql2shp [<options>] <database> <query>
Опции командной строки:
<<< предыдущая глава | оглавление | следующая глава >>>
Обсудить в форуме Комментариев 21
Последнее обновление: December 01 2008
© GIS-Lab и авторы, 2002-2021. При использовании материалов сайта, ссылка на GIS-Lab и авторов обязательна. Содержание материалов - ответственность авторов. (подробнее).