当前位置:  开发笔记 > 后端 > 正文

如何获取导致“ st_distance_sphere参数错误”错误的值?

如何解决《如何获取导致“st_distance_sphere参数错误”错误的值?》经验,为你挑选了2个好方法。

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



1> Tiina..:

点类的参数超出范围。此外,参数的顺序是经度和纬度,与通常的不同。以下是来自mysql 5.7的官方参考。

https://dev.mysql.com/doc/refman/5.7/zh-CN/spatial-convenience-functions.html

几何参数应由指定(经度,纬度)坐标值的点组成:

经度和纬度分别是该点的第一和第二坐标。

两个坐标均以度为单位。

经度值必须在(-180,180]范围内。正值位于本初子午线以东。

纬度值必须在[-90,90]范围内。正值位于赤道以北。



2> Gajus..:

当纬度或经度值超出范围时,您将收到此错误。因此,请检查ABS(long) > 180 OR ABS(lat) > 90,例如

SELECT
    *
FROM
    `location`
WHERE
    ABS(ST_X(`coordinates`)) > 180 OR
    ABS(ST_Y(`coordinates`)) > 90

在我的情况下,条目具有POINTvalue POINT(-0.006014 99.99999999000001),即纬度值超出范围。

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有