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