地图计算两点间距离(java版+sql版)

本文提供了两种计算地球上两点间地理距离的方法:一种是使用Java实现的函数,另一种是在SQL中创建的计算函数。这些方法利用经纬度计算两点间的球面距离。

java版:

public double getDistance(Point start, Point end) {

        double lon1 = (Math.PI / 180) * start.longitude;
        double lon2 = (Math.PI / 180) * end.longitude;
        double lat1 = (Math.PI / 180) * start.latitude;
        double lat2 = (Math.PI / 180) * end.latitude;

        // 地球半径
        double R = 6371;
        double d = Math.acos(Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1))
                * R;
        //转换成千米(根据自己需求)
        return d * 1000;
    }

sql创建计算函数代码:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[fnGetDistance](@LatBegin REAL, @LngBegin REAL, @LatEnd REAL, @LngEnd REAL) RETURNS FLOAT
  AS
BEGIN
--距离(米)
  DECLARE @Distance FLOAT
  DECLARE @b INT SET @b = -180
  DECLARE @c INT SET @c = 180
  DECLARE @d INT SET @d = -74
  DECLARE @e INT SET @e = 74
  DECLARE @X_PI REAL SET @X_PI = 3.14159265358979323846
  if(@LngBegin > @c)
  begin
  set @LngBegin = @LngBegin-(@c - @b)
  end
  if(@LngBegin < @b)
  begin 
  set @LngBegin = @LngBegin+(@c - @b)
  end

  if(@LngEnd > @c)
  begin
  set @LngEnd = @LngEnd-(@c - @b)
  end
  if(@LngEnd < @b)
  begin 
  set @LngEnd = @LngEnd+(@c - @b)
  end
  
  if(@LatBegin < @d)
  begin
  set @LatBegin = @d
  end
  if(@LatBegin > @e)
  begin 
  set @LatBegin = @e
  end
  
  if(@LatEnd < @d)
  begin
  set @LatEnd = @d
  end
  if(@LatEnd > @e)
  begin 
  set @LatEnd = @e
  end
  
  DECLARE @aX REAL SET @aX = @X_PI*@LngBegin/180
  DECLARE @aY REAL SET @aY = @X_PI*@LatBegin/180
  DECLARE @bX REAL SET @bX = @X_PI*@LngEnd/180
  DECLARE @bY REAL SET @bY = @X_PI*@LatEnd/180
  
  set @Distance = 6370996.81*ACOS(SIN(@aY)*SIN(@bY)+ COS(@aY) * COS(@bY) * COS(@bX - @aX))
  RETURN @Distance
END
GO





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值