| 
<?phprequire_once('../mappoint/ClassLoader.php');
 session_start();
 
 
 /**
 * Populates a select element based on an array of FindResults objects.
 *
 * @param array $myResults an array of FindResults objects
 */
 function populateListBox($myResults) {
 echo "<select name='listboxFindNearbyResults' size='4' id='listboxFindNearbyResults' style='width:320px'>";
 foreach ($myResults as $result) {
 echo "<option value='".$result->FoundLocation->LatLong->Latitude."/"
 .$result->FoundLocation->LatLong->Longitude."'>";
 if ($result->FoundLocation->Entity->DisplayName == null) {
 echo $result->FoundLocation->Entity->Name;
 } else {
 echo $result->FoundLocation->Entity->DisplayName;
 }
 echo "</option>";
 }
 echo "</select>";
 }
 
 
 if (!isset($_SESSION['props'])) {
 $_SESSION['props'] = array();
 }
 if (isset($_POST['getpropnames'])) {
 $global = $_SESSION['mappoint'];
 
 $ets = null;
 try {
 $ets = $global->CommonService->GetEntityTypes("MapPoint.FourthCoffeeSample");
 $_SESSION['props'] = array();
 foreach($ets as $et) {
 if(strcmp($et->Name, "FourthCoffeeShops") == 0) {
 foreach($et->Properties->Property as $ep) {
 $_SESSION['props'][] = $ep->Name;
 }
 break;
 }
 }
 }
 catch (SoapFault $e){
 die($e->faultstring);
 }
 }
 ?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
 <title>Find</title>
 </head>
 <body>
 <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
 <table border="1">
 <tr>
 <td colspan="2"><b>Sample Find</b></td>
 </tr>
 <tr>
 <td colspan="2"> </td>
 </tr>
 <tr>
 <td colspan="2"><b>Find a place</b></td>
 </tr>
 <tr>
 <td>Data source:</td>
 <td>
 <select name="listDataSourceFind" id="listDataSourceFind">
 <option selected="selected" value="MapPoint.NA">MapPoint.NA</option>
 <option value="MapPoint.EU">MapPoint.EU</option>
 </select>
 </td>
 </tr>
 <tr>
 <td>Place name:</td>
 <td><input name="textFindString" type="text" value="Seattle" id="textFindString" /></td>
 </tr>
 <tr>
 <td>Geographic context:</td>
 <td>
 <select name="listEntityType" id="listEntityType">
 <option value="-1"></option>
 <option value="PopulatedPlace">Cities</option>
 <option value="AdminDivision1">State/Province</option>
 </select>
 </td>
 </tr>
 <tr>
 <td align="center" colspan="2"><input type="submit" name="buttonFind" value="Find place" id="buttonFind" /></td>
 </tr>
 <tr>
 <td colspan="2"> </td>
 </tr>
 <tr>
 <TD colspan="2"> </TD>
 </tr>
 <tr>
 <td colspan="2"><b>Find an entity by ID</b></td>
 </tr>
 <tr>
 <td>Data source:</td>
 <td><input name="datasourcename" type="text" value="MapPoint.FourthCoffeeSample" id="datasourcename" /></td>
 </tr>
 <tr>
 <td>Entity ID:</td>
 <td><input name="entityID" type="text" value="-1191" id="entityID" /></td>
 </tr>
 <tr>
 <td align="center" colspan="2"><input type="submit" name="findByID" value="Find Entity by ID" id="findByID" /></td>
 </tr>
 <tr>
 <td colspan="2"> </td>
 </tr>
 <tr>
 <td colspan="2"><b>Find an entity by property</b></td>
 </tr>
 <tr>
 <td>Data source:</td>
 <td>MapPoint.FourthCoffeeSample</td>
 </tr>
 <tr>
 <td>Property Name:</td>
 <td>
 <select name="propertylist" id="propertylist">
 <?php
 foreach ($_SESSION['props'] as $prop) {
 echo "<option value='$prop'>$prop</option>";
 }
 ?>
 </select>
 <input type="submit" name="getpropnames" value="Get Names" id="getpropnames" />
 </td>
 </tr>
 <tr>
 <td>Property Value:</td>
 <td><input name="propertyValue" type="text" id="propertyValue" /></td>
 </tr>
 <tr>
 <td align="center" colspan="2">
 <input type="submit" name="findbyprop" value="Find Entities by Properties" id="findbyprop" /></td>
 </tr>
 <tr>
 <td colspan="2"> </td>
 </tr>
 </table>
 
 
 <?php
 
 if (isset($_POST['buttonFind'])) {
 $global = $_SESSION['mappoint'];
 //Set up the specification object
 $findSpec = new FindSpecification();
 $findSpec->InputPlace = $_POST['textFindString'];
 $findSpec->DataSourceName = $_POST['listDataSourceFind'];
 
 //Set up the Find options to allow more return values (by decreasing the threshold)
 //but also limit the number of results returned to 20
 $myFindOptions = new FindOptions();
 $myFindOptions->ThresholdScore = 0.5;
 $myFindOptions->Range = new FindRange();
 $myFindOptions->Range->StartIndex = 0;
 $myFindOptions->Range->Count = 20;
 $findSpec->Options = $myFindOptions;
 
 //If an entity type is selected, then limit the results to only those entity types.
 $myEntityTypes = array();
 if ($_POST['listEntityType'] != -1) {
 $myEntityTypes[]= $_POST['listEntityType'];
 $findSpec->EntityTypeNames = $myEntityTypes;
 }
 
 
 // Create a FindResults object to store the results of the Find request
 $myFindResults = null;
 try {
 $myFindResults = $global->FindService->Find($findSpec);
 if ($myFindResults->Results != null) {
 // Populate the list box with the returned results.
 populateListBox($myFindResults->Results->FindResult);
 }
 }
 catch (SoapFault $e) {
 die($e->faultstring);
 }
 } elseif (isset($_POST['findByID'])) {
 $global = $_SESSION['mappoint'];
 $findSpec = new FindByIDSpecification();
 $findSpec->DataSourceName = $_POST['datasourcename'];
 $findSpec->EntityIDs = array($_POST['entityID']);
 
 //Create a FindFilter to define the entity type
 $findSpec->Filter = new FindFilter();
 $findSpec->Filter->EntityTypeName = "FourthCoffeeShops";
 $findSpec->Filter->PropertyNames = array("DisplayName");
 
 // Create a FindResults object to store the results of the Find request
 $myFindResults = null;
 try {
 $myFindResults = $global->FindService->FindByID($findSpec);
 
 if ($myFindResults->Results != null) {
 // Populate the list box with the returned results.
 populateListBox($myFindResults->Results->FindResult);
 }
 }
 catch (SoapFault $e) {
 die($e->faultstring);
 }
 } elseif (isset($_POST['findbyprop'])) {
 $global = $_SESSION['mappoint'];
 try {
 $propertyName = '';
 if($_POST['propertylist'] != null) {
 $propertyName .= $_POST['propertylist'];
 }
 
 //Set up the specification object
 $findSpec = new FindByPropertySpecification();
 $findSpec->DataSourceName = "MapPoint.FourthCoffeeSample";
 
 //Create a FindFilter to define filter Expression
 $findSpec->Filter = new FindFilter();
 $findSpec->Filter->EntityTypeName = "FourthCoffeeShops";
 $findSpec->Filter->WhereClause = new WhereClause();
 $findSpec->Filter->PropertyNames = array("DisplayName");
 
 
 //Create a where clause
 $findSpec->Filter->WhereClause->SearchProperties = array();
 $findSpec->Filter->WhereClause->SearchProperties[] = new EntityPropertyValue();
 $findSpec->Filter->WhereClause->SearchProperties[0]->Name = $propertyName;
 $findSpec->Filter->WhereClause->SearchProperties[0]->Value = $_POST['propertyValue'];
 
 
 // Create a FindResults object to store the results of the Find request
 $myFindResults = null;
 
 $myFindResults = $global->FindService->FindByProperty($findSpec);
 
 if ($myFindResults->Results != null) {
 // Populate the list box with the returned results.
 populateListBox($myFindResults->Results->FindResult);
 }
 }
 catch (SoapFault $e) {
 /*
 FindByProperty method always throws this exception:
 'The type of the specified property does not match the type of the compared value
 or input string was not in a correct format.
 Argument: specification.Filter.WhereClause.SearchProperties[0].Name'
 I also tested this on asp .net with a sample that comes with the Mappoint SDK and a SoapException
 with this message is also thrown.
 */
 die($e->faultstring);
 }
 }
 ?>
 
 </select>
 </form>
 </body>
 </html>
 |