Geolocation Coding Help

By ILLUME-MEDIA-LABS - June 7, 2011

Hi,

I wanted to know how to make 2 mods to the example files that come with the geocoder. The first is the for the proximity search.

Instead of manually searching a zipcode and returning results like the example code does, how can i use a placeholder for the zip and upon loading the page, it will automatically query based on the zipcode on the page and return results? I want the form to submit automatically with placeholder <?php echo $listingRecord['zipcode'] ?> and then return the nearest 10 results.

Second is similar along the lines, but this is for the multiple map listings. Based on the placeholder <?php echo $listingRecord['zipcode'] ?> , the map would show the 10 nearest locations.

Thanks

Re: [Illume Magazine] Geolocation Coding Help

By Jason - June 7, 2011

Hi,

It looks like you'd want to use the sample_search.php code for both of these cases.

First, when you can do is remove the actual form and change the code so that it does a search without a form submitting. Finally you can limit the query to return only the first 10 record.

As an example:

<?php

$kmOrMiles = 'miles'; // can be 'miles' or 'km'

// set default values
if (!array_key_exists('fromAddress', $_REQUEST)) { $_REQUEST['fromAddress'] = '10001'; } // this is the default address/postalcode if none entered
if (!@$_REQUEST['maxDistance']) { $_REQUEST['maxDistance'] = '50000'; } // this will include all results

$_REQUEST['fromAddress'] = ""; // The ZIP code you want to use goes here
// get coordinates
list($myLat, $myLng) = geocodeAddress( @$_REQUEST['fromAddress'] );

// error checking
$errorsAndAlerts = '';

if (!$myLat || !$myLng) { $errorsAndAlerts .= "We couldn't determine your location, please try again!<br/>\n"; }


// get records
$addressRecords = array();
if ($myLat && $myLng) {
$maxDist = floatval(@$_REQUEST['maxDistance']);
list($addressRecords, $addressMetaData) = getRecords(array(
'tableName' => $GLOBALS['GEOCODER_SAMPLE_TABLENAME'],
'addSelectExpr' => geocoder_getSelectExprForDistance($myLat, $myLng, '_distance', $kmOrMiles), // adds '_distance' field to output records
'where' => geocoder_getWhereForDistanceWithin($myLat, $myLng, $maxDist, $kmOrMiles), // optimization: remove results outside of minimum bounding rectangle
'having' => "_distance <= " . $maxDist, // only show results within max distance
'orderBy' => 'ISNULL(_distance), _distance', // sort nearest records first -and- unknown or undefined distances last
'limit' => 10
));
}

?>


Hope this helps get you started
---------------------------------------------------
Jason Sauchuk - Project Manager
interactivetools.com

Hire me! Save time by getting our experts to help with your project.
http://www.interactivetools.com/consulting/

Re: [Jason] Geolocation Coding Help

By ILLUME-MEDIA-LABS - June 7, 2011

Thanks for the quick reply jason.

So when I add this:

$_REQUEST['fromAddress'] = "<?php echo $listingRecord['zipcode'] ?>"; // The ZIP code you want to use goes here

on the front end, I get this error:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/illumema/public_html/indulge/index.php on line 53

Re: [Illume Magazine] Geolocation Coding Help

By Jason - June 7, 2011

Hi,

Since this is already in a PHP block, you don't need to use <?php ?>

Try this:

$_REQUEST['fromAddress'] = $listingRecord['zipcode'] ; // The ZIP code you want to use goes here

Hope this helps
---------------------------------------------------
Jason Sauchuk - Project Manager
interactivetools.com

Hire me! Save time by getting our experts to help with your project.
http://www.interactivetools.com/consulting/

Re: [Jason] Geolocation Coding Help

By ILLUME-MEDIA-LABS - June 7, 2011

Hi Jason.

You rock! Awesome. It worked. Many thanks.

Last thing, how do I exclude the current listing from showing up.


See live example: http://indulge.illumemag.com/

Re: [Illume Magazine] Geolocation Coding Help

By Jason - June 8, 2011

Hi,

When you're outputting your records, you can check the "num" of the record you had already selected.

For Example:
<?php
foreach ($myRecords as $record) {

if ($record['num'] == $listingRecord['num']) { continue; }

if (!$record['latitude'] || !$record['longitude']) { continue; }
$jsFunctionArgs = "{$record['latitude']}, {$record['longitude']}, {$record['num']}, '" .escapeJs($record['_link']). "'";
print " _geocoder_addMarker($jsFunctionArgs);\n";
}
?>


Hope this helps
---------------------------------------------------
Jason Sauchuk - Project Manager
interactivetools.com

Hire me! Save time by getting our experts to help with your project.
http://www.interactivetools.com/consulting/

Re: [Jason] Geolocation Coding Help

By Mikey - February 7, 2012

I'm trying to list events on a multi geocoding map, but I can't seem to get past events to disappear from the map. Anyone have any ideas how to get this to work? I've bolded the line I added to the code where I'm trying to remove past events from the map.


'where' => geocoder_getWhereForDistanceWithin($myLat, $myLng, $maxDist, $kmOrMiles) AND 'Date > NOW()',,

Here's more of the code I'm working with:

<?php
$myMappedRecords = array();
if ($myLat && $myLng) {
$maxDist = floatval(@$_REQUEST['maxDistance']);

list($contact_infoMapRecords, $contact_infoMapMetaData) = getRecords(array(
'tableName' => 'contact_info',
'addSelectExpr' => geocoder_getSelectExprForDistance($myLat, $myLng, '_distance', $kmOrMiles),
// adds '_distance' field to output records
'where' => geocoder_getWhereForDistanceWithin($myLat, $myLng, $maxDist, $kmOrMiles),
// optimization: remove results outside of minimum bounding rectangle
'having' => "_distance <= " . $maxDist,
// only show results within max distance
'orderBy' => 'ISNULL(_distance), _distance',
// sort nearest records first -and- unknown or undefined distances last
));

list($eventsMapRecords, $eventsMapMetaData) = getRecords(array(
'tableName' => 'events',
//'where' => 'Date > NOW()',
'addSelectExpr' => geocoder_getSelectExprForDistance($myLat, $myLng, '_distance', $kmOrMiles),
// adds '_distance' field to output records
//'where' => geocoder_getWhereForDistanceWithin($myLat, $myLng, $maxDist, $kmOrMiles),
'where' => geocoder_getWhereForDistanceWithin($myLat, $myLng, $maxDist, $kmOrMiles) AND 'Date > NOW()',,
// optimization: remove results outside of minimum bounding rectangle
'having' => "_distance <= " . $maxDist,
// only show results within max distance
'orderBy' => 'ISNULL(_distance), _distance',
// sort nearest records first -and- unknown or undefined distances last
));
$myMappedRecords = array_merge($contact_infoMapRecords, $eventsMapRecords);
}
?>


Thanks Zick

Re: [zick] Geolocation Coding Help

By Jason - February 8, 2012

Hi Zick,

I think it's just a minor problem in your WHERE clause. Assuming that your field is called Date, you can try this:

'where' => geocoder_getWhereForDistanceWithin($myLat, $myLng, $maxDist, $kmOrMiles) ." AND `Date` > NOW()",

Hope this helps
---------------------------------------------------
Jason Sauchuk - Project Manager
interactivetools.com

Hire me! Save time by getting our experts to help with your project.
http://www.interactivetools.com/consulting/