距离查询

MYSQL
SELECT  user_id,wave_id,wave_len,self_intro,nick_name,avatar_uri,login_at,lat,lng,voice_total_len,
SQRT(POW(69.1 * (lat - {$param['lat']}), 2) +POW(69.1 * ({$param['lng']} - lng) * COS(lat / 57.3), 2))*1609.344 AS distance 
FROM sx_user_setting join sx_user on sx_user_setting.user_id = sx_user.id where gps_switch = {$switch}{$andWhere}
HAVING distance < 20000 ORDER BY distance ASC limit {$offset},10 

1 英里=1609.344米

REDIS

shell> georadius key longitude latitude radius m|km|ft|mi [WITHCOORD]

longitude:经度

latitude:维度

radius:范围

m|km|ft|mi:范围的单位

m 表示单位为米。 km 表示单位为千米。 mi 表示单位为英里。 ft 表示单位为英尺。

WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。

WITHCOORD: 将位置元素的经度和维度也一并返回。

WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。

Leave Comment

电子邮件地址不会被公开。 必填项已用*标注