get('area_id', false); if ($areaSettingRepository->byAreaIdGetIsWholeAreaHuanche($area_id) === AreaSetting::WHOLE_AREA_HUANCHE_NO) { $parking = $parkingRepository->byAreaIdGetAllStopSites($area_id); } else { $parking = $parkingRepository->byAreaIdGetBanStopSites($area_id); } $points = []; $data = []; foreach ($parking as $model) { if ($model->type == Parking::TYPE_NO_STOP_BIKE) { $iconPath = 'http://resource.weilaigo.l4j.cn/ban-stop.png'; $strokeColor = '#FF0000'; $fillColor = '#FF000030'; } else { $iconPath = 'http://resource.weilaigo.l4j.cn/stop1.png'; $strokeColor = '#FF00FF'; $fillColor = '#FF00FF66'; } $data[] = [ 'name' => $model->name, // 'centre' => 'points' => $model->parking_fence, 'radius' => $model->parking_radius, 'type' => $model->type, 'type_text' => Parking::$typeMaps[$model->type], 'strokeWidth' => 4, 'strokeColor' => $strokeColor, 'fillColor' => $fillColor ]; $points[] = array_merge([ 'iconPath' => $iconPath, 'name' => $model->name, 'width' => 24, 'height' => 28, 'zIndex' => $model->id, 'id' => $model->id, 'type' => $model->type, ], $model->parking_centre); } return $this->response->array([ 'centres' => $points, 'polygons' => $data ]); } catch (\Exception $exception) { return $this->errorNoValidation($exception->getMessage()); } } /** * 有区域id 获取区域禁停区 * @param AreaIdRequest $request * @param ParkingRepository $parkingRepository * @return \Dingo\Api\Http\Response * User: Mead */ public function banStopSite(AreaIdRequest $request, ParkingRepository $parkingRepository) { try { $area_id = $request->get('area_id', false); $parking = $parkingRepository->byAreaIdGetBanStopSites($area_id); $data = []; $points = []; foreach ($parking as $model) { if ($model->type == Parking::TYPE_NO_STOP_BIKE) { $iconPath = 'http://resource.weilaigo.l4j.cn/ban-stop.png'; $strokeColor = '#FF0000'; $fillColor = '#FF000030'; } else { $iconPath = 'http://resource.weilaigo.l4j.cn/stop1.png'; $strokeColor = '#FF00FF'; $fillColor = '#FF00FF66'; } $data[] = [ 'name' => $model->name, // 'centre' => 'points' => $model->parking_fence, 'radius' => $model->parking_radius, 'type' => $model->type, 'type_text' => Parking::$typeMaps[$model->type], 'strokeWidth' => 4, 'strokeColor' => $strokeColor, 'fillColor' => $fillColor ]; $points[] = array_merge([ 'iconPath' => $iconPath, 'name' => $model->name, 'width' => 24, 'height' => 28, 'zIndex' => $model->id, 'id' => $model->id, 'type' => $model->type, ], $model->parking_centre); } return $this->response->array([ 'centres' => $points, 'polygons' => $data ]); } catch (\Exception $exception) { return $this->errorNoValidation($exception->getMessage()); } } /** * 获取附近停车区 * @param NearBySiteRequest $request * @param Parking $parking * User: Mead */ public function nearbySite(NearBySiteRequest $request, Parking $parking, AreaSettingRepository $areaSettingRepository) { try { $lng = $request->get('lng'); $lat = $request->get('lat'); $location_lat = $request->get('location_lat'); $location_lng = $request->get('location_lng'); $area_id = $request->get('area_id'); if ($areaSettingRepository->byAreaIdGetIsWholeAreaHuanche($area_id) === AreaSetting::WHOLE_AREA_HUANCHE_OK) { return $this->errorNoValidation('该运营区域内都可以停车(除禁停区内)!'); } $options = ['SORT' => 'ASC', 'WITHDIST' => true, 'WITHCOORD' => true]; $redis = Redis::connection(); $stop_bike_stations = $redis->georadius(Parking::REDIS_STOP_BIKE_SITE_TAG . "_{$area_id}", $lng, $lat, 1, 'km', $options); $ids = array_column($stop_bike_stations, 0); $stop_bike_names = $parking->whereIn('id', $ids)->get(['id', 'name', 'description', 'parking_centre as centre', 'parking_fence as fence', 'parking_radius as radius', 'type'])->mapWithKeys(function ($item) { $item['centre'] = js2php($item['centre']); $item['fence'] = js2php($item['fence']); return [$item['id'] => $item]; })->toArray(); $points = []; $polygons = []; foreach ($stop_bike_stations as $bike_station) { $item = $stop_bike_names[$bike_station[0]]; $item['location_distance'] = format_mileage(bcdiv((new ConvertHandler())->distance($location_lat, $location_lng, $bike_station[2][1], $bike_station[2][0]), 1000, 2)); $item['distance'] = format_mileage($bike_station[1]); $iconPath = 'http://resource.weilaigo.l4j.cn/stop1.png'; $strokeColor = '#FF00FF'; $fillColor = '#FF00FF50'; $polygons[] = [ 'points' => $item['fence'], 'strokeWidth' => 4, 'strokeColor' => $strokeColor, 'fillColor' => $fillColor, 'zIndex' => 1 ]; $points[] = array_merge([ 'iconPath' => $iconPath, 'width' => 24, 'height' => 28, 'zIndex' => 1111, 'id' => $item['id'], 'type' => $item['type'], 'description' => $item['description'], 'distance' => $item['distance'], 'location_distance' => $item['location_distance'], 'name' => $item['name'], ], $item['centre']); $points[0]['iconPath'] = 'http://resource.weilaigo.l4j.cn/orange-stop.png'; } return $this->response->array([ 'points' => $points, 'polygons' => $polygons ]); } catch (\Exception $exception) { return $this->errorException($exception->getMessage()); } } }