88 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
| <?php
 | |
| 
 | |
| namespace App\Http\Controllers;
 | |
| 
 | |
| use App\Http\Controllers\Controller;
 | |
| use Illuminate\Http\Request;
 | |
| use Illuminate\Http\Response;
 | |
| use Illuminate\Support\Facades\DB;
 | |
| use Validator;
 | |
| use GuzzleHttp\Client as GuzzleClient;
 | |
| use App\Responses;
 | |
| use App\Helper;
 | |
| use App\Models\Zone;
 | |
| 
 | |
| class OSMController extends Controller
 | |
| {
 | |
| 	public function api_geo_addr(Request $req)
 | |
| 	{
 | |
| 		try {
 | |
| 			$now = time();
 | |
| 
 | |
| 			$input = [
 | |
| 				'address' => $req->address,
 | |
| 				'country_code' => $req->country_code,
 | |
| 			];
 | |
| 			$rulesInput = [
 | |
| 				'address' => 'required|string|min:45',
 | |
| 				'country_code' => 'required|string|min:2',
 | |
| 			];
 | |
| 
 | |
| 			// validasi input
 | |
| 			$isValidInput = Validator::make($input, $rulesInput);
 | |
| 			if (!$isValidInput->passes()) {
 | |
| 				$apiResp = Responses::bad_input($isValidInput->messages()->first());
 | |
| 				return new Response($apiResp, $apiResp['meta']['code']);
 | |
| 			}
 | |
| 
 | |
| 			$payload = [
 | |
| 				'countrycodes' => $req->country_code,
 | |
| 				'format' => 'geojson',
 | |
| 				'q' => $req->address,
 | |
| 			];
 | |
| 			$payload = http_build_query($payload);
 | |
| 			// $url = env('API_URL_NOMINATIM') . '/search?format=geojson&countrycodes=' . $req->country_code . '&q=' . $req->address;
 | |
| 			$url = env('API_URL_NOMINATIM') . '/search?' . $payload;
 | |
| 
 | |
| 			// $respNominatim = Helper::req_get($url, [
 | |
| 			// 	'User-Agent: PostmanRuntime/7.28.4',
 | |
| 			// 	'Accept: */*',
 | |
| 			// 	'Accept-Encoding: gzip, deflate, br',
 | |
| 			// 	'Connection: keep-alive'
 | |
| 			// ]);
 | |
| 
 | |
| 			$guzReq = new GuzzleClient();
 | |
| 			$respNominatim = $guzReq->request('GET', $url, [
 | |
| 				'headers' => [
 | |
| 					'Host' => $_SERVER['SERVER_ADDR'] ?? '127.0.0.1',
 | |
| 					'User-Agent' => 'curl/7.65.3',
 | |
| 					'Accept' => '*/*',
 | |
| 					'Accept-Encoding' => 'gzip, deflate, br',
 | |
| 					// 'Connection' => 'keep-alive',
 | |
| 				]
 | |
| 			]);
 | |
| 
 | |
| 			if ($respNominatim->getStatusCode() != 200) {
 | |
| 				$apiResp = Responses::bad_request('fail geo address');
 | |
| 				return (new Response($apiResp, $apiResp['meta']['code']));
 | |
| 			}
 | |
| 
 | |
| 			$body = json_decode($respNominatim->getBody()->getContents());
 | |
| 			$data = null;
 | |
| 			if (count($body->features) > 0) {
 | |
| 				$data = [
 | |
| 					'lat' => $body->features[0]->geometry->coordinates[1],
 | |
| 					'lng' => $body->features[0]->geometry->coordinates[0],
 | |
| 				];
 | |
| 			}
 | |
| 
 | |
| 			$apiResp = Responses::success('success geo address');
 | |
| 			$apiResp['data'] = $data;
 | |
| 			return (new Response($apiResp, $apiResp['meta']['code']));
 | |
| 		} catch (\Exception $e) {
 | |
| 			$apiResp = Responses::error($e->getMessage());
 | |
| 			return (new Response($apiResp, $apiResp['meta']['code']));
 | |
| 		}
 | |
| 	}
 | |
| }
 | 
