php 根据坐标点计算周围1公里内的 四个坐标点
/**
* 获取距离四个坐标
* @param $lon
* @param $lat
* @param int $distance 默认1KM的距离
* @return array
*/
public function getDistance($lon, $lat, $distance = 1)
{
$range = 180 / pi() * $distance / 6378.137;
$lngR = $range / cos($lat * pi() / 180);
$data = array();
$data["maxLat"] = $lat + $range;
$data["minLat"] = $lat - $range;
$data["maxLng"] = $lon + $lngR;//最大经度
$data["minLng"] = $lon - $lngR;//最小经度
return $data;
}
php
02
function
getdistance(
$lng1
,
$lat1
,
$lng2
,
$lat2
){
04
$radLat1
=
deg2rad
(
$lat1
);
05
$radLat2
=
deg2rad
(
$lat2
);
06
$radLng1
=
deg2rad
(
$lng1
);
07
$radLng2
=
deg2rad
(
$lng2
);
10
$s
=2*asin(sqrt(pow(sin(
$a
/2),2)+
cos
(
$radLat1
)*
cos
(
$radLat2
)*pow(sin(
$b
/2),2)))*6378.137;
mysql函数
03
CREATE
DEFINER=`root`@`%`
FUNCTION
`GETDISTANCE`(lat1
DOUBLE
, lng1
DOUBLE
, lat2
DOUBLE
, lng2
DOUBLE
)
RETURNS
double
13
DECLARE
EARTH_RADIUS
DOUBLE
DEFAULT
6378137;
15
DECLARE
radLat1
DOUBLE
;
17
DECLARE
radLat2
DOUBLE
;
19
DECLARE
radLng1
DOUBLE
;
21
DECLARE
radLng2
DOUBLE
;
25
SET
RAD = PI() / 180.0;
27
SET
radLat1 = lat1 * RAD;
29
SET
radLat2 = lat2 * RAD;
31
SET
radLng1 = lng1 * RAD;
33
SET
radLng2 = lng2 * RAD;
35
SET
s = ACOS(COS(radLat1)*COS(radLat2)*COS(radLng1-radLng2)+SIN(radLat1)*SIN(radLat2))*EARTH_RADIUS;
37
SET
s = ROUND(s * 10000) / 10000;
调用方法
1
SELECT *,latitude,longitude,GETDISTANCE(latitude,longitude,30.663262,104.071619) AS distance FROM mb_shop_ext where 1 HAVING distance<1000 ORDER BY distance ASC LIMIT 0,10