mysql - 用于查找距中心点具有特定距离的所有点的 MySQL 地理查询中使用的测量单位是什么?

标签 mysql database gis rdbms mysql-spatial

我正在研究 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。但这个值到底代表什么?

最佳答案

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

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

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

关于mysql - 用于查找距中心点具有特定距离的所有点的 MySQL 地理查询中使用的测量单位是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40453373/

相关文章:

mysql - 如何设置 MySQL 的时区?

Mysql self join 需要帮助

database - Informix 更改 CASE WHEN eventType = 7 THEN "Logged Out"

Android:如何使用 SugarORM 搜索数据

javascript - 如何检查是否加载了 Dojo 对话框?

mysql - 为选择建立索引 mysql 表

mysql - 存储过程中的语法错误

php - 连接三个表时,MySQL 不返回任何内容。两个表在第三个表中有外键。怎么了?

javascript - 使用 Google Maps API 的多个多边形数组

r - "sf"包 (R) 是否有一个函数可以完全合并几何图形?