/** * @return static */ public static function getInstance() { static $inst = null; if ($inst === null) { self::$adapter = new \Ivory\HttpAdapter\CurlHttpAdapter(); self::$geoCoder = new \Geocoder\ProviderAggregator(); self::$geoCoder->registerProviders([new \Geocoder\Provider\OpenStreetMap(self::$adapter), new \Geocoder\Provider\GoogleMaps(self::$adapter), new \Geocoder\Provider\FreeGeoIp(self::$adapter)])->limit(1); $inst = new static(); } return $inst; }
/** * Register the service provider. * * @return void */ public function register() { $this->app->singleton('geocoder.adapter', function ($app) { $adapter = $app['config']->get('geocoder.adapter'); return new $adapter(); }); $this->app['geocoder'] = $this->app->share(function ($app) { $geocoder = new ProviderAggregator(); $geocoder->registerProviders($this->getGeocoderProviders($this->app['config']->get('geocoder.providers'))); return $geocoder; }); }
private function getLocation() { $request = Request::createFromGlobals(); $adapter = new CurlHttpAdapter(); $geocoder = new ProviderAggregator(); $geocoder->registerProviders([new FreeGeoIp($adapter), new GeoPlugin($adapter)]); $location = 'n/a'; try { $result = $geocoder->geocode($request->getClientIp()); if ($result->count()) { $address = $result->first(); $state = $address->getAdminLevels()->first(); $state = $state !== null ? $state->getName() : ''; $parts = new ArrayObject([$address->getCountry()->getName(), $state, $address->getLocality()]); $parts = $parts->filter(function ($elem) { return !empty($elem); }); $loc = $parts->join(', ')->trim(' ,')->toString(); if (!empty($loc)) { $location = $loc; } } } catch (\Exception $e) { } return $location; }