google geolocation api , php yandex locator

Получим город с помощью google geo api, а также яндекс Локатор . Апи обоих практически идентичны, надо получить апи-ключ и там и там. Запросы в гугл-апи пишем сами, в яндексе все уже есть, просто скачайте по ссылке.
Для начала надо создать проект, чтобы получить ключ. Далее все просто: делаем http POST запрос, с параметрами в формате JSON.


$url = "https://www.googleapis.com/geolocation/v1/geolocate?key=$key";

/** @var string [description] */
$data = '{
  "homeMobileCountryCode": 250,
  "homeMobileNetworkCode": 25002,
  "radioType": "gsm",
  "carrier": "Vodafone",
  "considerIp": "true"
}';

/**
 * [curl_request description]
 * @param  [type] $url  [description]
 * @param  [type] $data [description]
 * @return [type]       [description]
 */
function curl_request($url, $data = null){
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  if(isset($data)){    
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
     'Content-Type: application/json',
     'Content-Length: ' . strlen($data),
      ]);
  }
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
  $code=curl_getinfo($ch ,CURLINFO_HTTP_CODE);

  $res = json_decode(curl_exec($ch));
  curl_close($ch);
  return $res;
}

/** @var [type] [description] */
$coord = curl_request($url, $data);

Ответ такой


object(stdClass)[2]
  public 'location' => 
    object(stdClass)[1]
      public 'lat' => float 55.719464
      public 'lng' => float 52.4102624
  public 'accuracy' => float 7401

Из этих координат можно получить город, обратным геокодированием от Гугл.


/** @var [type] [координаты] */
$latlng = $coord->location->lat.','.$coord->location->lng;
/** @var [type] [full] */
$city = curl_request("https://maps.googleapis.com/maps/api/geocode/json?latlng=$latlng&key=$key&language=ru");
/** @var [type] [только город] */
$city = $city->results[0]->address_components[2]->long_name;

или от яндекс



$longLat = $response->getLongitude().','.$response->getLatitude();
$res = geokoder($longLat);
function geokoder($arCoo){

            $geoCoder = 'https://geocode-maps.yandex.ru/1.x/';
            $ch = curl_init();
            curl_setopt($ch,CURLOPT_URL,$geoCoder);
            curl_setopt($ch,CURLOPT_POST,1);
            curl_setopt($ch,CURLOPT_HEADER,0);
            curl_setopt($ch,CURLOPT_POSTFIELDS,"geocode=$arCoo&format=json&results=1&kind=locality");
            curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
            curl_setopt($ch,CURLOPT_TIMEOUT,60);
            curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);
            curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0);
            $geoCodeJson = json_decode(curl_exec($ch));
            curl_close($ch);
            $arLocSimple = array();
            if ($geoCodeJson->response->GeoObjectCollection->featureMember[0]->GeoObject->metaDataProperty->GeocoderMetaData->Address->Components):
                $listLoc = $geoCodeJson->response->GeoObjectCollection->featureMember[0]->GeoObject->metaDataProperty->GeocoderMetaData->Address->Components;
                foreach($listLoc as $obj):
if ($obj->kind=='country'):
$arLocSimple['COUNTRY']=$obj->name;
endif;
if ($obj->kind=='locality'):
$arLocSimple['LOCALITY']=$obj->name;
endif;
endforeach;
endif;
if ($arLocSimple['COUNTRY'] && $arLocSimple['LOCALITY']){
$returnCity = $arLocSimple;
}
return $returnCity;
}

Leave a comment

Your email address will not be published.


*