记一次sql按经纬度计算距离
具体代码:
ROUND函数在mysql可以用来计算经纬度,代码如下:
SELECTa.store_name_sfa as storeName,a.storeid_sfa as store_id,a.link_man_sfa as link_man,a.link_phon_sfa as link_phone,a.photo as image_url,a.district,a.street,ROUND(6371000 * acos(cos(radians(#{latitude})) * cos(radians(a.lat_sfa)) * cos(radians(a.lon_sfa) - radians(#{longitude})) +sin(radians(#{latitude})) * sin(radians(a.lat_sfa))))/1000 AS distance,a.address_sfa as addressFROMstore_base_info awhere store_exists='0'HAVING distance <=3000
坐标系与经纬度知识点
:::info
WGS84坐标系:国际通用的
GCJ-02(火星坐标系):中国特有的加密坐标系
BD09坐标系:百度独有的
:::
WGS84坐标系
定义
WGS84坐标系,全称为World Geodetic System 1984,是国际上广泛使用的地球坐标系。它基于WGS84椭球体,提供全球统一的经纬度坐标系统。
应用
国际地图服务:如Google Maps(中国范围除外)、OpenStreetMap、Bing Maps、ArcGIS和Heremaps等,均采用WGS84坐标系。
GPS和北斗系统:大多数GPS和北斗芯片获取的经纬度数据均基于WGS84坐标系。
GCJ-02坐标系(火星坐标系)
定义
GCJ-02坐标系是由中国国家测绘局(现为国家自然资源部)制定的地理信息系统的坐标系统。它是在WGS84坐标系的基础上,通过特定的加密算法进行偏移处理后得到的。
应用
国内地图服务:谷歌中国地图、高德地图、腾讯地图等均采用GCJ-02坐标系,以满足国家对于地图数据的安全要求。
政府项目:许多政府机构和项目也使用GCJ-02坐标系,以确保地图数据的准确性和安全性。
BD09坐标系(百度坐标系)
定义
BD09坐标系是百度公司基于GCJ-02坐标系进一步加密得到的坐标系统。它在GCJ-02坐标系的基础上,再次应用百度自身的加偏算法,以提高地图数据的安全性和准确性。
应用
百度地图:百度地图完全采用BD09坐标系,以确保其地图数据的独特性和安全性。
:::info
其中BD09LL表示百度经纬度坐标,BD09MC表示百度墨卡托米制坐标。百度地图使用BD09LL进行定位就可以了
:::