【问题标题】:Why can't PHP insert new geometry on PostGIS?为什么 PHP 不能在 PostGIS 上插入新几何?
【发布时间】:2023-03-11 22:38:01
【问题描述】:

我正在使用 ogr2ogr 将 GPX 文件上传到 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)

我在这里错过了什么?

编辑

我尝试了 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 可能有一些问题,可能是缺少库或权限?

编辑 2

现在我看到有一些用户需要运行的安装

psql -d yourdatabase -f postgis.sql

在我的电脑上我只做了

create extension postgis;
create extension postgis_topology;

看看是不是这个问题。

编辑 3 - 已解决!

我又开始了:

  1. 从备份中恢复了以前的数据库;
  2. create extension postgis;
  3. create extension postgis_topology;
  4. 来自控制台的ogr2ogr 创建额外的表(如waypoints);
  5. 在此之后,我需要将这些附加表中的访问权限授予 php/apache 用户。

【问题讨论】:

    标签: php postgis gdal ogr


    【解决方案1】:

    您的源图层似乎没有空间参考系统 (SRID=0)。

    使用ogr2ogr,您可以尝试-s_srs EPSG:4326 覆盖源SRS。

    【讨论】:

    • @Rodrigo 改用-a_srs 怎么样?
    • 我尝试了所有三个:-a_srs、-t_srs 和 -s_srs。没有工作。
    • @Rodrigo 尝试将 this 的位置移到开头附近,因为参数的顺序有时非常具体
    • 喜欢我编辑的注释行吗?我在每个可能的位置都尝试了所有三个选项(a、t 和 s)。总是同样的错误。
    【解决方案2】:

    我又开始了:

    1. 从备份中恢复了以前的数据库;
    2. create extension postgis;
    3. create extension postgis_topology;
    4. 来自控制台的ogr2ogr 创建额外的表(如waypoints);
    5. 在此之后,我需要将这些附加表中的访问权限授予 php/apache 用户。

    【讨论】:

      猜你喜欢
      • 2021-05-04
      • 2020-09-25
      • 2018-05-27
      • 1970-01-01
      • 2020-03-21
      • 2019-08-23
      • 2016-12-22
      • 2019-07-03
      • 1970-01-01
      相关资源
      最近更新 更多