2016-04-27 2 views
1

Я использую ogr2ogr для загрузки GPX-файла в PostGIS.Почему PHP не может вставить новую геометрию в PostGIS?

Когда я делаю это в командной строке (Ubuntu 14.04), он отлично работает.

ogr2ogr -append -f PostgreSQL PG:"host=... dbname=... user=... password=..." 2016-04-26_15-32-01.xml 

Когда я делаю это на PHP (5.5.9),

exec("ogr2ogr -append -f PostgreSQL PG:\"host=".HOST." dbname=".DATABASE." user=".USER." password=".PASSWORD."\" /var/www/html/plantas/gps/2016-04-26_15-32-01.xml 2>&1",$output,$retval); 

это дает следующее сообщение об ошибке:

ERROR 1: INSERT command for new feature failed. 
ERROR: Geometry SRID (0) does not match column SRID (4326) 

Command: INSERT INTO "waypoints" ("wkb_geometry" , "ele", "time", "name", "cmt", "desc", "sym", "type", "gpxx_waypointextension", "wptx1_waypointextension", "ctx_creationtimeextension") VALUES ('010100000000008C76C2DF4EC00100C0A13A450E40'::GEOMETRY, 594, '2015/11/16 17:22:09+00', 'ROP_2904', '08-NOV-15 9:56:51 
PONTO 60', '08-NOV-15 9:56:51 
PONTO 60', 'Flag, Blue', 'user', ' SymbolAndName ', ' SymbolAndName ', ' 2015-11-16T17:22:09Z ') RETURNING "ogc_fid" 
ERROR 1: Terminating translation prematurely after failed 
translation of layer waypoints (use -skipfailures to skip errors) 

Что я здесь отсутствует?

EDIT

Я попытался Mike T предложение:

$linha = "ogr2ogr -append -f PostgreSQL PG:\"host=".HOST." dbname=".DATABASE." user=".USER." password=".PASSWORD."\" -s_srs EPSG:4326 /var/www/html/plantas/gps/2016-04-26_15-32-01.xml 2>&1"; 
// or $linha = "ogr2ogr -s_srs EPSG:4326 -append -f PostgreSQL PG:\"host=".HOST." dbname=".DATABASE." user=".USER." password=".PASSWORD."\" /var/www/html/plantas/gps/2016-04-26_15-32-01.xml 2>&1"; 
exec($linha,$output,$retval); 

без толку:

ERROR 1: INSERT command for new feature failed. 
ERROR: Geometry SRID (0) does not match column SRID (4326) 

Что действительно странно, что точно такие же команда работает на терминале. Итак, я думаю, что у PHP может быть какая-то проблема, возможно, недостающая библиотека или разрешение?

EDIT 2

Теперь я вижу, есть некоторые установки, где пользователю необходимо запустить

psql -d yourdatabase -f postgis.sql 

В моем компьютере я сделал только

create extension postgis; 
create extension postgis_topology; 

Собираюсь посмотреть, если это проблема.

EDIT 3 - SOLVED!

Я начал все это снова:

  1. восстановить предыдущую базу данных из резервной копии;
  2. create extension postgis;
  3. create extension postgis_topology;
  4. ogr2ogr из консоли создает дополнительные таблицы (как waypoints);
  5. После этого мне нужно предоставить доступ в этих дополнительных таблицах пользователю php/apache.

ответ

0

Я начал все это снова:

  1. восстановить предыдущую базу данных из резервной копии;
  2. create extension postgis;
  3. create extension postgis_topology;
  4. ogr2ogr из консоли создает дополнительные таблицы (как waypoints);
  5. После этого мне нужно предоставить доступ в этих дополнительных таблицах пользователю php/apache.
1

Похоже, что ваш исходный слой не имеет пространственной системы отсчета (SRID = 0).

С помощью ogr2ogr вы можете попробовать -s_srs EPSG:4326, чтобы переопределить исходный SRS.

+0

Спасибо, Майк, но я все равно получаю такую ​​же ошибку. – Rodrigo

+0

@Rodrigo как насчет использования '-a_srs' вместо этого? –

+0

Я пробовал все три: -a_srs, -t_srs и -s_srs. Никто не работал. – Rodrigo

Смежные вопросы