Trova punti entro un raggio
Usa i nostri dati per cercare luoghi entro un raggio in chilometri, miglia o miglia nautiche.
Utilizziamo un indice sui campi Latitudine e Longitudine nel database per rendere la ricerca più veloce.
Esempio pratico
Formula
Calc è una variabile che contiene la formula da applicare nella query SQL.
Lat e
Lon sono le coordinate del punto iniziale (formato decimale, datum WGS84).
Le coordinate non evidenziate sono i nomi dei campi nel database.
6378.137 è il raggio terrestre in chilometri; usa 3963.191 per le miglia.
Calc = 6378.137 * ACos( Cos( RADIANS(Latitude) ) * Cos( RADIANS( Lat ) ) * Cos( RADIANS( Lon ) - RADIANS(Longitude) ) + Sin( RADIANS(Latitude) ) * Sin( RADIANS( Lat ) ) )
SQL = "SELECT Locality, " & Calc & " As Distance FROM Table WHERE " & Calc & " <= '5' ORDER BY Distance"
Esempio di codice ASP con database MS SQL
<%
ISO = Request.Form("ISO")
PostalCode = Request.Form("PostalCode")
Distance = Request.Form("Distance")
If Request.Form("Radius") = "K" Then Radius = 6378.137 Else Radius = 3963.191
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open Application("ConnectionString")
Set RS = Server.CreateObject("ADODB.Recordset")
' Ottenere le coordinate del CAP
SQL = "SELECT * FROM [PostalCodes] WHERE ISO='" & ISO & "' AND PostalCode='" & PostalCode & "';"
Set RS = Conn.Execute(SQL)
Lat = RS("Latitude")
Lon = RS("Longitude")
calc = Radius & " * ACos( Cos(RADIANS(Latitude)) * Cos(RADIANS(" & Lat & ")) * Cos(RADIANS(" & Lon & ") - RADIANS(Longitude)) + Sin(RADIANS(Latitude)) * Sin(RADIANS(" & Lat & ")) ) "
SQL = "SELECT TOP 100 ISO, Postalcode, Region1, Region2, Region3, Locality, Suburb, Latitude, Longitude, " & calc & " AS Distance FROM [PostalCodes] WHERE ISO='" & ISO & "' AND " & calc & " <= " & Distance & " ORDER BY Distance;"
Set RS = Conn.Execute(SQL)
Do While Not RS.EOF
Response.Write RS("ISO") & "<br>"
Response.Write RS("PostalCode") & "<br>"
Response.Write RS("Region1") & "<br>"
Response.Write RS("Region2") & "<br>"
Response.Write RS("Region3") & "<br>"
Response.Write RS("Locality") & "<br>"
Response.Write RS("Suburb") & "<br>"
Response.Write FormatNumber(RS("Distance"),1) & "<br>"
RS.MoveNext
Loop
RS.Close
Set RS = nothing
Conn.Close
%>
Esempio di codice in PHP con database MySQL
<?php
if(isset($_GET['Search']))
{
$PostalCode = $_GET['PostalCode'];
$Distance = $_GET['distance'];
$sqlstring = "SELECT * FROM PostalCodes WHERE PostalCode = '".$PostalCode."'";
$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 PostalCode, Locality, (6367.41 * SQRT(2 * (1-Cos(RADIANS(Latitude)) * Cos(".$Lat.") *
(Sin(RADIANS(Longitude))*Sin(".$Lng.") + Cos(RADIANS(Longitude)) * Cos(".$Lng.")) - Sin(RADIANS(Latitude)) *
Sin(".$Lat.")))) AS Distance FROM PostalCodes WHERE (6367.41 * SQRT(2 * (1 - Cos(RADIANS(Latitude)) * Cos(".$Lat.") *
(Sin(RADIANS(Longitude)) * Sin(".$Lng.") + cos(RADIANS(Longitude)) * Cos(".$Lng.")) - Sin(RADIANS(Latitude)) *
Sin(".$Lat."))) <= '".$Distance."') ORDER BY Distance";
$result = mysql_query($sqlstring2) or die('query failed: ' . mysql_error());
$str = "<table width=\"300\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
$str .= "<tr>";
$str .= "<th>CAP</th>";
$str .= "<th>Distanza</th>";
$str .= "</tr>";
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
$str .= "<tr><td>".$row["PostalCode"]."</td><td>".$row["place"]."</td><td>".round($row['Distance'])."km</td></tr>";
}
$str .= "</table>";
mysql_free_result($result);
mysql_close($conn);
echo $str;
}
?>
| Dati di riferimento |
| Divisioni amministrative |
| Paesi |
| Nomi dei paesi |
| Valute |
| Lingue |
| Formati dei codici postali |
| Fusi orari |
| Formule & esempi |
| Distanza tra punti |
| Trova punti entro un raggio |
| Trova il CAP di un punto |