sql (mysql)怎么实现查询某一个经纬度周围500米距离的餐馆,数据库存放所有餐馆的经纬度?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql (mysql)怎么实现查询某一个经纬度周围500米距离的餐馆,数据库存放所有餐馆的经纬度?相关的知识,希望对你有一定的参考价值。

回答的有点晚,正好我做到相关的项目了,希望能帮到其他人.

餐馆申请时候通过填写的地址取得经纬度存入数据库,下面是查询某个经纬度附近500米的

$user_lat='41.749034'; //传过来的纬度
$user_lng='123.46017';//传过来的经度
$store_mod=db("store"); //数据库
$storelist=$store_mod->query("SELECT
*,ROUND(6378.138*2*ASIN(SQRT(POW(SIN((".$user_lat."*PI()/180-【store_latitude】*PI()/180)/2),2)+COS(".$user_lat."*PI()/180)*COS(【store_latitude】*PI()/180)*POW(SIN((".$user_lng."*PI()/180-【store_longitude】*PI()/180)/2),2)))*1000)
AS distance FROM store HAVING 【搜索条件如 state=1】 distance<【周围距离多少米 如
500】 ORDER BY distance ASC");
var_dump($storelist);
【】sql语句中括号的store_latitude,store_longitude为你数据库存的商家经纬度的字段名,其余的为注释
参考技术A mysql两点间距,你也自己弄成函数

公式如下,单位米:
第一点经纬度:lng1 lat1
第二点经纬度:lng2 lat2
round(6378.138*2*asin(sqrt(pow(sin(
(lat1*pi()/180-lat2*pi()/180)/2),2)+cos(lat1*pi()/180)*cos(lat2*pi()/180)*
pow(sin( (lng1*pi()/180-lng2*pi()/180)/2),2)))*1000)

例如:
SELECT store_id,lng,lat,
ROUND(6378.138*2*ASIN(SQRT(POW(SIN((22.299439*PI()/180-lat*PI()/180)/2),2)+COS(22.299439*PI()/180)*COS(lat*PI()/180)*POW(SIN((114.173881*PI()/180-lng*PI()/180)/2),2)))*1000)
AS
juli
FROM store_info
ORDER BY juli DESC
LIMIT 316

sql (mysql)实现查询某一个经纬度周围500米距离的餐馆,数据库存放所有餐馆的经纬度。

mysql两点间距,你也自己弄成函数

公式如下,单位米:
第一点经纬度:lng1 lat1
第二点经纬度:lng2 lat2
round(6378.138*2*asin(sqrt(pow(sin(
(lat1*pi()/180-lat2*pi()/180)/2),2)+cos(lat1*pi()/180)*cos(lat2*pi()/180)*
pow(sin( (lng1*pi()/180-lng2*pi()/180)/2),2)))*1000)

例如:
SELECT store_id,lng,lat,
ROUND(6378.138*2*ASIN(SQRT(POW(SIN((22.299439*PI()/180-lat*PI()/180)/2),2)+COS(22.299439*PI()/180)*COS(lat*PI()/180)*POW(SIN((114.173881*PI()/180-lng*PI()/180)/2),2)))*1000)
AS
juli
FROM store_info
ORDER BY juli DESC
LIMIT 316
参考技术A 楼上回答的不详细,代码如下,正巧我做到相关项目,虽然回答有点晚,但是为了帮助后续搜索的人。。。
$user_lat='41.749034'; //传过来的纬度
$user_lng='123.46017';//传过来的经度
$store_mod=db("store"); //数据库
$storelist=$store_mod->query("SELECT *,ROUND(6378.138*2*ASIN(SQRT(POW(SIN((".$user_lat."*PI()/180-【store_latitude】*PI()/180)/2),2)+COS(".$user_lat."*PI()/180)*COS(【store_latitude】*PI()/180)*POW(SIN((".$user_lng."*PI()/180-【store_longitude】*PI()/180)/2),2)))*1000) AS distance FROM store HAVING 【搜索条件如 state=1】 distance<【周围距离多少米 如 500】 ORDER BY distance ASC");
var_dump($storelist);
【】sql语句中括号的store_latitude,store_longitude为你数据库存的商家经纬度的字段名,其余的为注释

以上是关于sql (mysql)怎么实现查询某一个经纬度周围500米距离的餐馆,数据库存放所有餐馆的经纬度?的主要内容,如果未能解决你的问题,请参考以下文章

sql (mysql)实现查询某一个经纬度周围500米距离的餐馆,数据库存放所有餐馆的经纬度。

sql语句查询经纬度范围

用mysql查询某字段是不是有索引怎么做?

SQL Server语句查询指定位置(经纬度)范围内信息

用mysql查询某字段是不是有索引怎么做?

laravel 的 sql 查询中的语法错误