Использование утилиты shp2pgsql

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Использование утилиты shp2pgsql

Сообщение Denis Rykov » 30 авг 2011, 05:14

А покажите хотя бы фрагмент вашего SQL файла.
Spatial is now, more than ever, just another column- The Geometry Column.

xen87
Активный участник
Сообщения: 168
Зарегистрирован: 08 апр 2009, 14:44
Репутация: 18
Откуда: Кострома

Re: Использование утилиты shp2pgsql

Сообщение xen87 » 30 авг 2011, 14:41

здравствуйте, вот созданный sql файл
Вложения
bnd-political-boundary-a.rar
bnd-political-boundary-a.sql
(2.59 МБ) 415 скачиваний

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Использование утилиты shp2pgsql

Сообщение Denis Rykov » 01 сен 2011, 05:49

Дело в том, что способ, выбранный вами для создания sql файла таков, что в этом самом sql файле содержится инструкция COPY FROM STDIN, поэтому если вы попытаетесь открыть этот файл, например, в pgAdmin - у вас ничего не получится. В этом случае нужно использовать консольный клиент psql. Команда будет выглядеть так:

Код: Выделить всё

psql -d gis -U postgres -f bnd-political-boundary-a.sql
В данном примере gis - имя базы данных, postgres - имя пользователя. Если вы хотите загрузить данные через pgAdmin, то лучше сформировать sql с инструкциями INSERT (просто не используйте ключ -D в shp2pgsql). Я сделал такой файл, результат во вложении.
Вложения
output.zip
(2.56 МБ) 432 скачивания
Spatial is now, more than ever, just another column- The Geometry Column.

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: Использование утилиты shp2pgsql

Сообщение Mavka » 01 сен 2011, 09:40

Чисто для справки как загружать данные с помощью ogr2ogr:

Код: Выделить всё

ogr2ogr.exe ^
    -f "PostgreSQL" ^
    -nln mytable ^
    PG:"dbname='postgis' host='localhost' port='5432' user='vasya' password='topsecret'" ^
    bnd-political-boundary-a.shp
fields_new - имя создаваемой таблицы

Работает без промежуточных файлов sql, сама создает записи в geometry_columns и spatial_ref_sys.
лангольеры под окном жрали время ом-ном-ном

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Использование утилиты shp2pgsql

Сообщение Denis Rykov » 01 сен 2011, 10:53

А еще ogr2ogr автоматом строит пространственный индекс.
Spatial is now, more than ever, just another column- The Geometry Column.

xen87
Активный участник
Сообщения: 168
Зарегистрирован: 08 апр 2009, 14:44
Репутация: 18
Откуда: Кострома

Re: Использование утилиты shp2pgsql

Сообщение xen87 » 01 сен 2011, 11:31

Здравствуйте! Спасибо, получилось загрузить через pgAdmin, как вы сказали : " (просто не используйте ключ -D в shp2pgsql)", но первым способом, к сожалению не получается загрузка.
Я правильно понял, что надо сформировать bat-file след. содержания:

Код: Выделить всё

SET PATH="C:\Program Files\PostgreSQL\8.4\bin"
shp2pgsql -i -D -s 4326 bnd-political-boundary-a.shp  bnd-political-boundary-a > bnd-political-boundary-a.sql 
psql -d postgis -U postgres -f bnd-political-boundary-a.sql
или я что-то не то делаю?
P.S. буду пробовать с помощью ogr2ogr ...

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Использование утилиты shp2pgsql

Сообщение Denis Rykov » 01 сен 2011, 12:02

Вроде всё то, а что за ошибка?
Spatial is now, more than ever, just another column- The Geometry Column.

xen87
Активный участник
Сообщения: 168
Зарегистрирован: 08 апр 2009, 14:44
Репутация: 18
Откуда: Кострома

Re: Использование утилиты shp2pgsql

Сообщение xen87 » 01 сен 2011, 12:20

вот ошибка:

Код: Выделить всё

oundary-a_1   1>bnd-political-boundary-a.sql
Shapefile type: Polygon
Postgis type: MULTIPOLYGON[2]

D:\PostGIS>psql -d postgis -U postgres -f bnd-political-boundary-a.sql
could not find a "psql" to execute
could not find a "psql" to execute
SET
SET
BEGIN
psql:bnd-political-boundary-a.sql:14: NOTICE:  CREATE TABLE will create implicit
 sequence "bnd-political-boundary-a_1_gid_seq1" for serial column "bnd-political
-boundary-a_1.gid"
psql:bnd-political-boundary-a.sql:14: ERROR:  relation "bnd-political-boundary-a
_1" already exists
psql:bnd-political-boundary-a.sql:15: ERROR:  current transaction is aborted, co
mmands ignored until end of transaction block
psql:bnd-political-boundary-a.sql:16: ERROR:  current transaction is aborted, co
mmands ignored until end of transaction block
psql:bnd-political-boundary-a.sql:1682: ERROR:  syntax error at or near "1"
LINE 1: 1 FA001 Administrative Area KHABAROVSKIY KRAY RS Russia A As...
        ^

D:\PostGIS>pause
Для продолжения нажмите любую клавишу . . .
Попробовал с помощью ogr2ogr, создал бат файл:

Код: Выделить всё

SET PATH="C:\OSGeo4W\bin\"
    ogr2ogr.exe ^
    -f "PostgreSQL" ^
    -nln mytable ^
    PG:"dbname='postgis' host='localhost' port='5432' user='postgres' password='abcd'" ^
    bnd-political-boundary-a.shp
таблица создана и добавлена, только она пустая, без единой записи :-(

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: Использование утилиты shp2pgsql

Сообщение Mavka » 01 сен 2011, 12:38

xen87 писал(а):Попробовал с помощью ogr2ogr, создал бат файл
Сообщения об ошибках? Обычно при таком запуске он еще просит указать ему GDAL_DATA.
Запускайте bat-файл из консоли OSGeo4W или из нее же запишите команду одной строкой (без крышек ^).
лангольеры под окном жрали время ом-ном-ном

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Использование утилиты shp2pgsql

Сообщение Denis Rykov » 01 сен 2011, 14:59

Удалите таблицу в базе и попробуйте снова, в случае с psql же написано:

Код: Выделить всё

ERROR:  relation "bnd-political-boundary-a_1" already exists
Думаю с ogr2ogr та же проблема, хотя там есть ключ для перезаписи -lco OVERWRITE=yes
Spatial is now, more than ever, just another column- The Geometry Column.

xen87
Активный участник
Сообщения: 168
Зарегистрирован: 08 апр 2009, 14:44
Репутация: 18
Откуда: Кострома

Re: Использование утилиты shp2pgsql

Сообщение xen87 » 02 сен 2011, 14:46

Здравствуйте!
Спасибо, вы были правы, сдалал так:
Удалите таблицу в базе и попробуйте снова
и получилось :-)

С помощью ogr2ogr не получается, пробовал запускать бат файл из OSGeo4W выдал ошибку (таблицу, создаваемую в постгрессе называю каждый раз новым именем), создает табл., но она не заполнена:

Код: Выделить всё

d:\PostGIS>ogr2ogr_insert.bat

d:\PostGIS>SET PATH="C:\OSGeo4W\bin\"

d:\PostGIS>ogr2ogr.exe     -f "PostgreSQL"     -nln mytable_10     PG:"dbname='p
ostgis' host='localhost' port='5432' user='postgres' password='abcd'"     bnd-po
litical-boundary-a.shp
Warning 1: Geometry to be inserted is of type Multi Polygon, whereas the layer g
eometry type is Polygon.
Insertion is likely to fail
ERROR 1: INSERT command for new feature failed.
ERROR:  new row for relation "mytable_10" violates check constraint "enforce_geo
type_wkb_geometry"

Command: INSERT INTO "mytable_10" ("wkb_geometry" , "id", "f_code", "f_code_des"
, "nam", "na2", "na2_descri", "na3", "na3_descri", "tile_id", "fac_id") VALUES (
GeomFromEWKT('SRID=4326;MULTIPOLYGON (((131.24073494409811 43.972460236726029,13
1.24110412597656 43.971084594726563,131.24110409367606 43.971084566950559,131.24
073494409811 43.972460236726029)),((131.49288936315702 44.975082419326078,131.49
288940429687 44.975082397460938,131.49382629198072 44.97387819128032,131.4928893
6315702 44.975082419326078)))'::TEXT) ,         537, 'FA001', 'Administrative Ar
ea', 'HEILONGJIANG', 'CH', 'China', 'A', 'Asia', 10,           2) RETURNING ogc_
fid
ERROR 1: Terminating translation prematurely after failed
translation of layer bnd-political-boundary-a (use -skipfailures to skip errors)



d:\PostGIS>pause
Для продолжения нажмите любую клавишу . . .
При вводе команд в командную строку, ни чего не происходит, ввожу без "крышек" одной строкой

Код: Выделить всё

d:\PostGIS>SET PATH="C:\OSGeo4W\bin\" ogr2ogr.exe -f "PostgreSQL" -nln mytable_1
0 PG:"dbname='postgis' host='localhost' port='5432' user='postgres' password='ab
cd'"  bnd-political-boundary-a.shp
Подскажите пожалуйста, что я делаю не так???

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: Использование утилиты shp2pgsql

Сообщение Mavka » 02 сен 2011, 15:12

Попробуйте явно указать тип геометрии:
... -nln mytable_10 -nlt MULTIPOLYGON ...

При запуске из консоли "SET PATH" не нужен, так как OSGeo4W сама настраивает пути. Начинайте сразу с "ogr2ogr...".

P.S. Если нужно объединить две команды в одну строку их разделяют символами "&&":

Код: Выделить всё

set path="..." && ogr2ogr
лангольеры под окном жрали время ом-ном-ном

xen87
Активный участник
Сообщения: 168
Зарегистрирован: 08 апр 2009, 14:44
Репутация: 18
Откуда: Кострома

Re: Использование утилиты shp2pgsql

Сообщение xen87 » 02 сен 2011, 19:27

Здравствуйте, сделал
Попробуйте явно указать тип геометрии:
... -nln mytable_10 -nlt MULTIPOLYGON ...
создал бат файл

Код: Выделить всё

SET PATH="C:\OSGeo4W\bin\"
    ogr2ogr.exe ^
    -f "PostgreSQL" ^
    -nln mytable_40 ^
    -nlt MULTIPOLYGON ^
    PG:"dbname='postgis' host='localhost' port='5432' user='postgres' password='abcd'" ^
    bnd-political-boundary-a.shp
pause
и все получилось :-) таблица создана и загружена, большое СПАСИБО !

Ответить

Вернуться в «PostGIS/PostgreSQL»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 11 гостей