123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- <?php
- /**
- * Created by PhpStorm.
- * User: Mead
- * Date: 2019/8/19
- * Time: 2:23 PM
- */
- namespace App\Http\Controllers\V1;
- use App\Handlers\ConvertHandler;
- use App\Http\Requests\AreaIdRequest;
- use App\Http\Requests\NearBySiteRequest;
- use App\Models\AreaSetting;
- use App\Models\Parking;
- use App\Repositories\AreaSettingRepository;
- use App\Repositories\ParkingRepository;
- use App\Transformers\ParkingTransformer;
- use Illuminate\Support\Facades\Redis;
- /**
- * 停车点模块
- * Class ParkingController
- * @package App\Http\Controllers\V1
- */
- class ParkingController extends BaseController
- {
- /**
- * 有区域id 获取区域停车点
- * @param AreaIdRequest $request
- * @param ParkingRepository $parkingRepository
- * @return \Dingo\Api\Http\Response
- * User: Mead
- */
- public function stopSite(AreaIdRequest $request, ParkingRepository $parkingRepository, AreaSettingRepository $areaSettingRepository)
- {
- try {
- $area_id = $request->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());
- }
- }
- }
|