经纬度距离计算

        SqlArgs sqlArgs = new SqlArgs();
        sqlArgs.append(" select ");
        sqlArgs.append("   org.id, ");
        sqlArgs.append("   org.unique_id as org_unique_id, ");
        sqlArgs.append("   org.name, ");
        sqlArgs.append("   org.address, ");
        sqlArgs.append("   org.longitude, ");
        sqlArgs.append("   org.latitude, ");
        Double latitude = apiOrganizationSearchDTO.getLatitude();
        Double longitude = apiOrganizationSearchDTO.getLongitude();

        String str = "ROUND(6378.138*2*ASIN(SQRT(POW(SIN((%s*PI()/180-org.latitude*PI()/180)/2),2)" +
                "+COS(%s*PI()/180)*COS(org.latitude*PI()/180)*POW(SIN((%s*PI()/180-org.longitude*PI()/180)/2),2)))*1000) AS distance ";
        sqlArgs.append(String.format(str, latitude, latitude, longitude));

        sqlArgs.append(" from ");
        sqlArgs.append("   dict_organization org ");
        sqlArgs.append(" order by distance asc ");
SELECT
	id,
	NAME,
	unique_id,
	longitude,
	latitude,
	ROUND(
		6378.138 * 2 * ASIN(
			SQRT(
				POW( SIN( ( 39.916527 * PI( ) / 180- latitude * PI( ) / 180 ) / 2 ), 2 ) + COS( 39.916527 * PI( ) / 180 ) * COS( latitude * PI( ) / 180 ) * POW( SIN( ( 116.397128 * PI( ) / 180- longitude * PI( ) / 180 ) / 2 ), 2 ) 
			) 
		) * 1000 
	) AS distance 
FROM
	(
	SELECT
		org.id,
		org.NAME,
		org.unique_id,
		org.longitude,
		org.latitude 
	FROM
		dict_organization org
	RIGHT JOIN tbl_activity_organization aorg ON org.id = aorg.org_id 
	) o
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值