/ / Postleitzahlen-Radius-Suche - PHP, MySQL, PLZ

Postleitzahlen-Radius-Suche - PHP, MySQL, Postleitzahl

Ok, ich wurde gebeten, eine Postleitzahl-Suche zu erstellenSkript. Ich bin immer noch ziemlich neu in der fortgeschrittenen PHP / MySQL. Alles, was ich brauche, ist Hilfe dieses Skript zu vereinfachen. Die Postleitzahl-Datenbank ist die gesamte UK Postleitzahl SQL-Datenbank 1,3 m Zeilen. Wenn ich also das Skript verwende, um alle Postleitzahlen innerhalb eines Radius zu bekommen, dauert es sehr lange. Gibt es eine Möglichkeit, es zu vereinfachen? Vielleicht sogar Java / Ajax zu verwenden?

<?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);

?>

Antworten:

2 für die Antwort № 1

Sie könnten eine Begrenzungsbox ausprobieren, um dieErgebnisse. Dann können Sie die Harvestine-Formel für eine bessere Genauigkeit verwenden. Oder Sie könnten versuchen, einen Quadkey, a.k.a eine raumfüllende Kurve wie. Im Grunde ist es ein räumlicher Index und reduziert die Dimension. Es ist ein LSH-Algorithmus. Lies meine Antwort in dieser Frage:Geo-Suche (Entfernung) in PHP / MySQL (Leistung)