使用地理位置查找最近的城市

Posted

技术标签:

【中文标题】使用地理位置查找最近的城市【英文标题】:FInding nearest cities using geolocation 【发布时间】:2012-06-12 11:57:50 【问题描述】:

我有 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】:

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

SELECT id, ( 3959 * acos( cos( 弧度(37) ) * cos( 弧度( $lat ) ) * cos( 弧度( $lng ) - 弧度(-122) ) + sin( 弧度(37) ) * sin( 弧度( $lat ) ) ) ) 与标记的距离 HAVING distance

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

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

【讨论】:

以上是关于使用地理位置查找最近的城市的主要内容,如果未能解决你的问题,请参考以下文章

我可以使用 Google API 查找最近的城市吗?

按城市查找位置的最佳做法

如何在国家/地区最近的城市内使用 MongoDB 地理空间查询搜索文档?

Groupon 之类的网站如何根据有交易的城市来划分地理位置?

在 Xcode 中使用拆分数据查找用户位置附近的数据

使用 hasrsine() 雪花函数从最近的位置动态映射数据