Jump to content

Store locator distance issues


timmah1

Recommended Posts

I have this script that works 9/10 of how it's suppose too.

 

This does not calculate the correct distance for the results.

 

Can anybody see where the problem lies?

 

Here is the code


// see if our zip code has been posted, and if it is a 5 digit #
if (isset($_POST['zip'])) {

  // remember to sanitize your inputs
  // this removes whitespace around the data and the next line makes sure its a 5 digit number
  $findzip = trim($_POST['zip']);
  if (preg_match("#^\d{5}$#",$findzip)) {

    include('inc/connect.php');
include('inc/functions.php');

    // create a query that will select the zip code (if we can't find the user entered zip, we return an error)
    $query = "SELECT latitude,longitude,state,city FROM zipdata WHERE zip=".$findzip." LIMIT 1";
    $result = mysql_query($query);
    if (mysql_num_rows($result) > 0) {

      // grab the latitude, longitude,state and city from our result
      list($flat,$flon,$fstate,$fcity) =  mysql_fetch_row($result);

      // now get all markets in the same state, or all markets if no states match
      // we want to reduce the amount of work the database has to do so we see if a state matches
      $query = "SELECT * FROM mrk WHERE state='".$fstate."'";
      $result = mysql_query($query);
      if (mysql_num_rows($result) < 1) {
        $query = "SELECT * FROM mrk";
        $result = mysql_query($query);
      }

      // now we process the markets to gather their data,
      //this result should not be empty, so I was lazy and didn't write an else case
      if (mysql_num_rows($result) > 0) {
        while($row = mysql_fetch_assoc($result)) {

          // first put all of the data for this market into an array, with the market id as the key
          $storeinfo[$row['id']] = $row;

          // get the store zip
          $dzip = $row['zip'];

          // query for the store's latitude and longitude
          $query = "SELECT latitude,longitude FROM zipdata WHERE zip=".$dzip." LIMIT 1";
          $result2 = mysql_query($query);
          if (mysql_num_rows($result2) > 0) {
            list($dlat,$dlon) =  mysql_fetch_row($result2);

            // now get the distance from the user entered zip
            $stores[$row['id']] = calcDist($flat,$flon,$dlat,$dlon);
          }
        }
      }
      asort($stores);	  

  print "<p>The Markets closest to you: $findzip</p><br>\n"; 
  	$maploc = "'You are here','$findzip',"; 
		foreach($stores as $k=>$v) { 
			$output .= "<h3 style='margin:0;padding:0'><b>".$storeinfo[$k]['company']."</b><br>(approx ".round($v)." miles)</h3>"; 
			$output .= "<p style='margin:0 0 10px 0;padding:0'><a href='".$storeinfo[$k]['url']."'>".$storeinfo[$k]['url']."</a><br>"; 
			$output .= $storeinfo[$k]['city']." ".$storeinfo[$k]['state'].", ".$storeinfo[$k]['zip']."</p>"; 
		} 
			echo $output;

}
  }
}

 

Here is the function.php


function calcDist($flat, $flon, $dlat, $dlon) { 

  $distance = sin(deg2rad($flat)) 
                * sin(deg2rad($dlat)) 
                + cos(deg2rad($flat)) 
                * cos(deg2rad($dlat)) 
                * cos(deg2rad($flon - $dlon)); 

  $distance = (rad2deg(acos($distance))) * 69.09; 

  return $distance; 
}

 

Thank you in advance

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.