PHP Classes

File: ArcgisGeocode.php

Recommend this page to a friend!
  Classes of Khanh   Arcgis PHP Geocode   ArcgisGeocode.php   Download  
File: ArcgisGeocode.php
Role: Class source
Content type: text/plain
Description: ArcgisGeocode.php
Class: Arcgis PHP Geocode
Get an address geographic location using Arcgis
Author: By
Last change:
Date: 10 years ago
Size: 5,389 bytes
 

Contents

Class file image Download
<?php

//$geo = new ArcgisGeocoding("380 New York St, Redlands, CA, 92373");
//print "<pre>"; print_r($geo);exit;
/**
 *
 */
class ArcgisGeocode {

    public
$output;
    public
$address;
    public
$latlon;
    public
$debug = false;
   
    protected
$url = 'http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/findAddressCandidates';
    protected
$field = 'x,y';
    protected
$responseType = 'json';
    public
$contentType = "Content-Type: text/xml";
    protected
$option;
    protected
$param;
    protected
$querystring;
    protected
$responseData;
    protected
$input;

   
/**
     *
     */
   
public function __construct($address) {
       
$this->input = $address;
       
$this->init();
    }

   
/**
     *
     */
   
protected function init() {
       
$this->setOption();
       
$this->requestUrl();

        @
$this->debugger($this->responseData);
       
$this->geocode();
        return
$this->output;
    }

   
/**
     *
     */
   
protected function setOption() {
       
$this->setParam();
       
$this->buildQuery();
    }

   
/**
     *
     */
   
protected function setParam() {
       
$param = array(
           
'SingleLine' => $this->input,
           
'f' => $this->responseType,
           
'outFields' => $this->field
       
);
       
$this->param = http_build_query($param);
        unset(
$this->field);
        unset(
$this->responseType);
    }

    protected function
buildQuery() {
       
$this->querystring = $this->url . "?" . $this->param;
        unset(
$this->param);
        unset(
$this->url);
    }

   
/**
     *
     */
   
protected function setAddress($object = "", $key = "address") {
        if (
$object && $key != null) {
           
$this->address = $object->{$key};
        }

        if (
$key == null) {
           
$this->address = $object;
        }
    }

   
/**
     *
     */
   
protected function getAddress() {
        return
$this->address;
    }

   
/**
     *
     */
   
protected function geocode() {
       
$this->requestUrl();
        unset(
$this->querystring);
    }

   
/**
     *
     */
   
protected function fetchData() {
        if (
count($this->responseData) > 0) {
            if (!isset(
$this->responseData->candidates) && !$this->responseData->candidates) {
                return array();
            } else {
                if (
count($this->responseData->candidates) > 0) {
                    for (
$i = 0; $i < 1; $i++) {
                       
$this->setOutput($this->responseData->candidates[$i]);
                    }
                }
               
            }
        }
        unset(
$this->responseData);
    }

    public function
getLatLon() {
        return
$this->latlon;
    }

    protected function
setOutput($object) {
       
$this->setLatLon($object, 'location');
       
$this->setAddress($object);
       
$this->output->address = $this->address;
       
$this->output->latlon = $this->latlon;
        unset(
$this->address);
        unset(
$this->latlon);
        unset(
$this->input);
        unset(
$this->option);
    }

    protected function
setLatLon($object, $key = "location") {
        if (
$object && $key != null) {
           
$this->latlon = array($object->{$key}->x, $object->{$key}->y);
        }

        if (
$key == null) {
           
$this->latlon = $object;
        }
    }

   
/**
     *
     */
   
protected function requestUrl() {
        if (
$this->querystring) {
           
$data = "<soap:Envelope>[...]</soap:Envelope>";
           
$tuCurl = curl_init();
           
curl_setopt($tuCurl, CURLOPT_URL, $this->querystring);
           
curl_setopt($tuCurl, CURLOPT_VERBOSE, 0);
           
curl_setopt($tuCurl, CURLOPT_HEADER, 0);
           
curl_setopt($tuCurl, CURLOPT_SSLVERSION, 3);
           
curl_setopt($tuCurl, CURLOPT_SSLCERT, getcwd() . "/client.pem");
           
curl_setopt($tuCurl, CURLOPT_SSLKEY, getcwd() . "/keyout.pem");
           
curl_setopt($tuCurl, CURLOPT_CAINFO, getcwd() . "/ca.pem");
           
curl_setopt($tuCurl, CURLOPT_POST, 1);
           
curl_setopt($tuCurl, CURLOPT_SSL_VERIFYPEER, 1);
           
curl_setopt($tuCurl, CURLOPT_RETURNTRANSFER, 1);
           
curl_setopt($tuCurl, CURLOPT_POSTFIELDS, $data);
           
curl_setopt($tuCurl, CURLOPT_HTTPHEADER,
                        array(
"Content-Type: text/xml",
                               
"SOAPAction: \"/soap/action/query\"",
                               
"Content-length: " . strlen($data)
                              )
                        );

           
$tuData = curl_exec($tuCurl);
            if (!
curl_errno($tuCurl)) {
               
$return = json_decode($tuData);
                if (isset(
$return->error)) {
                   
$return->candidates = null;
                }
            } else {
               
$return = array();
            }
           
curl_close($tuCurl);
        } else {
           
$return = array();
        }
       
$this->responseData = $return;
        unset(
$this->contentType);
       
$this->fetchData();
       
    }

    protected function
debugger($e) {
        if (
$this->debug) {
            print
"<pre>";
           
print_r($e);
        }
    }

}