Использование утилиты shp2pgsql
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Использование утилиты shp2pgsql
А покажите хотя бы фрагмент вашего SQL файла.
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Активный участник
- Сообщения: 168
- Зарегистрирован: 08 апр 2009, 14:44
- Репутация: 18
- Откуда: Кострома
Re: Использование утилиты shp2pgsql
здравствуйте, вот созданный 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
Дело в том, что способ, выбранный вами для создания sql файла таков, что в этом самом sql файле содержится инструкция COPY FROM STDIN, поэтому если вы попытаетесь открыть этот файл, например, в pgAdmin - у вас ничего не получится. В этом случае нужно использовать консольный клиент psql. Команда будет выглядеть так:
В данном примере gis - имя базы данных, postgres - имя пользователя. Если вы хотите загрузить данные через pgAdmin, то лучше сформировать sql с инструкциями INSERT (просто не используйте ключ -D в shp2pgsql). Я сделал такой файл, результат во вложении.
Код: Выделить всё
psql -d gis -U postgres -f bnd-political-boundary-a.sql
- Вложения
-
- 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
Чисто для справки как загружать данные с помощью ogr2ogr:
fields_new - имя создаваемой таблицы
Работает без промежуточных файлов sql, сама создает записи в geometry_columns и spatial_ref_sys.
Код: Выделить всё
ogr2ogr.exe ^
-f "PostgreSQL" ^
-nln mytable ^
PG:"dbname='postgis' host='localhost' port='5432' user='vasya' password='topsecret'" ^
bnd-political-boundary-a.shp
Работает без промежуточных файлов sql, сама создает записи в geometry_columns и spatial_ref_sys.
лангольеры под окном жрали время ом-ном-ном
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Использование утилиты shp2pgsql
А еще ogr2ogr автоматом строит пространственный индекс.
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Активный участник
- Сообщения: 168
- Зарегистрирован: 08 апр 2009, 14:44
- Репутация: 18
- Откуда: Кострома
Re: Использование утилиты shp2pgsql
Здравствуйте! Спасибо, получилось загрузить через pgAdmin, как вы сказали : " (просто не используйте ключ -D в shp2pgsql)", но первым способом, к сожалению не получается загрузка.
Я правильно понял, что надо сформировать bat-file след. содержания:
или я что-то не то делаю?
P.S. буду пробовать с помощью ogr2ogr ...
Я правильно понял, что надо сформировать 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
Вроде всё то, а что за ошибка?
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Активный участник
- Сообщения: 168
- Зарегистрирован: 08 апр 2009, 14:44
- Репутация: 18
- Откуда: Кострома
Re: Использование утилиты shp2pgsql
вот ошибка:
Попробовал с помощью ogr2ogr, создал бат файл:
таблица создана и добавлена, только она пустая, без единой записи
Код: Выделить всё
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
Для продолжения нажмите любую клавишу . . .
Код: Выделить всё
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
Сообщения об ошибках? Обычно при таком запуске он еще просит указать ему GDAL_DATA.xen87 писал(а):Попробовал с помощью ogr2ogr, создал бат файл
Запускайте bat-файл из консоли OSGeo4W или из нее же запишите команду одной строкой (без крышек ^).
лангольеры под окном жрали время ом-ном-ном
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Использование утилиты shp2pgsql
Удалите таблицу в базе и попробуйте снова, в случае с psql же написано:
Думаю с ogr2ogr та же проблема, хотя там есть ключ для перезаписи -lco OVERWRITE=yes
Код: Выделить всё
ERROR: relation "bnd-political-boundary-a_1" already exists
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Активный участник
- Сообщения: 168
- Зарегистрирован: 08 апр 2009, 14:44
- Репутация: 18
- Откуда: Кострома
Re: Использование утилиты shp2pgsql
Здравствуйте!
Спасибо, вы были правы, сдалал так:
С помощью ogr2ogr не получается, пробовал запускать бат файл из OSGeo4W выдал ошибку (таблицу, создаваемую в постгрессе называю каждый раз новым именем), создает табл., но она не заполнена:
При вводе команд в командную строку, ни чего не происходит, ввожу без "крышек" одной строкой
Подскажите пожалуйста, что я делаю не так???
Спасибо, вы были правы, сдалал так:
и получилосьУдалите таблицу в базе и попробуйте снова
С помощью 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
Попробуйте явно указать тип геометрии:
... -nln mytable_10 -nlt MULTIPOLYGON ...
При запуске из консоли "SET PATH" не нужен, так как OSGeo4W сама настраивает пути. Начинайте сразу с "ogr2ogr...".
P.S. Если нужно объединить две команды в одну строку их разделяют символами "&&":
... -nln mytable_10 -nlt MULTIPOLYGON ...
При запуске из консоли "SET PATH" не нужен, так как OSGeo4W сама настраивает пути. Начинайте сразу с "ogr2ogr...".
P.S. Если нужно объединить две команды в одну строку их разделяют символами "&&":
Код: Выделить всё
set path="..." && ogr2ogr
лангольеры под окном жрали время ом-ном-ном
-
- Активный участник
- Сообщения: 168
- Зарегистрирован: 08 апр 2009, 14:44
- Репутация: 18
- Откуда: Кострома
Re: Использование утилиты shp2pgsql
Здравствуйте, сделал
и все получилось таблица создана и загружена, большое СПАСИБО !
создал бат файлПопробуйте явно указать тип геометрии:
... -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
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 11 гостей