1

我正在处理 MySQL 地理查询。

因此,按照本教程:http ://howto-use-mysql-spatial-ext.blogspot.it/2007/11/using-circular-area-selection.html

我已经实现了这个查询,它找到了与指定点有特定距离的所有点:

SET @center = GeomFromText('POINT(10 10)');
SET @radius = 30;
SET @bbox = CONCAT('POLYGON((',
X(@center) - @radius, ' ', Y(@center) - @radius, ',',
X(@center) + @radius, ' ', Y(@center) - @radius, ',',
X(@center) + @radius, ' ', Y(@center) + @radius, ',',
X(@center) - @radius, ' ', Y(@center) + @radius, ',',
X(@center) - @radius, ' ', Y(@center) - @radius, '))'
); 

通过这段代码,我定义了中心点和半径。

最后,我执行查询,找到所有点的距离由该设置的中心点的半径表示:

SELECT name, AsText(location)
FROM Points
WHERE Intersects( location, GeomFromText(@bbox) )
AND SQRT(POW( ABS( X(location) - X(@center)), 2) + POW( ABS(Y(location) - Y(@center)), 2 )) < @radius; 

它似乎工作正常。

我的疑问是:@radius的度量单位是什么?是公里还是什么?

在此示例中, @radius的值设置为30。但究竟是什么代表了这个价值呢?

4

1 回答 1

2

距离没有默认的度量单位。实际上 MySQL 中的坐标是无量纲的。但是对于笛卡尔坐标,您可以假装所有距离都具有相同的基本测量单位。在使用相同单位解释所有数据之前,它将正常工作。

例如,您可以选择米作为单位距离。在这种情况下,GeomFromText('POINT(10 10)')距离原点 14.14m。当您需要提供半径时,请记住,所有距离均以米为单位,因此@radius = 30表示半径为 30m。

对于其他类型的坐标,所需的单位度量将取决于用于距离计算的公式。例如,如果您使用球坐标(经度和纬度),则来自Wikipedia的距离公式将为您提供单位球体上的距离。所以@radius应该用地球半径来测量。因此,单位为@radius6371km。

于 2016-11-06T21:49:09.047 回答