<html>
<head>
<title>Imagery Service example in PHP (with Geocode)</title>
</head>
<body>
This example currently accesses the staging environment only. Username, password, and address are required.<br>
In order to run this example, the php_soap extension must be enabled. This was built and tested using PHP 5.3.0.<br><br>
<form action="imageryservicesample.php" method="post">
Username: <input type="text" name="username" value="<?php echo (isset($_POST['username'])?$_POST['username']:'') ?>"> 
Password: <input type="text" name="password" value="<?php echo (isset($_POST['password'])?$_POST['password']:'') ?>"><br>
Address: <input type="text" name="address" value="<?php echo (isset($_POST['address'])?$_POST['address']:'') ?>"><br>
Zoom: <input type="text" name="zoomlevel" value="<?php echo (isset($_POST['zoomlevel'])?$_POST['zoomlevel']:'') ?>"><br>
<input type="submit" value="Submit">
</form>
<?php
if(isset($_POST['username']) && isset($_POST['password']))
{
	$UserName = $_POST['username'];
	$Password = $_POST['password'];
	
	// Url to the token service wsdl (for now it's a local file)
	$TokenServiceWsdl = "tokenreference.wsdl";
	
	// Create the service client object
	//trace allows us to see last response and request for debugging
	$tokenClient = new SoapClient($TokenServiceWsdl, array('login' => $UserName, 'password' => $Password, 'trace' => true));
	
	// TokenSpecification "object"
	$tokenSpec = array(
		'ClientIPAddress' => '0.0.0.0',
		'TokenValidityDurationMinutes' => '60'
	);
	
	try {
		// Get the client token
		$tokenResponse = $tokenClient->GetClientToken(array('specification' => $tokenSpec));
	}
	catch(SoapFault $e)
	{
		die('Fault occurred using Web Service: '.$e->getMessage());//.print_r($res,true));
    }
	
	// Get the token from the response object
	$token = $tokenResponse->GetClientTokenResult;

	// URLs to the Imagery and Geocode services
	$imageryServiceWsdl = 'imageryservice.wsdl';
	$geocodeServiceWsdl = 'geocodeservice.wsdl';
	
	// Credentials "object"
	$credentials = array('Token' => $token);
	
	// Create the geocode service and imagery service clients
	$geocodeClient = new SoapClient($geocodeServiceWsdl, array('trace' => 1));
	$imageryClient = new SoapClient($imageryServiceWsdl, array('trace' => 1));
	
	// GeocodeRequest "object"
	$geocodeRequest = array(
	'Credentials' => $credentials,
	'Query' => $_POST['address']
	);
	
	try {
		if(isset($_POST['address']))
			$geocodeResponse = $geocodeClient->Geocode(array('request' => $geocodeRequest));
	}
	catch(SoapFault $e)
	{
      die('Fault occurred using Web Service: '.$e->getMessage());
	}
	
	// Retrieve the latitude and longitude from the response object
	$lat = $geocodeResponse->GeocodeResult->Results->GeocodeResult->Locations->GeocodeLocation->Latitude;
	$lon = $geocodeResponse->GeocodeResult->Results->GeocodeResult->Locations->GeocodeLocation->Longitude;
	
	// Location "object"
	$location = array(
	'Latitude' => $lat,
	'Longitude' => $lon
	);
	
	if($_POST['zoomlevel'] == '')
		$_POST['zoomlevel'] = null;
		
	// MapUriOptions "object"
	$options = array(
	'ZoomLevel' => $_POST['zoomlevel']
	);
	
	// MapUriRequest "object"
	$mapUriRequest = array(
	'Credentials' => $credentials,
	'Center' => $location,
	'Options' => $options
	);
	
	try {
		// GetMapUri method call
		$mapUriResponse = $imageryClient->GetMapUri(array('request' => $mapUriRequest));
	}
	catch(SoapFault $e)
	{
      die('Fault occurred using Web Service: '.$e->getMessage());
	}

	// Display the URI and lat/lon returned from the service call
	echo '<img src="' . $mapUriResponse->GetMapUriResult->Uri . '"><br>';
	echo 'Latitude: '.$lat.' Longitude: '.$lon;
}
?>
</body>
</html>