0

我不太喜欢数据库,我正在处理一个 MySql 地理查询,该查询必须找到距中心点指定距离范围内的所有兴趣点。

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

所以我有这张桌子:

create table Points (
    name VARCHAR(20) PRIMARY KEY,
    location Point NOT NULL,
    description VARCHAR(200),
    SPATIAL INDEX(location)
); 

我的兴趣点存储在哪里。Point字段包含地理坐标。

然后我有这个查询应该找到从中心点到距离范围(由@radious值表示)内的所有点:

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值,我发现点离设置的中心很远。

所以我认为测量单位必须是别的东西。是我的推理正确还是这个查询错误?

如果查询正确, @radius使用的测量单位到底是什么?怎么换算成公里?(用户插入以km为单位的半径值,应转换为该查询使用的正确值)

4

0 回答 0