<?php 
require_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>
 
 |