地图标记点查询,经常有获得附近店铺,附近的人,或者附近美食需求。如何获取呢?本示例以 php框架thinkphp和数据库mysql演示。
第一段程序:获取经纬度半径范围,单位是米
/**
* Desc: 根据经纬度,半径范围获取附近
* User: JamesLiu
* Date: 2019/5/13
* Time: 15:38
* @param $longitude 经度
* @param $latitude 纬度
* @param $raidus 半径范围(单位:米)
* @return array
*/
public function getAround($longitude, $latitude, $raidus)
{
$PI = 3.14159265;
$degree = (24901 * 1609) / 360.0;
$dpmLat = 1 / $degree;
$radiusLat = $dpmLat * $raidus;
$minLat = $latitude - $radiusLat;
$maxLat = $latitude + $radiusLat;
$mpdLng = $degree * cos($latitude * ($PI / 180));
$dpmLng = 1 / $mpdLng;
$radiusLng = $dpmLng * $raidus;
$minLng = $longitude - $radiusLng;
$maxLng = $longitude + $radiusLng;
return array ('minLat'=>$minLat, 'maxLat'=>$maxLat, 'minLng'=>$minLng, 'maxLng'=>$maxLng);
}
第二段程序:组装成mysql 的查询语句(thinkphp)
$array = $this->getAround(115.826646, 28.718022, 2000);
$condition['longitude'] = array(array('EGT', $array['minLng']), array('ELT', $array['maxLng']), 'and');//(`longitude` >= minLng) AND (`longitude` <= maxLng)
$condition['latitude'] = array(array('EGT', $array['minLat']), array('ELT', $array['maxLat']), 'and');//(`latitude` >= minLat) AND (`latitude` <=maxLat)
第三段:thinkphp 数据库查询
//thinkphp 数据库查询非常容易,具体如下
$getData=Db::table('地图标记表')->where($condition)->select();
非常感谢,好用