【问题标题】:Laravel Postgis generate Point objectLaravel Postgis 生成 Point 对象
【发布时间】:2016-02-07 22:03:36
【问题描述】:

我正在使用带有 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)

我想知道我的错误。

【问题讨论】:

    标签: php postgresql laravel laravel-5 postgis


    【解决方案1】:

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

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

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

    【讨论】:

    • 我认为您没有注意报告的错误。错误是关于解析 ST.
    • 我是说 ST_PointFromText 是构造几何图形最容易出错且效率最低的方式,并建议采用正常方式(从而避免报告的错误)。但是,我不确定这应该如何适应 Laravel。
    猜你喜欢
    • 2011-04-22
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 2014-07-03
    相关资源
    最近更新 更多