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 公式来确定你的距离。
我有 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 公式来确定你的距离。