87 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
require("config.php");
 | 
						|
 | 
						|
// Opens a connection to a MySQL server
 | 
						|
/**$connection = mysql_connect($dbhost, $dbuser, $dbpass);
 | 
						|
if (!$connection) {
 | 
						|
  die("Not connected : " . mysql_error());
 | 
						|
}
 | 
						|
 | 
						|
// Set the active MySQL database
 | 
						|
$db_selected = mysql_select_db($dbname, $connection);
 | 
						|
if (!$db_selected) {
 | 
						|
  die("Can\'t use db : " . mysql_error());
 | 
						|
}**/
 | 
						|
 | 
						|
// Select all the rows in the markers table
 | 
						|
$query = "SELECT * FROM gforum_Fitters WHERE fitter_lat != 0 AND fitter_lat IS NOT NULL";
 | 
						|
$result = mysql_query($query);
 | 
						|
if (!$result) {
 | 
						|
  die("Invalid query: " . mysql_error());
 | 
						|
}
 | 
						|
 | 
						|
// Initialize delay in geocode speed
 | 
						|
$delay = 0;
 | 
						|
$base_url = "https://" . MAPS_HOST . "/maps/geo?output=xml&key=" . KEY;
 | 
						|
 | 
						|
// Iterate through the rows, geocoding each address
 | 
						|
while ($row = @mysql_fetch_assoc($result)) {
 | 
						|
  $geocode_pending = true;
 | 
						|
 | 
						|
  while ($geocode_pending) {
 | 
						|
    $address = "".$row['fitter_address'].", ".$row['fitter_address_two'].", ".$row['fitter_city'].", ".$row['fitter_state']." ".$row['fitter_zip']."";
 | 
						|
    $id = $row["fitter_id"];
 | 
						|
    $request_url = $base_url . "&q=" . urlencode($address);
 | 
						|
    //echo ($request_url);
 | 
						|
    //$csv = file_get_contents($request_url) or die("csv url not loading");
 | 
						|
 | 
						|
	// Create cUrl object to grab XML content using $request_url
 | 
						|
	$c = curl_init();
 | 
						|
	curl_setopt($c, CURLOPT_URL, $request_url);	
 | 
						|
	curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
 | 
						|
	$csv = trim(curl_exec($c));
 | 
						|
	curl_close($c);
 | 
						|
 | 
						|
    $csvSplit = split(",", $csv);
 | 
						|
    $status = $csvSplit[0];
 | 
						|
    $accuracy = $csvSplit[1];
 | 
						|
    $lat = $csvSplit[2];
 | 
						|
    $lng = $csvSplit[3];
 | 
						|
    if (strcmp($status, "200") == 0 && $accuracy >= 5) {
 | 
						|
      // successful geocode
 | 
						|
      $geocode_pending = false;
 | 
						|
      $lat = $csvSplit[2];
 | 
						|
      $lng = $csvSplit[3];
 | 
						|
 | 
						|
      $query = sprintf("UPDATE gforum_Fitters " .
 | 
						|
             " SET fitter_lat = '%s', fitter_lng = '%s' " .
 | 
						|
             " WHERE fitter_id = %s LIMIT 1;",
 | 
						|
             mysql_real_escape_string($lat),
 | 
						|
             mysql_real_escape_string($lng),
 | 
						|
             mysql_real_escape_string($id));
 | 
						|
      $update_result = mysql_query($query);
 | 
						|
      if (!$update_result) {
 | 
						|
        die("Invalid query: " . mysql_error());
 | 
						|
      }
 | 
						|
    } else if (strcmp($status, "620") == 0) {
 | 
						|
      // sent geocodes too fast
 | 
						|
      $delay += 100000;
 | 
						|
    } else if ($accuracy < 5) {
 | 
						|
      // failure to geocode
 | 
						|
      $geocode_pending = false;
 | 
						|
      echo $request_url . "\n";
 | 
						|
      echo "Address " . $address . " did not geocode to great enough accuracy to be useful. ";
 | 
						|
      echo "Accuracy match: " . $accuracy . "
 | 
						|
\n";			
 | 
						|
    } else {
 | 
						|
      // failure to geocode
 | 
						|
      $geocode_pending = false;
 | 
						|
      echo "Address " . $address . " failed to geocode. ";
 | 
						|
      echo "Received status " . $status . "
 | 
						|
\n";
 | 
						|
    }
 | 
						|
    usleep($delay);
 | 
						|
  }
 | 
						|
}
 | 
						|
?>
 |