欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > 数据库 >内容正文

数据库

mysql 计算gps坐标距离_mysql、sqlserver和php计算GPS经纬度坐标距离

发布时间:2024/9/20 数据库 42 豆豆
生活随笔 收集整理的这篇文章主要介绍了 mysql 计算gps坐标距离_mysql、sqlserver和php计算GPS经纬度坐标距离 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

摘要:mysql、sqlserver、oracle和php计算GPS经纬度坐标距离

mysql计算GPS经纬度距离DELIMITER $$

CREATEDEFINER=`root`@`localhost` FUNCTION`getDistance`(

lon1 float(10,7)

,lat1 float(10,7)

,lon2 float(10,7)

,lat2 float(10,7)

) RETURNSdouble

begin

declared double;

declareradius int;

setradius = 6378140; #假设地球为正球形,直径为6378140米

setd = (2*ATAN2(SQRT(SIN((lat1-lat2)*PI()/180/2)

*SIN((lat1-lat2)*PI()/180/2)+

COS(lat2*PI()/180)*COS(lat1*PI()/180)

*SIN((lon1-lon2)*PI()/180/2)

*SIN((lon1-lon2)*PI()/180/2)),

SQRT(1-SIN((lat1-lat2)*PI()/180/2)

*SIN((lat1-lat2)*PI()/180/2)

+COS(lat2*PI()/180)*COS(lat1*PI()/180)

*SIN((lon1-lon2)*PI()/180/2)

*SIN((lon1-lon2)*PI()/180/2))))*radius;

returnd;

end

mssql计算GPS经纬度距离SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE FUNCTION [dbo].[getDistance](@lng1 FLOAT,@lat1 FLOAT,@lng2 FLOAT,@lat2 FLOAT)

RETURNS FLOAT

AS

BEGIN

DECLARE @Distance FLOAT

DECLARE @EARTH_RADIUS FLOAT

SET @EARTH_RADIUS = 6378140

DECLARE @RadLatBegin FLOAT,

@RadLatEnd FLOAT,

@RadLatDiff FLOAT,

@RadLngDiff FLOAT

SET @RadLatBegin = @lat1 *PI()/ 180.0

SET @RadLatEnd = @lat2 *PI()/ 180.0

SET @RadLatDiff = @RadLatBegin - @RadLatEnd

SET @RadLngDiff = @lng1 *PI()/ 180.0 - @lng2 *PI()/ 180.0

SET @Distance = 2 *ASIN(

SQRT(

POWER(SIN(@RadLatDiff / 2), 2)+COS(@RadLatBegin)*COS(@RadLatEnd)

*POWER(SIN(@RadLngDiff / 2), 2)

)

)

SET @Distance =ROUND(@Distance * @EARTH_RADIUS,1)

--SET @Distance = Round(@Distance * 10000) / 10000

RETURN @Distance

END

PHP计算GPS经纬度坐标<?php

functionrad($d){

return$d* 3.1415926535898 / 180.0;

}

functionGetDistance($lat1, $lng1, $lat2, $lng2){

$EARTH_RADIUS= 6378.137;

$radLat1= rad($lat1);

$radLat2= rad($lat2);

$a= $radLat1- $radLat2;

$b= rad($lng1) - rad($lng2);

$s= 2 * asin(sqrt(pow(sin($a/2),2) + cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)));

$s= $s*$EARTH_RADIUS;

$s= round($s* 10000) / 10000;

return$s;

}

echoGetDistance(116.480733,39.98684,117.480733,39.98684);

?>

Oracle计算GPS经纬度距离create or replace FUNCTION GET_DISTANCE

(

LNG1 IN NUMBER,

LAT1 IN NUMBER,

LNG2 IN NUMBER,

LAT2 IN NUMBER

) RETURN NUMBER IS

DISTANCE NUMBER:=0;

PI NUMBER:=3.141592625;

EARTH_RADIUS NUMBER :=6378140;

RADLATBEGIN NUMBER :=LAT1*PI/180.0;

RADLATEND NUMBER :=LAT2*PI/180.0;

RADLATDIFF NUMBER :=RADLATBEGIN-RADLATEND;

RADLNGDIFF NUMBER :=LNG1*PI/180.0-LNG2*PI/180.0;

BEGIN

DISTANCE:=2*ASIN(SQRT(POWER(SIN(RADLATDIFF/2),2)+COS(RADLATBEGIN)*COS(RADLATEND)*POWER(SIN(RADLNGDIFF/2),2)));

DISTANCE:=ROUND(DISTANCE*EARTH_RADIUS,1);

RETURN DISTANCE;

END GET_DISTANCE;

总结

以上是生活随笔为你收集整理的mysql 计算gps坐标距离_mysql、sqlserver和php计算GPS经纬度坐标距离的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。