| 
<?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);
 }
 }
 
 }
 
 |