/**
  * @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;
     });
 }
Ejemplo n.º 3
0
 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;
 }