数据库
CREATE TABLE `m_cities` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nid` int(11) NOT NULL DEFAULT '0' COMMENT '城市id',
`level` int(11) NOT NULL DEFAULT '0' COMMENT '省市级别',
`pid` int(11) NOT NULL DEFAULT '0' COMMENT '父级id',
`area_code` varchar(30) NOT NULL DEFAULT '' COMMENT '区号',
`name` varchar(100) NOT NULL DEFAULT '' COMMENT '名称',
`merger_name` varchar(255) NOT NULL DEFAULT '' COMMENT '合并名称',
`lng` varchar(50) NOT NULL DEFAULT '' COMMENT '经度',
`lat` varchar(50) NOT NULL DEFAULT '' COMMENT '纬度',
`is_show` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否展示',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3971 DEFAULT CHARSET=utf8 COMMENT='城市表';
方便
//查询周边
//算法
public static function selectSurrounding($kmm,$city)
{
//查出金纬度
$lang= (new Cities)->where(['merger_name'=>$city])->find();
$lat=$lang['lat'];
$lng=$lang['lng'];
$range = 180 / M_PI / 6372.797 * $kmm; //里面的 $kilometers 就代表搜索 km 之内,单位km
$lngR = $range / cos($lat * M_PI / 180);
$maxLat = $lat + $range; //最大纬度
$minLat = $lat - $range; //最小纬度
$maxLng = $lng + $lngR; //最大经度
$minLng = $lng - $lngR; //最小经度
$where[] = ['lat', 'between', [$minLat, $maxLat]];
$where[] = ['lng', 'between', [$minLng, $maxLng]];
$selCities= (new Cities)->where($where)->select();
return Response::JsonRt('200','查询成功',$selCities);
}
当然也可以使用GEO做