我有一个MySQL查询:
UPDATE
`location` `l1`
SET
`l1`.`city_id` = (
SELECT
`c1`.`id`
FROM
`city` `c1`
ORDER BY
ST_Distance_Sphere(`c1`.`coordinates`, `l1`.`coordinates`) ASC
LIMIT
1
)
产生错误:
st_distance_sphere的参数不正确
针对数据集的子集执行时。
如何获取导致st_distance_sphere
失败的值?
答案 0 :(得分:5)
点类的参数超出范围。此外,论证的顺序是经度和纬度,它与通常的不同。以下是来自mysql 5.7的官方参考资料。
https://dev.mysql.com/doc/refman/5.7/en/spatial-convenience-functions.html
几何参数应由指定的点组成 (经度,纬度)坐标值:
经度和纬度是第一和第二坐标 分别是。
两个坐标都是度数。
经度值必须在(-180,180)范围内。正值为 本初子午线以东。
纬度值必须在[-90,90]范围内。正值是 在赤道以北。
答案 1 :(得分:4)
当纬度或经度值超出范围时,您将收到此错误。因此,请检查ABS(long) > 180 OR ABS(lat) > 90
,例如
SELECT
*
FROM
`location`
WHERE
ABS(ST_X(`coordinates`)) > 180 OR
ABS(ST_Y(`coordinates`)) > 90
在我的情况下,条目的值为POINT
POINT(-0.006014 99.99999999000001)
,即纬度值超出范围。