Laravel Postgis生成Point对象

时间:2016-02-07 22:03:36

标签: php postgresql laravel laravel-5 postgis

我正在使用Postgis使用Postgres数据库开发一个带Laravel框架的系统。数据库有一个带有几何字段(3D点)的表。所以我需要将3个维度转换为Point对象,将Point对象转换为3个维度。

我搜索了Laravel Postgis图书馆,我找到了laravel-postgis,但它只针对2D点开发,并且不支持3D点。因此我决定直接使用或在php中开发一个转换功能,以便在Laravel中使用。

我试图直接插入新数据的一些代码:

$arr = ['geometry' => "ST_PointFromText('POINT(' || " . Input::get('Latitude') . " || ' ' || " . Input::get('Longitude') . " || ' ' || " . Input::get('Altitude') . " || ')', 4326)"];
Location::where('id','1')->update($arr);

$ arr变量的样本初始化类似于

  

ST_PointFromText(' POINT(' || 1 ||'' || 1 ||'' || 1 ||' )',4326)

这就像我在this link

中找到的东西

但是Laravel调试给我带来了错误:

PDOException in Connection.php line 384: SQLSTATE[XX000]: Internal error: 7 ERROR: parse error - invalid geometry HINT: "ST" <-- parse error at position 2 within geometry

SQLSTATE[XX000]: Internal error: 7 ERROR: parse error - invalid geometry HINT: "ST" <-- parse error at position 2 within geometry (SQL: update "DBLocation" set "geometry" = ST_PointFromText('POINT(' || 1 || ' ' || 1 || ' ' || 1 || ')', 4326) where "id" = 1)

我想知道我的错误。

1 个答案:

答案 0 :(得分:0)

我不确定参数化查询的语法,但它应该是这样的:

ST_SetSRID(ST_MakePoint(%, %, %), 4326);

有三个参数:LongitudeLatitudeAltitude 按此顺序排列!