我有一个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
失败的价值?
点类的参数超出范围。此外,参数的顺序是经度和纬度,与通常的不同。以下是来自mysql 5.7的官方参考。
https://dev.mysql.com/doc/refman/5.7/zh-CN/spatial-convenience-functions.html
几何参数应由指定(经度,纬度)坐标值的点组成:
经度和纬度分别是该点的第一和第二坐标。
两个坐标均以度为单位。
经度值必须在(-180,180]范围内。正值位于本初子午线以东。
纬度值必须在[-90,90]范围内。正值位于赤道以北。
当纬度或经度值超出范围时,您将收到此错误。因此,请检查ABS(long) > 180 OR ABS(lat) > 90
,例如
SELECT
*
FROM
`location`
WHERE
ABS(ST_X(`coordinates`)) > 180 OR
ABS(ST_Y(`coordinates`)) > 90
在我的情况下,条目具有POINT
value POINT(-0.006014 99.99999999000001)
,即纬度值超出范围。