PHP поиск радиуса расстояния

Я искал в Интернете, чтобы найти код, который позволит пользователю ввести почтовый индекс и определенное расстояние и выполнить поиск. например (почтовый индекс) dd1 (расстояние от выпадающего списка может быть в пределах 10, 50, 100, 200 миль) 50 миль.

У меня уже есть код, в котором вы можете ввести 2 почтовых индекса, чтобы определить расстояние, и я думал об изменении этого, но безуспешно. код UK postcodes.org

<?php
$dbName="";
$dbUsername="";
$dbPassword="";

$fromPC=$_POST['fromPC'];
$toPC=$_POST['toPC'];

function getDistance($lat1, $long1, $lat2, $long2, $unit)
{
  if($unit=="miles"){
      $earth = 3960; //miles
  }else{
     $earth = 6371; //kilometres
  }

    //From co-ordinates
    $lat1 = deg2rad($lat1);
    $long1= deg2rad($long1);

    //To co-ordinates
    $lat2 = deg2rad($lat2);
    $long2= deg2rad($long2);

    // The Haversine Formula
    $dlong=$long2-$long1;
    $dlat=$lat2-$lat1;

    $sinlat=sin($dlat/2);
    $sinlong=sin($dlong/2);

    $a=($sinlat*$sinlat)+cos($lat1)*cos($lat2)*($sinlong*$sinlong);

    $c=2*asin(min(1,sqrt($a)));

    $d=round($earth*$c);

    return $d;
}

if( (!empty($fromPC)) && (!empty($toPC)) )
{
    mysql_connect('localhost','username','password');
    @mysql_select_db('dbname') or die( "Unable to select database");

  // basic cleaning of input
    $firstPC = strtoupper(preg_replace("/[^a-zA-Z0-9]/","",$fromPC ));
    $secondPC = strtoupper(preg_replace("/[^a-zA-Z0-9]/","",$toPC ));

    // get first details
    $query = 'SELECT `latitude`, `longitude` FROM `uk_postcodes` WHERE `postcode`="'.$firstPC.'";';
    $result = mysql_query($query);
    $first = mysql_fetch_row($result);
    $checkFirst=mysql_num_rows($result);

  // get second details
    $query = 'SELECT `latitude`, `longitude` FROM `uk_postcodes` WHERE `postcode`="'.$secondPC.'";';
    $result = mysql_query($query);
    $second = mysql_fetch_row($result);
  $checkSecond=mysql_num_rows($result);

  // ensure there were results to calculate with
  if( ($checkFirst<1) || ($checkSecond<1) ){
      $outputResults="Unrecognised postcode entered.";
  }else{
        $distance = getDistance($first[0], $first[1], $second[0], $second[1], "miles");
        $outputResults = "The distance between postcode: $firstPC and postcode: $secondPC is ".$distance." miles.";
  }

  // always close your connections !!
    mysql_close();
}

?>
<h1>UKPostcodes.org - distance calculator</h1>
<form action="uk_postcodes.php" method="post">
  Please enter the first part of the postcodes only:<br/><br/>
  From postcode: <input maxlength="4" name="fromPC"/><br/>
  To postcode: <input maxlength="4" name="toPC"/><br/>
  <input type="submit" />
</form>

<?php echo $outputResults?> 

Примеры того, что мне нужно, можно найти на postcode-distance.com. , AutoTrader, а также еще несколько сайтов.


person Fredd 777    schedule 09.03.2014    source источник
comment
Все семейство функций mysql_ уже давно объявлено устаревшим. Вы должны использовать MySQLi или PDO в любом новом коде, который вы создаете.   -  person meagar    schedule 09.03.2014
comment
используйте для этого карты Google;) Сделайте вызов API и сохраните результат для дальнейшего использования в базе данных, например (ID, ZIP_From, ZIP_To, Distance). mysql_* помечен как устаревший   -  person Adrian Preuss    schedule 09.03.2014
comment
@meagar спасибо, я знаю, что мне нужно обновить свой код с mysql на mysqli и т. Д. Я только начал использовать php, и книга, которую я использовал, была старой и использовала операторы mysql.   -  person Fredd 777    schedule 10.03.2014
comment
@adrian preuB Раньше я не использовал API карт Google, поэтому теперь мне нужно посмотреть, что для этого нужно и насколько это просто.   -  person Fredd 777    schedule 10.03.2014


Ответы (1)


Вы ищете это: http://database.appserver.aeglobalresearch.com/radius.php?lat=51.00000000&lng=5.86666700&dist=10

Я построил это, он ищет названия улиц в радиусе 10 км от местоположения GPS: 51.00000000&lng=5.86666700

Если да, я могу дать вам полный файл radius.php, и вы сможете его изменить. Мне также пришлось много искать, чтобы заставить его работать :)

person Александр    schedule 09.03.2014