使用地理位置向最近的城市汇款

时间:2012-06-12 11:57:50

标签: php mysql geolocation

我有MySQL 5.1,我正在寻找基于IP的最近城市的选择框。我已经下载了Max Mind的GeoLite数据库,但我无法弄清楚如何只填充接近IP的城市。我还想根据IP“预先选择”最近的城市。

我写了一些代码,但我只能显示我找到的国家的所有城市。那么,有人可以告诉我如何做到这一点吗?

<?php
$ip=$_SERVER["REMOTE_ADDR"];
$user="user";
$pass="password";

$conn=mysql_connect("localhost:3306",$user,$pass);
$link=mysql_select_db("db");

$ipConv=ip2long($ip);
$sql="SELECT CITY,REGION,LATITUDE,LONGITUDE
FROM location, blocks
WHERE $ipConv 
BETWEEN blocks.startIpNum
AND blocks.endIpNum
AND location.locId = blocks.locid";
$result=mysql_query($sql) or die (mysql_error());
while($row = mysql_fetch_assoc($result))
{
    $tcity=$row['CITY'];
    $tregion=$row['REGION'];
}

$sql2="SELECT COUNTRY FROM location WHERE CITY='$tcity'";
$result2=mysql_query($sql2);
while($row2 = mysql_fetch_assoc($result2))
{
    $country=$row2['COUNTRY'];
}

$sql3="SELECT CITY,REGION FROM location WHERE COUNTRY='$country' GROUP BY REGION";
$result3=mysql_query($sql3);
?>
<form>
<select>
<?php
while ($row3=mysql_fetch_assoc($result3))
{
?>
     <option <?php if ($row3['CITY']==$tcity){ ?> selected="selected"<?php } ?>)>
     <?php echo $row3['CITY']; ?>
     </option><?php
} ?>

</select>
</form>

由于

1 个答案:

答案 0 :(得分:3)

您需要检索IP城市的经度/纬度,而不是城市/地区,并在您拥有的$sql2查询中使用该纬度/经度。

SELECT id,(3959 * acos(cos(弧度(37))* cos(弧度($ lat))* cos(弧度($ lng) - 弧度(-122))+ sin(弧度(37)) * sin(弧度($ lat))))AS距离距离<标记距离<1。 25 ORDER BY距离LIMIT 0,20;

  

这是SQL语句,它将找到距离37,-122坐标25英里半径范围内最近的20个位置。它根据该行的纬度/经度和目标纬度/经度计算距离,然后仅询问距离值小于25的行,按距离对整个查询进行排序,并将其限制为20个结果。要按公里而不是英里搜索,请将3959替换为6371.

https://developers.google.com/maps/articles/phpsqlsearch?hl=hu-HU#findnearsql