【发布时间】:2019-02-23 05:48:24
【问题描述】:
我发现 laravel(lumen) 查询生成器中的 postgis 函数存在问题。
流明版本:5.6
Postgres:9.6.9 与 postGIS
我有一个有效的代码:
$sql = "ST_DWithin(location ,'POINT($lat $lon)', $distance)";
$query->whereRaw($sql);
这可行,但我想通过参数绑定传递参数:
$sql = "ST_DWithin(location ,'POINT(? ?)', ?)";
$query->whereRaw($sql, [$lat, $lon, $distance]);
乍一看看起来不错,但它返回一个错误:
Invalid parameter number: parameter was not defined (SQL: select * from "my_table" where ST_DWithin(location ,'POINT(123 123)', 1000)
我尝试了其他组合并且有效:
$point = 'POINT($lat $lon)';
$sql = "ST_DWithin(location ,?, ?)";
$query->whereRaw($sql, [$point, $distance]);
所以问题似乎出在POINT 函数上
【问题讨论】:
-
转换为几何:
'POINT(? ?)'::geometry -
它不起作用。还是一样的错误
-
我注意到的其他事情:1)WKT定义坐标顺序为[x,y],因此您需要使用
'POINT(<lon> <lat>)'--> 更好地使用SetSRID(ST_MakePoint(<lon>, <lat>), 4326); 2) 纬度不能超过+-90°; 3) 如果您打算使用米作为距离,请将两个输入几何图形都转换为geography,否则距离参数将被视为degrees; 4)检查是否必须在字符串文字中转义参数
标签: php laravel postgresql postgis