GIS-LAB

Географические информационные системы и дистанционное зондирование

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

4.3. Загрузка данных ГИС

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

После того как пространственная таблица создана, вы можете загружать данные ГИС в базу. В настоящее время существуют два способа загрузить данные в базу PostGIS/PostgreSQL: использование команд SQL или использование загрузчика/дампера шейп-файлов.

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

Если вы можете конвертировать ваши данные в текстовое представление, то для загрузки данных в PostGIS проще всего использовать формат SQL. Как и в случае Oracle и других баз SQL данные могут быть загружены через терминал SQL из текстового файла, содержащего SQL-запросы "INSERT".

Файл (например roads.sql) с загружаемыми данными может выглядеть так:

BEGIN;
INSERT INTO roads (road_id, roads_geom, road_name)
	VALUES (1,GeomFromText('LINESTRING(191232 243118,191108 243242)',-1),'Jeff Rd');
INSERT INTO roads (road_id, roads_geom, road_name)
	VALUES (2,GeomFromText('LINESTRING(189141 244158,189265 244817)',-1),'Geordie Rd');
INSERT INTO roads (road_id, roads_geom, road_name)
	VALUES (3,GeomFromText('LINESTRING(192783 228138,192612 229814)',-1),'Paul St');
INSERT INTO roads (road_id, roads_geom, road_name)
	VALUES (4,GeomFromText('LINESTRING(189412 252431,189631 259122)',-1),'Graeme Ave');
INSERT INTO roads (road_id, roads_geom, road_name)
	VALUES (5,GeomFromText('LINESTRING(190131 224148,190871 228134)',-1),'Phil Tce');
INSERT INTO roads (road_id, roads_geom, road_name)
	VALUES (6,GeomFromText('LINESTRING(198231 263418,198213 268322)',-1),'Dave Cres');
COMMIT;

Данные из файла могут быть легко загружены в PostgreSQL с помощью терминала SQL "psql":

psql -d [database] -f roads.sql

4.3.2. Использование загрузчика

Загрузчик данных shp2pgsql конвертирует шейп-файлы ESRI в соответствующий SQL для вставки в базу данных PostGIS/PostgreSQL. Загрузчик имеет несколько рабочих режимов, задаваемых флагами командной строки:

-d
Удалить таблицу базы данных перед созданием новой таблицы с данными из шейп-файла.

-a
Добавить данные из шейп-файла в таблицу базы данных. Заметим, что для использования этой опции при загрузке множества файлов, эти файлы должны иметь одинаковый набор атрибутов и одинаковые типы данных.

-c
Создать новую таблицу и заполнить ее из шейп-файла. Этот режим включен по умолчанию.

-p
Произвести только код SQL для создания таблицы без добавления данных. Может быть использована, если вам нужно разделить шаги по созданию таблицы и загрузке данных.

-D
Использовать формат PostgreSQL "dump" для вывода данных. Эта опция может быть скомбинирована с -a, -c и -d. Это позволит ускорить загрузку по сравнению с форматом SQL по умолчанию "insert". Используйте ее для очень больших наборов данных.

-s <SRID>
Создает и заполняет таблицы геометрии указанными SRID.

-k
Сохранять регистр идентификаторов (столбец, схема и атрибуты). Заметим, что все атрибуты в шейп-файлах имеют ВЕРХНИЙ регистр.

-i
Привести все целые числа к стандартным 32-битным целочисленными, не создавать 64-битных чисел формата bigint, даже если заголовок DBF это позволяет.

-I
Создает индекс GiST для столбца геометрии.

-w
Вывести формат WKT для использования в старых (0.x) версиях PostGIS. Заметим, что это приведет к изменению координат и удалению значений M из шейп-файла.

-W <кодировка>
Указывает кодировку вводимых данных (в файле DBF). При ее использовании все атрибуты в DBF будут конвертироваться из указанной кодировки в UTF8. Результат SQL будет содержать команду SET CLIENT_ENCODING to UTF8. Таким образом, данные будут конвертированы из UTF8 в любую внутреннюю кодировку, с которой вы сконфигурировали базу данных.

Заметим, что -a, -c, -d и -p взаимно исключают друг друга.

Посмотрите пример сессии использования загрузчика для создания файла ввода и его загрузки:

# shp2pgsql shaperoads myschema.roadstable > roads.sql
# psql -d roadsdb -f roads.sql

В UNIX конвертация и загрузка могут буть выполнены за один шаг с помощью команды:

# shp2pgsql shaperoads myschema.roadstable | psql -d roadsdb

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

Обсудить в форуме Комментариев — 21

Последнее обновление: December 01 2008