This is a simple class which uses the the Google Geocoding API to find out a location information based on the zip code. You will get the following using this class:
- City
- State
- Country
- Longitude
- Latitude
NOTE:
- Here the backdrop is some of the countries zip codes are same. so if we pass only zip code then it returns any one of the matching country details.
- So better we need to pass city with zip code. it results accurate country details.
- For example we need to pass ' 625106,Madurai '
Example:
include 'GoogleAddressLookup.php';
$zipCode = 625106; // 625106,Madurai for accurate result
$lookup = new GoogleAddressLookup();
$lookup->setZipCode($zipCode);
echo 'City: ' . $lookup->getCity() . '('. $lookup->getCityShortName().')<br>';
echo 'State: ' . $lookup->getState() . '('. $lookup->getStateShortName().')<br>';
echo 'Country: ' . $lookup->getCountry() . '('. $lookup->getCountryShortName().')<br>';
echo 'LAT: ' . $lookup->getLatitude().'-- LNG: ' . $lookup->getLongitude();
GoogleAddressLookup.php
<?php
/**
* This class can be used to lookup city/state/country using zip code in Google Geo Lookup service.
* This class uses the JSON API provided by Google Geo Lookup.
*
* @author Mohammad Sajjad Hossain
* @version 1.0
*/
class GoogleAddressLookup{
/**
* Response
* @var array
*/
private $response;
/**
* Constructor
*/
public function __construct(){
$this->initialize();
}
/**
* Initialize variables
*/
private function initialize(){
$this->response = array(
'zip_code' => '',
'state' => '',
'state_short' => '',
'city' => '',
'city_short' => '',
'country' => '',
'country_short' => '',
'latitude' => '',
'longitude' => '',
'raw_response' => ''
);
}
/**
* Sets Zup Code
* @param int $zipCode
*/
public function setZipCode($zipCode){
$this->response['zip_code'] = $zipCode;
$this->processResponse();
}
/**
* Returns City full name
*
* @return string
*/
public function getCity(){
return $this->response['city'];
}
/**
* Returns City short name
*
* @return string
*/
public function getCityShortName(){
return $this->response['city_short'];
}
/**
* Returns State full name
*
* @return string
*/
public function getState(){
return $this->response['state'];
}
/**
* Returns State short name
*
* @return string
*/
public function getStateShortName(){
return $this->response['state_short'];
}
/**
* Returns Country full name
*
* @return string
*/
public function getCountry(){
return $this->response['country'];
}
/**
* Returns Country short name
*
* @return string
*/
public function getCountryShortName(){
return $this->response['country_short'];
}
/**
* Returns Latitude
*
* @return int
*/
public function getLatitude(){
return $this->response['latitude'];
}
/**
* Returns Longitude
*
* @return int
*/
public function getLongitude(){
return $this->response['longitude'];
}
/**
* Makes call to the API
*/
private function makeCall(){
if($this->response['zip_code']){
$url = "http://maps.googleapis.com/maps/api/geocode/json?address={$this->response['zip_code']}&sensor=true";
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible;)");
curl_setopt($ch, CURLOPT_URL, $url);
$this->response['raw_response'] = curl_exec($ch);
}
}
/**
* Processes the response received
*/
private function processResponse(){
$this->makeCall();
if($this->response['raw_response']){
$result = json_decode($this->response['raw_response']);
if($result->status == 'OK'){
if(!empty($result->results[0]->address_components)){
foreach($result->results[0]->address_components as $add_comp){
if(in_array('locality', $add_comp->types)){
$this->response['city'] = $add_comp->long_name;
$this->response['city_short'] = $add_comp->short_name;
}
elseif (in_array('administrative_area_level_1', $add_comp->types)) {
$this->response['state'] = $add_comp->long_name;
$this->response['state_short'] = $add_comp->short_name;
}
elseif (in_array('country', $add_comp->types)) {
$this->response['country'] = $add_comp->long_name;
$this->response['country_short'] = $add_comp->short_name;
}
}
}
if(!empty($result->results[0]->geometry)){
$this->response['longitude'] = $result->results[0]->geometry->location->lng;
$this->response['latitude'] = $result->results[0]->geometry->location->lat;
}
}
}
}
}
No comments:
Post a Comment