地图圆形范围地址内的商店
(1)首先我们要找到你所要查询的地址的经纬度(可以自行给定);
(2)建立方法查处你要查询的地址和附近商店的距离(附近商店的经纬度 自己定义或从数据库中调取)
自已定义附近商店的经纬度
实现查询两点的距离方法
(3)我们要判断以你所在地址方圆的距离符合(符合重组数组)
实现代码方式:
define('EARTH_RADIUS', 6378.137);//地球半径
define('PI', 3.1415926);
/**
* 计算两组经纬度坐标 之间的距离
* params :lat1 纬度1; lng1 经度1; lat2 纬度2; lng2 经度2; len_type (1:m or 2:km);
* return m or km
*/
function showa(){
$lat1=116.404;
$lng1=39.915;
$arr = array(
array(116.417854,39.921988,"地址:北京市东城区王府井大街88号乐天银泰百货八层"),
array(116.406605,39.921585,"地址:北京市东城区东华门大街"),
array(116.412222,39.912345,"地址:北京市东城区正义路甲5号")
);
$array = array();
foreach ($arr as $key => $value) {
$item = $this -> Distance($lat1,$lng1,$value[0],$value[1]);
if($item>1000){
$array[] = $value;
}
}
$this->datainfo=json_encode($array);
$this->redirect('showa');
}
function Distance($lat1,$lng1, $lat2, $lng2, $len_type= 1, $decimal = 2) {
$radLat1 = $lat1 * PI / 180.0;
$radLat2 = $lat2 * PI / 180.0;
$a =$radLat1 - $radLat2;
$b =($lng1 * PI / 180.0) - ($lng2 * PI / 180.0);
$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 * 1000);
if($len_type > 1) {
$s/= 1000;
}
returnround($s, $decimal);
}