2、mysql根据给定坐标查询半径几公里内的所有坐标

mysql根据给定坐标查询半径几公里内的所有坐标

1. 根据表主键进行查询

注意:gis_longitude 经度、gis_latitude 纬度、JOIN里面可以扩展为根据另一个表的经纬度查询业务表的坐标、land_info换成自己的业务表

SELECT
	land_id,
	land_name,
	gis_longitude,
	gis_latitude,
	ROUND(
		6378.138 * 2 * ASIN(
			SQRT(
			POW( SIN(( origin.latitude * PI() / 180 - gis_latitude * PI() / 180 ) / 2 ), 2 ) + COS( origin.latitude * PI() / 180 ) * COS( gis_latitude * PI() / 180 ) * POW( SIN(( origin.longitude * PI() / 180 - gis_latitude * PI() / 180 ) / 2 ), 2 )))) AS distance 
FROM
	land_info
	JOIN ( SELECT gis_longitude AS longitude, gis_latitude AS latitude FROM land_info WHERE land_id = 2 ) AS origin 
WHERE
	ROUND(
		6378.138 * 2 * ASIN(
		SQRT(
	POW( SIN(( origin.latitude * PI() / 180 - gis_latitude * PI() / 180 ) / 2 ), 2 ) + COS( origin.latitude * PI() / 180 ) * COS( gis_latitude * PI() / 180 ) * POW( SIN(( origin.longitude * PI() / 180 - gis_longitude * PI() / 180 ) / 2 ), 2 )))) <= 10 ###(修改改制范围)

2. 根据传入经纬度坐标进行查询

注意:
(1)@origin.latitude:是传入的纬度
(2)@origin.longitude:是传入的经度
(3)@kilometer:是范围(公里)
(3)land_info修改为自己的业务表

set @origin.latitude = 39.924987;  ###纬度
set @origin.longitude = 116.466755; ###经度
set @kilometer = 10; ###范围

SELECT
	land_id,
	land_name,
	gis_longitude,
	gis_latitude,
	ROUND(
		6378.138 * 2 * ASIN(
			SQRT(
			POW( SIN(( @origin.latitude * PI() / 180 - gis_latitude * PI() / 180 ) / 2 ), 2 ) + COS( @origin.latitude * PI() / 180 ) * COS( gis_latitude * PI() / 180 ) * POW( SIN(( @origin.longitude * PI() / 180 - gis_latitude * PI() / 180 ) / 2 ), 2 )))) AS distance 
FROM
	land_info
WHERE
	ROUND(
		6378.138 * 2 * ASIN(
		SQRT(
	POW( SIN(( @origin.latitude * PI() / 180 - gis_latitude * PI() / 180 ) / 2 ), 2 ) + COS( @origin.latitude * PI() / 180 ) * COS( gis_latitude * PI() / 180 ) * POW( SIN(( @origin.longitude * PI() / 180 - gis_longitude * PI() / 180 ) / 2 ), 2 )))) <= @kilometer
  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Katakuri1125

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值