/ / Postcode Radius Search - php、mysql、郵便番号

郵便番号の半径検索 - PHP、MySQL、郵便番号

わかりましたので、郵便番号検索を作成するように求められましたスクリプト。私はまだより高度なphp / mysqlにはまったく新しいです。私が必要としているのは、このスクリプトを単純化するのを助けることだけです。郵便番号データベースは、英国全体の郵便番号sqlデータベース1.3m行です。したがって、スクリプトを使用して半径内のすべての郵便番号を取得する場合は、時間がかかります。単純化する方法はありますか。Java/ Ajaxを使用することも可能です。

<?php

$postcode = str_replace( "+", "%20", $postcode );
$postcode = str_replace( "!"£$^&*()?<>", "", $postcode );

include ("config.php");

$sqlstring = "SELECT * FROM postcodelatlng WHERE postcode LIKE "".$postcode." %" ";
$result = mysql_query($sqlstring);

$row = mysql_fetch_assoc($result);

$lng = $row["longitude"] / 180 * M_PI;
$lat = $row["latitude"] / 180 * M_PI;

mysql_free_result($result);

$sqlstring2 = "SELECT DISTINCT
postcodelatlng.postcode,
(
6367.41 * SQRT(
2 * (
1- COS(RADIANS(postcodelatlng.latitude)) * COS(".$lat.") * (
SIN(RADIANS(postcodelatlng.longitude)) * SIN(".$lng.") + COS(RADIANS(postcodelatlng.longitude)) * COS(".$lng.")
) - SIN(RADIANS(postcodelatlng.latitude)) * SIN(".$lat.")
)
)
) AS Distance
FROM
postcodelatlng AS postcodelatlng
HAVING Distance <= "".$radius.""
ORDER BY Distance ";



$result1 = mysql_query($sqlstring2) or die("query failed: " . mysql_error());
while($row = mysql_fetch_array($result1)){
$searchlets = "SELECT * FROM property_details WHERE postcode = "".$row["postcode"]."" ";
$getresult = mysql_query($searchlets);
while($row2 = mysql_fetch_array($getresult)) {

echo " Output here if Just Postcode was used ";

echo "<hr/>";
}


}

// This seraches if only city name was used
$searchlets2 = "SELECT * FROM property_details WHERE street = "".$postcode."" ";
$getresult2 = mysql_query($searchlets2);
while($row3 = mysql_fetch_array($getresult2)) {
echo " Output Here If just city name was searched ";

echo "<hr/>";
}

mysql_close($con);

?>

回答:

回答№1は2

あなたはバウンディングボックスを試して除外することができます結果。その後、ハーベシン式を使用して精度を上げることができます。あるいは、スペースキーと曲線のようなクアドキーを試すこともできます。基本的にそれは空間インデックスであり、次元を減らします。それはLSHアルゴリズムです。この質問で私の答えを読んでください。PHP / MySQLでの地理検索(距離)(パフォーマンス)