项目中遇到需要查询20公里以内的数据
我找到的有两种写法
SELECT *,( 6371 * acos ( cos ( radians(要查询的纬度) ) * cos( radians( 表中的纬度字段 ) ) * cos( radians( 表中的经度字段) - radians(要查询的经度)) + sin ( radians(要查询的纬度) )
* sin( radians( 表中的纬度字段) ) ) ) AS distance FROM 表名
HAVING distance < 公里数 ORDER BY distance LIMIT 10;
select * from 表名 where 表里的纬度> '.获取的纬度.'-公里数 and 表里的纬度 < '.获取的纬度.'+公里数 and 表里的经度 > '.获取的经度.'-公里数 and 表里的经度 < '.获取的经度.'+公里数 order by ACOS(SIN(('.获取的纬度.' * 3.1415) / 180 ) *SIN((表里的纬度 * 3.1415) / 180 ) +COS(('.获取的纬度.' * 3.1415) / 180 ) * COS((表里的纬度 * 3.1415) / 180 ) *COS(('.获取的经度.'* 3.1415) / 180 - (表里的经度 * 3.1415) / 180 ) ) * 6380 asc limit 10
select * from ha_sai where gis_y>121-20 and gis_y<121+20 and gis_x>30-20 and gis_x<30+20 order by ACOS(sin((121*3.1415)/180)*sin((121*3.1415)/180)+cos((121*3.1415)/180)*cos((gis_y*3.1415)/180)*cos((30*3.1415)/180-(gis_x*3.1415)/180))*6380 ASC limit 10