ST_Length 测量单位类型

ST_Length measure unit type

我有 MySQL table 并请求获取给定半径内的距离:

    SELECT 
        *,
(ST_Length(LineStringFromWKB(LineString(location, GeomFromText("POINT(55.525211 30.492340)"))))) AS distance                            
    FROM 
        `#__positions` 
    HAVING 
        distance < radius

例如,我不想获取 2 英里半径内的所有记录。 但我的问题是我不知道 ST_Length 返回的单位。如果是 度数 我如何将其转换为英里数?

-location table 列包含了很多遍布全球的空间点。 谢谢

我不是 MYSQL 用户,但据我所知,它在这方面与 MSSQL 类似。

我相信 GeomFromText 是笛卡尔坐标系,如果是这样,那么 ST_Length 不会给你想要的东西。

试试这个以确保:

SELECT
ST_Length(
  LineStringFromWKB(
    LineString(
      GeomFromText("POINT(0 0)"), 
      GeomFromText("POINT(1 0)")
    )
  )
)

如果给你的值为 1,那么你是在笛卡尔坐标系或平面坐标系中运行。

在你的问题中,你问返回的单位是不是度,这几乎是正确的。

问题在于并不是所有的学位都是平等的。假设你离北极几英尺远;你可以在0度经度和90度经度之间走几步。如果你在赤道上,你将不得不跨越海洋。这意味着度数不能转换为长度。

从我对这个问题所做的(公认的少量)谷歌搜索来看,似乎 MYSQL 中没有内置函数可以为您提供地球表面的测量值。我认为你最好的选择是编写一个函数来使用 haversine 公式来确定你的距离。