'geo:province', 2 => 'geo:city', 3 => 'geo:district']; $rangearr = [1 => 15000, 2 => 1000, 3 => 200]; $geoname = isset($namearr[$level]) ? $namearr[$level] : $namearr[3]; $georange = isset($rangearr[$level]) ? $rangearr[$level] : $rangearr[3]; // 读取范围内的ID $redis = Cache::store('redis')->handler(); $georadiuslist = []; if (method_exists($redis, 'georadius')) { $georadiuslist = $redis->georadius($geoname, $lng, $lat, $georange, 'km', ['WITHDIST', 'COUNT' => 5, 'ASC']); } if ($georadiuslist) { list($id, $distance) = $georadiuslist[0]; } $id = isset($id) && $id ? $id : 3; return self::get($id); } /** * 根据经纬度获取省份 * * @param string $lng 经度 * @param string $lat 纬度 * @return Area */ public static function getProvinceFromLngLat($lng, $lat) { $provincedata = null; $citydata = self::getCityFromLngLat($lng, $lat); if ($citydata) { $provincedata = self::get($citydata['pid']); } return $provincedata; } /** * 根据经纬度获取城市 * * @param string $lng 经度 * @param string $lat 纬度 * @return Area */ public static function getCityFromLngLat($lng, $lat) { $citydata = null; $districtdata = self::getDistrictFromLngLat($lng, $lat); if ($districtdata) { $citydata = self::get($districtdata['pid']); } return $citydata; } /** * 根据经纬度获取地区 * * @param string $lng 经度 * @param string $lat 纬度 * @return Area */ public static function getDistrictFromLngLat($lng, $lat) { $districtdata = self::getAreaFromLngLat($lng, $lat, 3); return $districtdata; } public function scopeLevel(Query $query,$level){ $query->where('level',$level); } public function scopePro(Query $query){ $query->level(1); } public function scopeShi(Query $query){ $query->level(2); } public function scopeArea(Query $query){ $query->level(3); } public function province(){ return $this->hasMany(User::class,'province_id'); } public function city(){ return $this->hasMany(User::class,'city_id'); } public function county(){ return $this->hasMany(User::class,'county_id'); } public function getMergenameAttr($a){ return str_replace(',','',str_replace('中国,','',$a)); } public static function getIdByName($name){ return self::where('name|shortname',$name)->value('id'); } public static function getTreeId($id){ $county=self::where('id',$id)->area()->find(); if(!$county){ throw_user('区县不存在'); } $cityId=$county['pid']; $provinceId=self::where('id',$cityId)->value('pid'); if(!$provinceId){ throw_user('省不存在'); } return [$provinceId,$cityId,$id]; } public static function getNameString($id){ if(!$id){ return ''; } return implode('',self::whereIn('id',$id)->column('name')); } }