php 搜索附近人及SQL语句的写法
/**
* 根據經緯度和半徑查詢在此范圍內的所有
* @param String $lat 緯度
* @param String $lng 經度
* @param float $radius 半徑
* @return Array 計算出來的結果
*/
public function doPageFujin() {
global $_W,$_GPC;
$uniacid = $_W['uniacid'];
$lat = $_REQUEST['lat'];
$lng = $_REQUEST['lo'];
$radius = 5000;//方圓5公里的
$scope = $this->calcScope($lat, $lng, $radius); // 調用范圍計算函數,獲取最大最小經緯度
// var_dump($scope);
$minlat = $scope['minLat'];
$maxlat = $scope['maxLat'];
$minlong = $scope['minLng'];
$maxlong = $scope['maxLng'];
/** 查詢經緯度在 $radius 范圍內的電站的詳細地址 */
$where1 = " and latitude >= '{$minlat}' and latitude <= '{$maxlat}' and longitude >= '{$minlong}' and longitude <= '{$maxlong}'";
$sql = "SELECT * FROM ".tablename("pinba_pinyou")." where uniacid=:uniacid ". $where1;
$list = pdo_fetchall($sql,array(":uniacid"=>$uniacid));
// $sql = pdo_fetchall("SELECT * FROM".tablename("pinba_pinyou")."where uniacid=:uniacid ". $where1,array(":uniacid"=>$uniaicd));
// var_dump($sql);
return $this->result(0,"success",$list);
}
/**
* 根據經緯度和半徑計算出范圍
* @param string $lat 緯度
* @param String $lng 經度
* @param float $radius 半徑
* @return Array 范圍數組
*/
private function calcScope($lat, $lng, $radius) {
$degree = (24901*1609)/360.0;
$dpmLat = 1/$degree;
$radiusLat = $dpmLat*$radius;
$minLat = $lat - $radiusLat; // 最小緯度
$maxLat = $lat + $radiusLat; // 最大緯度
$mpdLng = $degree*cos($lat * (PI/180));
$dpmLng = 1 / $mpdLng;
$radiusLng = $dpmLng*$radius;
$minLng = $lng - $radiusLng; // 最小經度
$maxLng = $lng + $radiusLng; // 最大經度
/** 返回范圍數組 */
$scope = array(
'minLat' => $minLat,
'maxLat' => $maxLat,
'minLng' => $minLng,
'maxLng' => $maxLng
);
return $scope;
}
轉載于:https://www.cnblogs.com/isuansuan/p/9984891.html
總結
以上是生活随笔為你收集整理的php 搜索附近人及SQL语句的写法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IT职业技能图谱:IT工程师学习路线
- 下一篇: 论文阅读:SuMa++