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

Paese
CAP    33129  10002  90003
Distanza

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