我的数据库包含一个联系人列表,其中包含puesdo坐标。这是一个示例:
moment.utc("160114224512Z", 'x').format('YYYY-MM-DD HH:mm:ss');
"1975-01-28 04:10:24"
我想知道是否可以创建一个可以在两个坐标的距离内搜索的查询?例如,我想要一份居住在詹姆斯20平方英里范围内的人员名单。
哪些功能可以帮助我做到这一点?
答案 0 :(得分:2)
Mysql语法:
SELECT name FROM `table` WHERE SQRT(
POW(e_point - (SELECT e_point FROM `table` WHERE name='james'), 2) +
POW(n_point - (SELECT n_point FROM `table` WHERE name='james'), 2)) < 20
AND name <> 'james'
注意:
答案 1 :(得分:2)
要计算你需要获得Great-circle distance的2个坐标之间的距离,因为地球是圆的,距离的测量会受到这个事实的影响。
,使用SQL执行此操作会是这样的SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) )
AS distance
FROM markers
HAVING distance < 25
ORDER BY distance
LIMIT 0 , 20;
答案 2 :(得分:1)
如果你的坐标代表x和y坐标,你可以使用这样的东西(只用实际的表名替换contacts
的出现次数)返回的距离是&#39; James&#39;的距离:< / p>
SELECT T2.name,
SQRT(POWER(T2.e_point-T1.e_point,2)+
POWER(T2.n_point-T1.n_point,2)) as distance
FROM contacts T1
INNER JOIN contacts T2 ON
SQRT(POWER(T2.e_point-T1.e_point,2)+
POWER(T2.n_point-T1.n_point,2)) <= 20
WHERE T1.name = 'James'
AND T1.name != T2.name