1)如果是js状态可以利用地图供应商比如高德,百度的sdk库来计算,需要注册开发者账号,也可以在其他方式下验证。
(https://lbs.amap.com/api/javascript-api/example/calcutation/calculate-distance-between-two-markers)
2)利用地球半径计算。即球体(圆)上2个点的曲线距离。
(https://blog.csdn.net/jianggujin/article/details/72833711)
这个依然是调用第三方高德的接口请求结果。
(https://blog.csdn.net/a_step_further/article/details/54025386)
3.纯粹数据库的计算
mysql(https://blog.csdn.net/jianggujin/article/details/72833711#mysql%E5%AE%9E%E7%8E%B0)
sql server中有关于地理位置的类型,此次传入参数为latitude,longititude格式string。
ALTER FUNCTION [dbo].[cal_gps_distance]
( @src AS VARCHAR(100),
@dst AS VARCHAR(100)
)
RETURNS decimal(20,2)
AS
BEGIN
-- routine body goes here, e.g.
-- SELECT 'Navicat for SQL Server'
declare @src_lon varchar(50)
declare @src_lat varchar(50)
declare @dst_lon varchar(50)
declare @dst_lat varchar(50)
DECLARE @src_geo geography;
DECLARE @dst_geo geography;
DECLARE @result decimal(20,2);
set @src_lat=convert(decimal(12,9),substring(@src,0,charindex(',',@src)))
set @src_lon=convert(decimal(12,9),substring(@src,charindex(',',@src)+1,len(@src)))
set @dst_lat=convert(decimal(12,9),substring(@dst,0,charindex(',',@dst)))
set @dst_lon=convert(decimal(12,9),substring(@dst,charindex(',',@dst)+1,len(@dst)))
--return @src_lat
--,@src_lon;
set @src_geo= geography::Point(@src_lat, @src_lon, 4326);
set @dst_geo= geography::Point(@dst_lat, @dst_lon, 4326);
--set @result=convert(decimal(20,2),@src_geo.STDistance(@dst_geo))
set @result=CAST(@src_geo.STDistance(@dst_geo) as decimal(20,2))
return @result
END