<?php
define('EARTH_RADIUS',6378.137); //地球平均半徑,km
//當前坐標
$lng = 116.441709;
$lat = 39.946158;
/**
* distance 單位 米
*/
function returnSquarePoint($lng, $lat,$distance = 3000){
$distance = $distance /1000; //換算成km
$dlng = 2 * asin(sin($distance / (2 * EARTH_RADIUS)) / cos(deg2rad($lat)));
$dlng = rad2deg($dlng);
$dlat = $distance/EARTH_RADIUS;
$dlat = rad2deg($dlat);
return array(
'left-top'=>array('lat'=>$lat + $dlat,'lng'=>$lng-$dlng), //左上方點經緯度
'right-top'=>array('lat'=>$lat + $dlat, 'lng'=>$lng + $dlng), //右上方點經緯度
'left-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng - $dlng), //左下方點經緯度
'right-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng + $dlng) //右下方點經緯度
);
}
/**
* 計算距離
*/
function getDistance($lng1,$lat1,$lng2,$lat2){
//將角度轉為狐度
$radLat1=deg2rad($lat1);//deg2rad()函數將角度轉換為弧度
$radLat2=deg2rad($lat2);
$radLng1=deg2rad($lng1);
$radLng2=deg2rad($lng2);
$a=$radLat1-$radLat2;
$b=$radLng1-$radLng2;
$s=2*asin(sqrt(pow(sin($a/2),2)+cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)))* EARTH_RADIUS *1000;
return $s;
}
/**
* 排序
*/
function array_sort($arr,$keys,$type='asc'){
$keysvalue = $new_array = array();
foreach ($arr as $k=>$v){
$keysvalue[$k] = $v[$keys];
}
if($type == 'asc'){
asort($keysvalue);
}else{
arsort($keysvalue);
}
reset($keysvalue);
foreach ($keysvalue as $k=>$v){
$new_array[$k] = $arr[$k];
}
return $new_array;
}
//當前坐標3000米範圍內所有商家
$quares = returnSquarePoint($lng,$lat,3000);
mysql_connect('localhost','root','123456');
mysql_select_db('weixin');
mysql_query('set names utf8');
//不要隨意改動經緯度條件查詢,如果需要修改請仔細看清條件判斷
$sql = sprintf("select * from shang where (lng<>0 and lat<>0) and (lng between %s and %s) and (lat between %s and %s) ",
$quares['left-top']['lng'],$quares['right-bottom']['lng'],$quares['right-bottom']['lat'],$quares['right-top']['lat']);
$query = mysql_query($sql);
$i = 0;
while($row = mysql_fetch_array($query,MYSQL_ASSOC)){
$data[$i] = $row;
$data[$i]['distance'] = getDistance($lng,$lat,$row['lng'],$row['lat']);
$i++;
}
$data = array_sort($data,'distance','asc'); //由近至遠排序
//$data = array_sort($data,'distance','desc'); //由遠至近排序
var_dump($data);
-
歡迎廣大業內朋友投稿,投稿郵箱:thor.wu@qq.com