查找MYSQL两点之间的距离。 (使用点数据类型)
题
假设我有一个2列的表是这样的:
| user_id | int(11) | NO | UNI | NULL | |
| utm | point | NO | MUL | NULL | |
正如你所看到的,这是非常简单的。 UTM是一个的点数据类型。我将其插入这样的:
INSERT INTO mytable(user_id, utm) VALUES(1, PointFromWKB(point(50, 50)));
然后,创建一个空间索引。
ALTER TABLE mytable ...add spatial index on(utm) or something. (forgot)
好的,一切都很好。现在,我想选择*,其中距离<99999。 但是,这是行不通的!
//This is supposed to select all where the distance is less than 99999999.
set @mypoint = PointFromWKB(point(20,20))
select * from mytable where GLength(LineString(utm, @mypoint)) < 9999999;
Empty set (0.00 sec)
select * from mytable where GLength(LineStringFromWKB(LineString(utm, @mypoint))) < 9999;
Empty set (0.00 sec)
顺便说一句,我试图INSERT INTO没有PointFromWKB ...它没有工作......这就是为什么有人建议PointFromWKB给我。
解决方案
解决。这是我做过什么:
where GLength(LineStringFromWKB(LineString(asbinary(utm), asbinary(@mypoint)))) < 9999999999999;
其他提示
您也可以这样来做。不知道它的速度更快与否。
select * from mytable where glength(geomfromtext(concat('linestring(', x(utm), ' ', y(utm), ',20 20', ')'))) < 99999999
据我所知,我只好试试这种方式 -
select * from mytable
where
(
GLength(
LineStringFromWKB(
LineString(
geoPoint,
GeomFromText('POINT(51.5177 -0.0968)')
)
)
)
) < 99999999
在的 此答案更多一> 强>
不隶属于 StackOverflow