latlng; $type = $request->type; $myarray = array(); array_push($myarray, $latlng[0]); $j = 0; for ($i = 0;$i$x[0], 'lng1'=> $x[1], 'identifier' => $id)); } RoutePath::insert($dat);//// insert $query = "select * from route_paths,coridors where (6371 * ACOS( COS( RADIANS(route_paths.lat1) ) * COS( RADIANS(coridors.lat) ) * COS( RADIANS(coridors.lng) - RADIANS(route_paths.lng1)) + SIN(RADIANS(route_paths.lat1)) * SIN(RADIANS(lat)) ) ) < 1 group by lat,lng"; $result = DB::select($query); RoutePath::where('identifier', $id)->delete();////// delete table return response()->json([ 'status' => 'succeed', 'message' => '', 'data' => $result ], 200); return response()->json($result); } public function distance($lat1, $lon1, $lat2, $lon2) { ////// distance between two poings in lat and lng if (($lat1 == $lat2) && ($lon1 == $lon2)) { return 0; } else { $theta = $lon1 - $lon2; $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)); $dist = acos($dist); $dist = rad2deg($dist); $miles = $dist * 60 * 1.1515; return ($miles * 1.609344); } } public function index() { $allrecords = Coridor::all(); return response()->json([ 'status' => 'succeed', 'message' => '', 'data' => $allrecords ], 200); } public function store(Request $request) { //:::::::::::Maxter rz:::::::::::::: $input = $request->all(); $RecStore=Coridor::create($input); //::::::::::::::::::::::::::::::::::: $allrecords = Coridor::all(); return response()->json([ 'status' => 'succeed', 'message' => '', 'data' => $allrecords ], 200); } public function update(Request $request) { $request->validate([ 'id' => 'required|integer|exists:coridors,id' ]); $idd = $request->id; $validrecs = array_filter($request->all()); $uprecords = Coridor::find($idd); $uprecords->fill($validrecs); $uprecords->save(); $allrecords = Coridor::all(); return response()->json([ 'status' => 'succeed', 'message' => '', 'data' => $uprecords ], 200); } public function destroy(Request $request) { $request->validate([ 'id' => 'required|integer|exists:coridors,id' ]); $idd = $request->id; $delrec = Coridor::find($idd); $delrec->delete(); $allrecords = Coridor::all(); return response()->json([ 'status' => 'succeed', 'message' => '', 'data' => $allrecords ], 200); } public function get_coridor_10_report(Request $request) { $start_time = microtime(true); ///// developed by god milad babe /* $new_query = 'SELECT * FROM(SELECT st_distance( LINESTRING(POINT(32.469128717673335,51.99799060821534)) ,POINT(road_items_projects.`start_lat`, road_items_projects.`start_lng`))* 111195 AS ddd,start_lat,start_lng,id,province_id FROM road_items_projects )q ORDER BY ddd LIMIT 10'; */ ///// developed by god milad babe ///// http vars $s_lat = $request->slat; $s_lng = $request->slng; $d_lat = $request->dlat; $d_lng = $request->dlng; $date_to = $request->dateto; $date_from = $request->datefrom; $item = $request->item ?? 0; $sub_item = $request->subitem ?? 0; ///// start $url = "https://testmap.141.ir/route/v1/driving/".$s_lng.",".$s_lat.";".$d_lng.",".$d_lat."?overview=full&alternatives=true&steps=true&annotations=true"; $arrContextOptions=array( "ssl"=>array( "verify_peer"=>false, "verify_peer_name"=>false, ), ); $result = file_get_contents($url, false, stream_context_create($arrContextOptions)); return $result; dd($result); $result = json_decode($result); $geo = $result->routes[0]->geometry; // dd($geo); $points = \GeometryLibrary\PolyUtil::decode($geo); // dd(count($points)); // return; ///// with st_distance /* $new_query = 'SELECT * FROM(SELECT st_distance(LINESTRING('; foreach($points as $value){ $new_query .= 'POINT('.$value['lat'].','.$value['lng'].'),'; } $new_query = substr_replace($new_query ,"",-1); $new_query .= ') ,POINT(road_items_projects.`start_lat`, road_items_projects.`start_lng`))* 111195 AS ddd,start_lat,start_lng,id,province_id FROM road_items_projects where province_id = 4)q'; // dd($new_query); dd($new_query); $results = DB::select(DB::raw($new_query)); */ //// st_distance // $execution_time = ($end_time - $start_time); // echo " It takes ". $execution_time." seconds to execute the script"; // dd($result); //coridor 1 name c1 // $c1 = "https://testmap.141.ir/route/v1/driving/51.41126677393914,35.63613201722114;51.363811476621784,35.51441859244614;51.29825592041016,35.437736107595484;51.05895996093751,35.256833789618284;50.90515136718751,35.117100314572774;50.84279134869576,34.822139039454534;50.8800969,34.6423117;51.1083984375,34.459295756500175;51.28600627183915,34.16672512785317;56.26175746321679,27.220631942957304?overview=full&alternatives=true&steps=true&hints=jOsjgJnrI4AdAAAABAAAAFMAAAAAAAAAjAagQYHmAUCQmF1CAAAAAB0AAAAEAAAAUwAAAAAAAAC_AQAAMHkQA6fDHwJDeRADpMMfAgEArwARLKj6;hdQrgP___38oAAAApgAAAAAAAAAAAAAAMq5YQr7WJkMAAAAAAAAAACgAAACmAAAAAAAAAAAAAAC_AQAADsAPAxfoHQLjvw8DM-gdAgAArw0RLKj6;jn0VgP___38IAAAAMgAAANcEAAAmEQAAnTk3QR_NWUIR7s1EyYq2RQgAAAAyAAAA1wQAACYRAAC_AQAA2sQOA4e9HALQvw4DqLwcAhIAjwoRLKj6;u0QXgKWSNYCzAAAARQAAAPELAACwIQAAh4KiQxQd90J7s6xFzS1zRrMAAABFAAAA8QsAALAhAAC_AQAAfRILA5EuGgIQGQsDAvoZAg8ATwURLKj6;2NIYgJxSI4APAAAAoQAAAGwMAAB5BwAApdH4QdKQoEMQd8ZFsqpvRQ8AAAChAAAAbAwAAHkHAAC_AQAAVb8IA4LCFwI_wAgDLNgXAg4AvwURLKj6;ubUIgDHXIYBHAAAAEwMAADsBAAAAAAAAcdsOQ4kbxESVLR1EAAAAAEcAAAATAwAAOwEAAAAAAAC_AQAAzsoHA6JXEwKnzAcD-1cTAggAfwoRLKj6;OLMWgFpIN4AUAAAAKgAAAFwBAACLAAAAFPNnQWcf5UEko3JD-8fAQhQAAAAqAAAAXAEAAIsAAAC_AQAAgmAIA0eXEAJhXggDiJkQAgYATwMRLKj6;TGIbgDUNLYAzAAAAPAAAANQBAAA7AgAAakDzQpuDC0M8AYpELKGoRDMAAAA8AAAA1AEAADsCAAC_AQAAe9ILA5vIDQIu2gsDoM4NAggAjwgRLKj6;2Y5BgP___38AAAAAFwAAAKsFAAB8BQAAAAAAADCCF0HrZRdENlsSRAAAAAAXAAAAqwUAAHwFAAC_AQAAhYoOAxNMCQL2jw4DxVcJAgYAfxARLKj6;ddwfgP___38lAAAARgAAALAAAAAAAAAAz2B5QYVVVkHeDpJCAAAAACUAAABGAAAAsAAAAAAAAAC_AQAALHZaA8dWnwF9fFoDmFqfAQEAXxQRLKj6"; // $c1 = "https://testmap.141.ir/route/v1/driving/51.4013785,35.7006177;56.2781423,27.1793466?overview=full&alternatives=true&steps=true&hints=C9UogA3VKIAAAAAARQAAAAAAAAAAAAAAAAAAADdAN0IAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAC_AQAAIlIQA7-_IAKjUhADir8gAgAAbwARLKj6;b-clgP5CM4AAAAAAIAAAAAAAAAApAAAAAAAAAEwMsUEAAAAAHfPiQQAAAAAgAAAAAAAAACkAAAC_AQAAsb1aA9W5ngF-vFoDU7meAQAAjwQRLKj6"; // $c2 = "https://testmap.141.ir/route/v1/driving/51.4013785,35.7006177;50.68046975880862,33.99455956454493;52.61859275400639,31.22061595984375;50.8458443,28.9310786?overview=full&alternatives=true&steps=true&hints=C9UogA3VKIAAAAAARQAAAAAAAAAAAAAAAAAAADdAN0IAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAC_AQAAIlIQA7-_IAKjUhADir8gAgAAbwARLKj6;oE4QgKJOEIA6AAAAHwAAAAAAAAAAAAAArwIcQo2gpUEAAAAAAAAAADoAAAAfAAAAAAAAAAAAAAC_AQAAmVIFA6O2BgKWUgUDQLcGAgAA3xARLKj6;mtE1gP___38oAAAALgAAAOgBAAB2AQAAtHLEQhoCV0GxM5VEfetkRCgAAAAuAAAA6AEAAHYBAAC_AQAAvOoiA1lu3AFh5SIDiGPcAQUADwcRLKj6;VXEHgPanB4D2AwAAAAAAAMMCAAAAAAAA1gLTQwAAAAC7SJNDAAAAAPYDAAAAAAAAwwIAAAAAAAC_AQAALs4HA3F2uQGU2AcDB3S5AQQAfwIRLKj6"; // $c3 = "https://testmap.141.ir/route/v1/driving/51.4013785,35.7006177;49.689810276031494,34.10858889039525;48.1872669607401,30.452993606051912;48.27186584472657,30.37100539016938?overview=full&alternatives=true&steps=true&hints=C9UogA3VKIAAAAAARQAAAAAAAAAAAAAAAAAAADdAN0IAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAC_AQAAIlIQA7-_IAKjUhADir8gAgAAbwARLKj6;BfoFgBP6BYA7AAAANgAAAAAAAAAAAAAAOnOFQkiQbEIAAAAAAAAAADsAAAA2AAAAAAAAAAAAAAC_AQAA1TT2At10CALSNPYCrXQIAgAA3wURLKj6;;n1AjgKFQI4DYAAAAtgAAAAAAAAAAAAAAjhQQQ0K88UIAAAAAAAAAANgAAAC2AAAAAAAAAAAAAAC_AQAAYZLgAn5szwH6keACvWzPAQAAPwIRLKj6"; // $c4 = "https://testmap.141.ir/route/v1/driving/48.2591475,30.3636097;60.6470887,25.293269?overview=full&alternatives=true&steps=true&hints=R1AjgP___3-UAAAAAwEAAAAAAAAXAAAATkEkQ2rj9EIAAAAAY8zNQZQAAAADAQAAAAAAABcAAAC_AQAAOlvgAv1PzwFMYOAC2k_PAQAAHwARLKj6;ltBCgJjQQoBGAAAANgAAAAAAAAAAAAAAdEdEQu69E0IAAAAAAAAAAEYAAAA2AAAAAAAAAAAAAAC_AQAADGidA7jxgQGxZp0D1fGBAQAAnwsRLKj6"; // $c5 = "https://testmap.141.ir/route/v1/driving/51.4013785,35.7006177;48.94958496093751,35.14012515937234;45.5800155,34.515594?overview=full&alternatives=true&steps=true&hints=C9UogA3VKIAAAAAARQAAAAAAAAAAAAAAAAAAADdAN0IAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAC_AQAAIlIQA7-_IAKjUhADir8gAgAAbwARLKj6;VYk2gP___39eAwAAaAMAAAAAAAC-CwAAtvrjRMgLpEEAAAAAwrPGRV4DAABoAwAAAAAAAL4LAAC_AQAAMNjqAhgHGAJR6eoCHTIYAgAADxIRLKj6;TBoQgEujMYADAAAALgAAADsAAAAvAAAA6W2BQAtJSkLQtYNCOApSQgMAAAAuAAAAOwAAAC8AAAC_AQAAWX63AhGpDgLwfrcCiqoOAgIAzwYRLKj6"; // $c6 = "https://testmap.141.ir/route/v1/driving/51.4013785,35.7006177;44.3876859,39.3886668?overview=full&alternatives=true&steps=true&hints=C9UogA3VKIAAAAAARQAAAAAAAAAAAAAAAAAAADdAN0IAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAC_AQAAIlIQA7-_IAKjUhADir8gAgAAbwARLKj6;_VgUgCM0LoAKAQAATwAAAAAAAAAAAAAA6Iw5Q16rWkIAAAAAAAAAAAoBAABPAAAAAAAAAAAAAAC_AQAArE2lAjkEWQJmTaUC-wVZAgAAPwURLKj6"; // $c7 = "https://testmap.141.ir/route/v1/driving/51.4013785,35.7006177;59.6059232,36.2974945?overview=full&alternatives=true&steps=true&hints=C9UogA3VKIAAAAAARQAAAAAAAAAAAAAAAAAAADdAN0IAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAC_AQAAIlIQA7-_IAKjUhADir8gAgAAbwARLKj6;w3IBgP___39GAAAAVAAAABgAAACKAAAAG1e9Qk-djUEvZAFCbxA4Q0YAAABUAAAAGAAAAIoAAAC_AQAAp4WNA1XZKQKjg40DF9spAgEA_wIRLKj6"; // $c8 = "https://testmap.141.ir/route/v1/driving/48.297455,38.2493585;59.6059232,36.2974945?overview=full&alternatives=true&steps=true&hints=_rkTgA-6E4AMAAAAAAAAAHoAAAAAAAAAjsEEQQAAAADBEaJCAAAAAAwAAAAAAAAAegAAAAAAAAC_AQAA8PfgAnqjRwLv9eACj6NHAgUAfxQRLKj6;w3IBgP___39GAAAAVAAAABgAAACKAAAAG1e9Qk-djUEvZAFCbxA4Q0YAAABUAAAAGAAAAIoAAAC_AQAAp4WNA1XZKQKjg40DF9spAgEA_wIRLKj6"; // $c9 = "https://testmap.141.ir/route/v1/driving/59.6059232,36.2974945;59.794798968359835,35.63056562047708;60.13951487839223,34.401852321294946;60.15858914586716,26.715753176949136;60.6470887,25.293269?overview=full&alternatives=true&steps=true&hints=w3IBgP___39GAAAAVAAAABgAAACKAAAAG1e9Qk-djUEvZAFCbxA4Q0YAAABUAAAAGAAAAIoAAAC_AQAAp4WNA1XZKQKjg40DF9spAgEA_wIRLKj6;SqsBgE2rAYChAAAArAIAALEAAABHAwAABlZ3Q9lzgkR9UYdDDl2gRKEAAACsAgAAsQAAAEcDAAC_AQAAHoOQA8aKHwJvZZAD5q0fAgIAfwMRLKj6;KksKgF7-FoAIAQAAAAAAAFELAAAzGAAAwYjJQwAAAADS_IlFK8oTRggBAAAAAAAAUQsAADMYAAC_AQAA_L-VA3zeDAL7p5UDPO4MAiIA3w0RLKj6;EPQJgL0xDIAbAAAASAAAAEEAAABDAQAAjv2BQnztJ0Oe7xdD92k-RBsAAABIAAAAQQAAAEMBAAC_AQAA2vKVA1ymlwF98pUDaaaXAQEAnwARLKj6;ltBCgJjQQoBGAAAANgAAAAAAAAAAAAAAdEdEQu69E0IAAAAAAAAAAEYAAAA2AAAAAAAAAAAAAAC_AQAADGidA7jxgQGxZp0D1fGBAQAAnwsRLKj6"; // $c10 = "https://testmap.141.ir/route/v1/driving/45.206595,38.7139034;44.94834333658219,38.49361387989263;46.1658505,33.1239454?overview=full&alternatives=true&steps=true&hints=2JMYgNuTGIAHAAAAYwAAAAgBAAAhAQAA-pqtQEDgiELZDzhDTHpJQwcAAABjAAAACAEAACEBAAC_AQAAocyxAr-5TgJDzLECL7pOAgUAzw4RLKj6;6dgtgP___3_KAAAAPAEAAMoAAACJAAAAZzLuQ87vhUPii-1DM8WhQ8oAAAA8AQAAygAAAIkAAAC_AQAAS92tAnBdSwJ3260Crl1LAgYA3wsRLKj6;OC0JgP___38tAAAANwAAAAYAAABbAAAAwGKkQoWwg0GWjidBsPwjQy0AAAA3AAAABgAAAFsAAAC_AQAASHDAAtNt-QFbb8ACaW75AQEAnw0RLKj6"; // switch ($request->mehvar_id) { // case 1: // $url = $c1; // break; // case 2: // $url = $c2; // break; // case 3: // $url = $c3; // break; // case 4: // $url = $c4; // break; // case 5: // $url = $c5; // break; // case 6: // $url = $c6; // break; // case 7: // $url = $c7; // break; // case 8: // $url = $c8; // break; // case 9: // $url = $c9; // break; // case 10: // $url = $c10; // break; // default: // # code... // break; // } // dd(); /// curl and save response in geo // $url = $c1; // $result = file_get_contents($url); // $result = json_decode($result); // $geo = $result->routes[0]->geometry; // $points = \GeometryLibrary\PolyUtil::decode($geo); // dd(count($points)); // foreach($points as $value) // echo $value['lat'].' '.$value['lng']."\n"; // return; //// start // $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; // $charactersLength = strlen($characters); // $randomString = ''; // for ($i = 0; $i < 20; $i++) { // $randomString .= $characters[rand(0, $charactersLength - 1)]; // } // $id = $randomString; // Str::uuid(); // $id = 1; // dd(); $dat = array(); $identifier = Str::uuid(); foreach ($points as $value) { array_push($dat, array('lat1'=>$value['lat'], 'lng1'=> $value['lng'], 'identifier' => $identifier)); // array_push($dat, array('lat1'=>$value['lat'], 'lng1'=> $value['lng'], 'id' => mt_rand(1,9999).time(),'identifier' => $identifier)); // $id++; } RoutePath::insert($dat);//// insert // dd("hi"); // $query = "select * from route_paths,road_items_projects where (6371 * ACOS( COS( RADIANS(route_paths.lat1) ) * COS( RADIANS(road_items_projects.start_lat) ) * COS( RADIANS(road_items_projects.start_lng) - RADIANS(route_paths.lng1)) + SIN(RADIANS(route_paths.lat1)) * SIN(RADIANS(start_lat)) ) ) < 0.01 and province_id in (9,4,21,23,24,33,35) and created_at between '2021-05-22 00:00:00' and '2021-06-05 23:59:59' group by start_lat,start_lng"; // $query = "SELECT * FROM road_items_projects rip WHERE EXISTS (SELECT * FROM route_paths rp WHERE ( (6371* ACOS( COS( RADIANS(rp.lat1) ) * COS( RADIANS(rip.start_lat) ) * COS( RADIANS(rip.start_lng) - RADIANS(rp.lng1)) + SIN(RADIANS(rp.lat1)) * SIN(RADIANS(start_lat)))) < 0.02 || (6371 * ACOS( COS( RADIANS(rp.lat1) ) * COS( RADIANS(rip.end_lat) ) * COS( RADIANS(rip.end_lng) - RADIANS(rp.lng1)) + SIN(RADIANS(rp.lat1)) * SIN(RADIANS(end_lat))))<0.02 ) AND rip.created_at BETWEEN '2021-04-21 00:00:00' AND '2021-06-21 23:59:59')"; // SELECT * FROM road_items_projects rip WHERE (rip.created_at BETWEEN '2021-04-21 00:00:00' AND '2021-06-21 23:59:59') AND EXISTS (SELECT * FROM route_paths rp WHERE ( (6371* ACOS( COS( RADIANS(rp.lat1) ) * COS( RADIANS(rip.start_lat) ) * COS( RADIANS(rip.start_lng) - RADIANS(rp.lng1)) + SIN(RADIANS(rp.lat1)) * SIN(RADIANS(start_lat)))) < 0.02 || (6371 * ACOS( COS( RADIANS(rp.lat1) ) * COS( RADIANS(rip.end_lat) ) * COS( RADIANS(rip.end_lng) - RADIANS(rp.lng1)) + SIN(RADIANS(rp.lat1)) * SIN(RADIANS(end_lat))))<0.02 ) ) $query = "SELECT *,pdate(created_at) as d FROM route_paths join road_items_projects WHERE ( 6371 * ACOS( COS( RADIANS(route_paths.lat1) ) * COS( RADIANS(road_items_projects.start_lat) ) * COS( RADIANS(road_items_projects.start_lng) - RADIANS(route_paths.lng1)) + SIN(RADIANS(route_paths.lat1)) * SIN(RADIANS(start_lat)) ) ) < 0.02 AND created_at BETWEEN '2021-04-21 00:00:00' AND '2021-06-21 23:59:59' GROUP BY start_lat,start_lng UNION SELECT *,pdate(created_at) as d FROM route_paths join road_items_projects WHERE (6371 * ACOS( COS( RADIANS(route_paths.lat1) ) * COS( RADIANS(road_items_projects.end_lat) ) * COS( RADIANS(road_items_projects.end_lng) - RADIANS(route_paths.lng1)) + SIN(RADIANS(route_paths.lat1)) * SIN(RADIANS(end_lat)) ) ) < 0.02 AND created_at BETWEEN '2021-04-21 00:00:00' AND '2021-06-21 23:59:59' GROUP BY end_lat,end_lng"; // $end_time = microtime(true); $result = DB::select($query); $execution_time = ($end_time - $start_time); echo $query; echo " It takes ". $execution_time." seconds to execute the script"; dd($result); RoutePath::where('identifier', $identifier)->delete();////// delete table // RoutePath::truncate();////// delete table ///// end $myarr = array(); $info = InfoItem::all(); // dd($result); foreach ($result as $value) { $z = json_decode($value->sub_items_data); foreach ($z as $key => $val) { foreach ($info as $key1 => $value1) { if ($key == $value1->sub_item_id) { $myarr[] = array( 'id' => $key, 'id_fa' => $value1->item_str, 'sub_id_fa' => $value1->sub_item_str, 'unit' => $value1->sub_item_unit, 'value' => $val, 'province' => $value->province_fa, 'city' => $value->city_fa, 'date' => $value->d ); } } // $myarr['data'][] = array( // 'id' => $key, // 'value' => $val // ); // $val; // echo $key.' '.$val."\n"; } } return response()->json([ 'status' => 'succeed', 'message' => '', 'data' => $myarr ], 200); ///////////////////////////////////////////////////////////////////END///////////////////////////////// dd($myarr); $data = array(); foreach ($myarr as $key => $value) { foreach ($info as $key1 => $value1) { if ($key == $value1->sub_item_id) { $data['results'][] = array( 'id' => $key, 'id_fa' => $value1->item_str, 'sub_id_fa' => $value1->sub_item_str, 'unit' => $value1->sub_item_unit, 'value' => $value, 'province' => $value->province_fa, 'city' => $value->city_fa ); } } } dd($data); // dd($projects); // foreach ($projects as $key => $value) { // echo $value->id."\n"; // } /// bar asase mehvar province id ha va date time ro where mizarim $end_time = microtime(true); $execution_time = ($end_time - $start_time); echo " It takes ". $execution_time." seconds to execute the script"; return; /// distance ba shoaa 1 metre /// har kodom bod az araye dovomi ke mishe porozhe ha hazf mishe //return response } public function codexworldGetDistanceOpt($latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo) { /** * Optimized algorithm from http://www.codexworld.com * * @param float $latitudeFrom * @param float $longitudeFrom * @param float $latitudeTo * @param float $longitudeTo * * @return float [km] */ $rad = M_PI / 180; $theta = $longitudeFrom - $longitudeTo; $dist = sin($latitudeFrom * $rad) * sin($latitudeTo * $rad) + cos($latitudeFrom * $rad) * cos($latitudeTo * $rad) * cos($theta * $rad); return (acos($dist) / $rad * 60 * 1.853)/1000; } // -- SELECT * FROM road_items_projects rip WHERE (rip.created_at BETWEEN '2021-04-21 00:00:00' AND '2021-06-21 23:59:59') // SELECT * FROM (SELECT * FROM road_items_projects rip WHERE (rip.created_at BETWEEN '2021-04-21 00:00:00' AND '2021-06-21 23:59:59')) rip WHERE EXISTS (SELECT * FROM route_paths rp WHERE ( (6371* ACOS( COS( RADIANS(rp.lat1) ) * COS( RADIANS(rip.start_lat) ) * COS( RADIANS(rip.start_lng) - RADIANS(rp.lng1)) + SIN(RADIANS(rp.lat1)) * SIN(RADIANS(rip.start_lat)))) < 0.02 || (6371 * ACOS( COS( RADIANS(rp.lat1) ) * COS( RADIANS(rip.end_lat) ) * COS( RADIANS(rip.end_lng) - RADIANS(rp.lng1)) + SIN(RADIANS(rp.lat1)) * SIN(RADIANS(rip.end_lat))))<0.02 ) ) public function coridorReportById(Request $request){ $start_time = microtime(true); $s_lat = $request->slat; $s_lng = $request->slng; $d_lat = $request->dlat; $d_lng = $request->dlng; $date_to = $request->dateto; $date_from = $request->datefrom; $item = $request->item ?? 0; $sub_item = $request->subitem ?? 0; ///// start $url = "https://testmap.141.ir/route/v1/driving/".$s_lng.",".$s_lat.";".$d_lng.",".$d_lat."?overview=full&alternatives=true&steps=true"; $arrContextOptions=array( "ssl"=>array( "verify_peer"=>false, "verify_peer_name"=>false, ), ); $result = file_get_contents($url, false, stream_context_create($arrContextOptions)); // return $result; $result = json_decode($result); // dd($result->routes[0]->legs[0]->steps); $ways = $result->routes[0]->legs[0]->steps; // return gettype($ids); $ids = array(); foreach ($ways as $key => $value) { if(!in_array($value->name, $ids)){ $ids[] = $value->name; } } $data = RoadItemsProject::whereIn('start_way_id', $ids) ->orWhereIn('end_way_id', $ids) ->get(); $end_time = microtime(true); $execution_time = ($end_time - $start_time); echo " It takes ". $execution_time." seconds to execute the script"."\n"; return count($data); } public function update_road_items(Request $request){ $start_time = microtime(true); $data = \App\Models\ContractSubItems::whereNull('start_way_id')->get(); foreach($data as $row){ $start_id = $this->get_way_id_from_nominatim($row['start_lat'],$row['start_lng']); $end_id = $this->get_way_id_from_nominatim($row['end_lat'],$row['end_lng']); $q = \App\Models\ContractSubItems::find($row['id']); $q->start_way_id = $start_id; $q->end_way_id = $end_id; $q->save(); } $end_time = microtime(true); $execution_time = ($end_time - $start_time); echo " It takes ". $execution_time." seconds to execute the script"; return; dd($data); } function get_way_id_from_nominatim($lat, $lng){ $url = "https://testmap.141.ir/nominatim/reverse?format=jsonv2&lat=".$lat."&lon=".$lng."&zoom=16&addressdetails=16"; $arrContextOptions=array( "ssl"=>array( "verify_peer"=>false, "verify_peer_name"=>false, ), ); $result = file_get_contents($url, false, stream_context_create($arrContextOptions)); $result = json_decode($result); if(isset($result->osm_type)) if($result->osm_type == 'way') return $result->osm_id; return 0; } public function axisReportByLatAndLng(Request $request, NominatimService $nominatimService) { if (! $request->type) { return response()->json([ 'status' => 'error', 'message' => ' لطفا یک گزینه از فیلتر ها را انتخاب نمایید.' ], 400); } $date_to = $request->date_to; $date_from = $request->date_from; $info_id = $request->daily_activity; $roadObservedTypes = $request->road_type; $idArrays = $nominatimService->getIDFromNominatim($request->slng, $request->slat, $request->dlng, $request->dlat); $typeArrays = $request->type; $contractStatusArrays = $request->contract_status ?? []; $projectTypeArrays = $request->project_type ?? []; $array = []; if ( in_array(1, $typeArrays) ) { $roadItemsProject = RoadItemsProject::where(function($query) use($idArrays){ $query->whereIn("start_way_id", $idArrays) ->orWhereIn("end_way_id", $idArrays); }) ->WhereIn("info_id", $info_id) ->whereBetween("created_at", [$date_from . " 00:00:00", $date_to . " 23:59:59"]) ->select("start_lat", "start_lng", "id") ->get(); } if ( in_array(2, $typeArrays) ) { $roadPatrolProject = RoadPatrol::where(function($query) use($idArrays){ $query->whereIn("start_way_id", $idArrays) ->orWhereIn("end_way_id", $idArrays); }) ->whereBetween('created_at', [$date_from . ' 00:00:00', $date_to . ' 23:59:59']) ->whereNotNull('start_lat') ->select('start_lat', 'start_lon', 'id') ->get(); } if ( in_array(3, $typeArrays) ) { $contractSubItems = \App\Models\ContractSubItems::where(function($query) use($idArrays){ $query->whereIn("start_way_id", $idArrays) ->orWhereIn("end_way_id", $idArrays); }) ->whereBetween('contract_date_from_parent_contract', [$date_from . ' 00:00:00', $date_to . ' 23:59:59']) ->when($contractStatusArrays , function ($query) use ($contractStatusArrays) { $query->whereIn('last_status_id', $contractStatusArrays); }) ->when($projectTypeArrays , function ($query) use ($projectTypeArrays) { $query->whereIn('project_type_id', $projectTypeArrays); }) ->select('start_lat', 'start_lng', 'id') ->get(); } if ( in_array(4, $typeArrays) ) { $roadObserved = \App\Models\RoadObserved::where(function($query) use($idArrays){ $query->whereIn("handling_way_id", $idArrays) ->orWhereIn("observed_way_id", $idArrays); }) ->whereIn('fk_FeatureType', $roadObservedTypes) ->select('rms_start_latlng', 'id','lat', 'lng') ->where('rms_status', '<>', 0) ->whereBetween('created_at', [$date_from . ' 00:00:00', $date_to . ' 23:59:59']) ->get(); $roadObservedArray = []; foreach ($roadObserved as $value) { $roadObservedArray[] = [ 'id' => $value->id, 'start_lat' => $value->rms_start_latlng[0] ?? $value->lat, 'start_lng' => $value->rms_start_latlng[1] ?? $value->lng, ]; } } $array['roadItemsProject'] = $roadItemsProject ?? null; $array['roadPatrolProject'] = $roadPatrolProject ?? null; $array['contractSubItems'] = $contractSubItems ?? null; $array['roadObserved'] = $roadObservedArray ?? null; return response()->json([ 'status' => 'success', 'data' => $array ]); } public function getAxisReportDataFromID(Request $request) { switch ($request->type) { case "1": $data = RoadItemsProject::with('files')->find($request->id); break; case "2": $data = RoadPatrol::find($request->id); break; case "3": $collection = \App\Models\ContractSubItems::whereId($request->id)->get(); foreach ($collection as $item) { $data[] = [ 'province_fa' => $item->province_fa, 'city_fa' => $item->city_fa, 'project_type_fa' => $item->project_type_fa, 'project_type_id' => $item->project_type_id, 'progress_project' => $item->progress_project, 'project_title' => $item->project_title, 'axis_type_fa' => $item->axis_type_fa, 'axis_name_fa' => $item->axis_name_fa, 'last_status_fa' => $item->last_status_fa, 'created_at_fa' => $item->created_at_fa, 'updated_at_fa' => $item->updated_at_fa, 'operator_name' => $item->operator_name, 'start_lat' => $item->start_lat, 'end_lat' => $item->end_lat, 'start_lng' => $item->start_lng, 'end_lng' => $item->end_lng, 'image_path1' => $item->image_path1, 'image_path2' => $item->image_path2, 'operation' => [ [ 'hasOperation' => $item->operation_type_id1 != 0 ? 1 : 0, 'operation_type_id1' => $item->operation_type_id1, 'operation_type_fa1' => $item->operation_type_fa1, 'operation_type_unit1' => $item->operation_type_unit1 == "" ? "-" : $item->operation_type_unit1, 'operation_type_amount1' => $item->operation_type_amount1 ?? "-", 'operation_type_progress1' => $item->operation_type_progress1, 'operation_type_tonaj1' => $item->operation_type_tonaj1 ?? "-", ], [ 'hasOperation' => $item->operation_type_id2 != 0 ? 1 : 0, 'operation_type_id2' => $item->operation_type_id2, 'operation_type_fa2' => $item->operation_type_fa2, 'operation_type_unit2' => $item->operation_type_unit2 == "" ? "-" : $item->operation_type_unit2, 'operation_type_amount2' => $item->operation_type_amount2 ?? "-", 'operation_type_progress2' => $item->operation_type_progress2, 'operation_type_tonaj2' => $item->operation_type_tonaj2 ?? "-", ], [ 'hasOperation' => $item->operation_type_id3 != 0 ? 1 : 0, 'operation_type_id3' => $item->operation_type_id3, 'operation_type_fa3' => $item->operation_type_fa3, 'operation_type_unit3' => $item->operation_type_unit3 == "" ? "-" : $item->operation_type_unit3, 'operation_type_amount3' => $item->operation_type_amount3 ?? "-", 'operation_type_progress3' => $item->operation_type_progress3, 'operation_type_tonaj3' => $item->operation_type_tonaj3 ?? "-", ], [ 'hasOperation' => $item->operation_type_id4 != 0 ? 1 : 0, 'operation_type_id4' => $item->operation_type_id4, 'operation_type_fa4' => $item->operation_type_fa4, 'operation_type_unit4' => $item->operation_type_unit4 == "" ? "-" : $item->operation_type_unit4, 'operation_type_amount4' => $item->operation_type_amount4 ?? "-", 'operation_type_progress4' => $item->operation_type_progress4, 'operation_type_tonaj4' => $item->operation_type_tonaj4 ?? "-" ] ] ]; } break; case "4": $data = \App\Models\RoadObserved::where('id', $request->id)->with('files')->first(); break; default: break; } return response()->json([ 'message' => 'success', 'data' => $data ], 200); } function getIDFromNominatim($s_lng, $s_lat, $d_lng, $d_lat) { $url = "https://testmap.141.ir/route/v1/driving/".$s_lng.",".$s_lat.";".$d_lng.",".$d_lat."?overview=full&alternatives=true&steps=true"; $arrContextOptions=array( "ssl"=>array( "verify_peer"=>false, "verify_peer_name"=>false, ), ); $result = file_get_contents($url, false, stream_context_create($arrContextOptions)); $result = json_decode($result); if(count($result->routes) > 1 && $result->routes[1]->distance < $result->routes[0]->distance){ // if(){ $ways = $result->routes[1]->legs[0]->steps; // } } else $ways = $result->routes[0]->legs[0]->steps; $ids = array(); foreach ($ways as $key => $value) { if(!in_array($value->name, $ids)){ $ids[] = $value->name; } } return $ids; } public function axisReportExcelRedirector(Request $request, NominatimService $nominatimService) { if (! $request->type) { return response()->json([ 'status' => 'error', 'message' => ' لطفا یک گزینه از فیلتر ها را انتخاب نمایید.' ], 400); } $date_to = $request->date_to; $date_from = $request->date_from; $info_id = $request->daily_activity; $roadObservedTypes = $request->road_type; $idArrays = $nominatimService->getIDFromNominatim($request->slng, $request->slat, $request->dlng, $request->dlat); $typeArrays = $request->type; $contractStatusArrays = $request->contract_status ?? []; $projectTypeArrays = $request->project_type ?? []; $array = []; // dd( $request->date_to); if ( in_array(1, $typeArrays) ) { $roadItemsProject = RoadItemsProject::where(function($query) use($idArrays){ $query->whereIn("start_way_id", $idArrays) ->orWhereIn("end_way_id", $idArrays); }) ->WhereIn("info_id", $info_id) // ->when($date_to , function ($query) use ($date_to, $date_from) { ->whereBetween("created_at", [$date_from . " 00:00:00", $date_to . " 23:59:59"]) // }) // ->whereNotNull("start_lat") ->select("start_lat", "start_lng", "id") // ->toSql(); // echo $roadItemsProject; // dd($roadItemsProject); ->get(); } if ( in_array(2, $typeArrays) ) { $roadPatrolProject = RoadPatrol::whereIn('start_way_id', $idArrays) ->orWhereIn('end_way_id', $idArrays) // ->when($date_to , function ($query) use ($date_to, $date_from) { ->whereBetween('created_at', [$date_from . ' 00:00:00', $date_to . ' 23:59:59']) // }) ->whereNotNull('start_lat') ->select('start_lat', 'start_lon', 'id') ->get(); } if ( in_array(3, $typeArrays) ) { $contractSubItems = \App\Models\ContractSubItems::whereIn('start_way_id', $idArrays) ->orWhereIn('end_way_id', $idArrays) // ->when($date_to , function ($query) use ($date_to, $date_from) { ->whereBetween('contract_date_from_parent_contract', [$date_from . ' 00:00:00', $date_to . ' 23:59:59']) // }) ->with('Contracts') // ->whereNotNull('start_lat') ->when($contractStatusArrays , function ($query) use ($contractStatusArrays) { // $query->whereHas('Contracts', function($query) use ($contractStatusArrays) { $query->whereIn('last_status_id', $contractStatusArrays); // }); }) ->when($projectTypeArrays , function ($query) use ($projectTypeArrays) { $query->WhereIn('project_type_id', $projectTypeArrays); }) ->select('start_lat', 'start_lng', 'id') ->get(); } if ( in_array(4, $typeArrays) ) { $roadObserved = \App\Models\RoadObserved::where(function($query) use($idArrays){ $query->whereIn("handling_way_id", $idArrays) ->orWhereIn("observed_way_id", $idArrays); }) ->whereIn('fk_FeatureType', $roadObservedTypes) ->select('rms_start_latlng', 'id') // ->when($date_to , function ($query) use ($date_to, $date_from) { ->whereBetween('created_at', [$date_from . ' 00:00:00', $date_to . ' 23:59:59']) // }) ->get(); $roadObservedArray = []; foreach ($roadObserved as $value) { $roadObservedArray[] = [ 'id' => $value->id, 'start_lat' => $value->rms_start_latlng[0] ?? null, 'start_lng' => $value->rms_start_latlng[1] ?? null, ]; } } $array['roadItemsProject'] = $roadItemsProject ?? null; $array['roadPatrolProject'] = $roadPatrolProject ?? null; $array['contractSubItems'] = $contractSubItems ?? null; $array['roadObserved'] = $roadObservedArray ?? null; if ($array['roadItemsProject'] != null) { foreach ($array['roadItemsProject'] as $item) { $activities[] = $item->id; } } if ($array['roadPatrolProject'] != null) { foreach ($array['roadPatrolProject'] as $item) { $patrols[] = $item->id; } } if ($array['contractSubItems'] != null) { foreach ($array['contractSubItems'] as $item) { $projects[] = $item->id; } } if ($array['roadObserved'] != null) { foreach ($array['roadObserved'] as $item) { $observeds[] = $item['id']; } } $name = 'گزارش گیری محوری ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; return Excel::download(new AxisReportsSheets($patrols ?? null, $activities ?? null, $projects ?? null, $observeds ?? null, $date_from, $date_to), $name); // dd($roadItemsProject); // if (isset($activities) || isset($patrols) || isset($observeds) || isset($projects)) { // } else { // # code... // } } }