【问题标题】:MySQL POINT spatial index query within radius from center POINTMySQL POINT 空间索引查询从中心 POINT 半径内
【发布时间】:2020-10-25 14:08:04
【问题描述】:

我看到了许多解决方案,用于从 POINT 获取最近的行以转换为 X()Y() 并进行距离的三角计算......据我所知,这似乎没有利用空间索引?

您如何利用空间索引,在最常见的意义上,返回空间POINT 在距中心POINT 半径范围内的行?

换句话说,你如何得到这样的东西 - 其中LatLng 是每行存储为 POINT 的纬度 lng 位置,CenterPoint 是震中

伪代码查询:SELECT * FROM geotable WHERE d=Distance(LatLng,CenterPoint) < 10 ORDER by d

【问题讨论】:

    标签: mysql


    【解决方案1】:

    你可以使用 st_distance_sphere

    SELECT * 
    FROM geotable 
    WHERE st_distance_sphere(POINT(-82.337036, 29.645095 ), POINT(`longitude`, `latitude` ))/1000  < 10
    

    在这里你可以看到working example

    【讨论】:

    • 有趣!所以列本身不是POINT,而是两个独立的latitudelongitude 列?
    • 还有你为什么用 varchar 而不是小数来表示纬度/经度?
    • 这是问题所在,数据是那种形式的,但如果你以这种方式保存它,你可以使用 Point。
    • 还有你如何按距离订购?
    • 能否请您看一下提供的示例链接
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 2012-07-11
    • 2011-10-02
    • 1970-01-01
    • 2016-04-21
    相关资源
    最近更新 更多