Login   Register  
PHP Classes
elePHPant
Icontem

File: geocode.class.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Wouter Snels  >  Google Geocode API  >  geocode.class.php  >  Download  
File: geocode.class.php
Role: Class source
Content type: text/plain
Description: class file
Class: Google Geocode API
Get the location of a street with Google Maps API
Author: By
Last change: Removed private url_encode and replaced it with standart urlencode function, .. where it didn't work before it seems to encode it properly now.
Date: 2 years ago
Size: 7,249 bytes
 

Contents

Class file image Download
<?php
  
/*
   * geocode.class.php
   *
   * Copyright 2011 Wouter Snels <info@ofloo.net>
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as published by
   * the Free Software Foundation; either version 2 of the License, or
   * (at your option) any later version.
   *
   * This program is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU General Public License for more details.
   *
   * You should have received a copy of the GNU General Public License
   * along with this program; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
   * MA 02110-1301, USA.
   *
   * SVN: https://narf.ofloo.net/svn/geocode.php/
   *
   */

   //todo http://maps.googleapis.com/maps/api/geocode/xml?sensor=false&address=ulica%20nr%201%202,Warsaw,pl

  
class geocode {

    private 
$_URL "http://maps.googleapis.com/maps/api/geocode/xml?sensor=false&address=";
    private 
$_LAT;
    private 
$_LNG;
    private 
$_ACCURACY;
    private 
$_PARTIAL false;
    private 
$_STATUS = -4;
    private 
$_FORMAT;
    private 
$_STREET;
    private 
$_NUMBER;
    private 
$_POSTAL;
    private 
$_PRECISSION 0;

    
/* bool returns true or false, true on result false on no result
     */
    
public function __construct ($address$city$country) {
      
$url $this->_URL urlencode ($address) . "," urlencode ($city) . "," urlencode ($country);
      if (
$xml = @simplexml_load_file($url)) {
        switch (
$xml->status) {
          case 
"OK":
            
$this->_LAT $xml->result->geometry->location->lat;
            
$this->_LNG $xml->result->geometry->location->lng;
            
$this->_ACCURACY $xml->result->geometry->location_type;
            if (
$xml->result->partial_match) {
              
$this->_PARTIAL true;
            }
            if (!
is_array ($xml->result->type)) {
              switch (
$xml->result->type) {
                case 
"post_box":
                case 
"floor":
                case 
"room":
                  
$this->_PRECISSION 3;
                break;
                case 
"street_number":
                  
$this->_PRECISSION 2;
                break;
                case 
"street_address":
                  
$this->_PRECISSION 1;
                break;
                default :
                  
$this->_PRECISSION 0;
                break;
              }
            } else {
              
$this->_PRECISSION = -1;
            }
            
$this->_FORMAT $xml->result->formatted_address;
            foreach (
$xml->result->address_component as $_list) {
              switch (
$_list->type) {
                case 
"street_number":
                  
$this->_NUMBER $_list->long_name;
                break;
                case 
"postal_code":
                  
$this->_POSTAL $_list->long_name;
                break;
                case 
"route":
                  
$this->_STREET $_list->long_name;
                break;
                default:
                break;
              }
            }
            
$this->_STATUS 1;
          break;
          case 
"ZERO_RESULTS":
            
$this->_STATUS 0;
          break;
          case 
"OVER_QUERY_LIMIT":
            
$this->_STATUS = -1;
          break;
          case 
"REQUEST_DENIED":
            
$this->_STATUS = -2;
          break;
          case 
"INVALID_REQUEST":
            
$this->_STATUS = -3;
          break;
          default:
            
$this->_STATUS = -4;
          break;
        }
        return 
true;
      }
      return 
false;
    }

    
/* double returns latitude
     */
    
public function lat () {
      return 
$this->_LAT;
    }

    
/* double returns longtitude
     */
    
public function lng () {
      return 
$this->_LNG;
    }

    
/* string returns streetname
     */
    
public function street () {
      return 
$this->_STREET;
    }

    
/* string returns street number
     */
    
public function number () {
      return 
$this->_NUMBER;
    }

    public function 
postal () {
      return 
$this->_POSTAL;
    }

    
/* string returns postal code
     */
    
public function format () {
      return 
$this->_FORMAT;
    }

    
/* int returns precission -1 to 3
     * -1: multiple results
     *  0: from route level to up (default)
     *  1: street address
     *  2: street number
     *  3: room, floor, post box
     */
    
public function precission () {
      return 
$this->_PRECISSION;
    }

    
/* bool return true on partialmatch otherwise false
     */
    
public function partial () {
      return 
$this->_PARTIAL;
    }

    
/* int returns range from 2 to -2, ..
     *  2: indicates that the returned result is a precise geocode for which we have location information accurate down to street address precision.
     *  1: indicates that the returned result reflects an approximation (usually on a road) interpolated between two precise points (such as intersections). Interpolated results are generally returned when rooftop geocodes are unavailable for a street address.
     *  0: default
     * -1: indicates that the returned result is the geometric center of a result such as a polyline (for example, a street) or polygon (region).
     * -2: indicates that the returned result is approximate.
     */
    
public function accuracy () {
      switch (
$this->_ACCURACY) {
        case 
"ROOFTOP":
          return 
2;
        break;
        case 
"RANGE_INTERPOLATED":
          return 
1;
        break;
        case 
"GEOMETRIC_CENTER":
          return -
1;
        break;
        case 
"APPROXIMATE":
          return -
2;
        break;
        default:
          return 
0;
        break;
      }
    }

    
/* int returns range from 1 to -4
     *  1: indicates that no errors occurred; the address was successfully parsed and at least one geocode was returned.
     *  0: indicates that the geocode was successful but returned no results. This may occur if the geocode was passed a non-existent address or a latlng in a remote location.
     * -1: indicates that you are over your quota.
     * -2: indicates that your request was denied, generally because of lack of a sensor parameter.
     * -3: generally indicates that the query (address or latlng) is missing.
     * -4: default, either no request was made, or it was unsuccessfully made
     */
    
public function status () {
      return 
$this->_STATUS;
    }

    public function 
__destruct () {
      unset (
$this->_URL);
      unset (
$this->_LAT);
      unset (
$this->_LNG);
      unset (
$this->_PARTIAL);
      unset (
$this->_ACCURACY);
      unset (
$this->_STATUS);
      unset (
$this->_FORMAT);
      unset (
$this->_STREET);
      unset (
$this->_NUMBER);
      unset (
$this->_POSTAL);
      unset (
$this->_PRECISSION);
      foreach(
get_object_vars($this) as $k => $v) {
        unset(
$this->$k);
      }
    }
  }

?>