如何获取值导致st_distance_sphere""不正确的参数错误?

时间:2015-12-04 18:32:59

标签: mysql

我有一个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失败的值?

2 个答案:

答案 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),即纬度值超出范围。