Radius 搜索 PHP、MYSQL 和谷歌地图

Posted

技术标签:

【中文标题】Radius 搜索 PHP、MYSQL 和谷歌地图【英文标题】:Radius Search PHP, MYSQL and Google Maps 【发布时间】:2012-05-25 11:08:41 【问题描述】:

我正在使用某个位置的纬度和经度搜索数据库。我想检索某个半径内的所有位置。

然后我将返回的结果编码为 JSON 并使用 ajax 检索数据,但是我得到一个未定义的错误,这意味着没有从数据库返回数据。

谁能看出我哪里出错了?

这是我的问题

$sql="SELECT *, ACOS( SIN( RADIANS( `lat` ) ) * SIN( RADIANS( $fLat ) ) + COS( RADIANS( `lat` ) )
* COS( RADIANS( $fLat )) * COS( RADIANS( `lng` ) - RADIANS( $fLon )) ) * 6380 AS `distance`
FROM `markers`
WHERE ACOS( SIN( RADIANS( `lat` ) ) * SIN( RADIANS( $fLat ) ) + COS( RADIANS( `lat` ) )
    * COS( RADIANS( $fLat )) * COS( RADIANS( `lng` ) - RADIANS( $fLon )) ) * 6380 < 10
    ORDER BY `distance`";


    $result = mysql_query($sql);

    while($r = mysql_fetch_assoc($result)) $rows[] = $r;

    echo json_encode($rows); 

【问题讨论】:

建议:试试不带WHERE子句(或者更简单的WHERE子句)的查询,看看能不能先得到一些结果。分而治之,找出问题的根源。查看结果可能会提供信息的距离。 感谢您的回复。刚刚删除了 where 子句,仍然一无所获,还有其他想法吗? SELECT * FROM markers 也许? 信息:我只是手动将纬度/经度值替换为 -32.9 和 87.01,并在我拥有的具有纬度和经度字段的数据库上获得了一些点击。该查询在 SQL 中似乎是正确的。您是否回显了 SQL 查询以查看传入的变量是否有问题? 只需在查询中输入一些有意义的值,仍然没有。不想听起来像个白痴,但我如何“回显 sql” 【参考方案1】:

试试这个:

$sql="SELECT * , ACOS( SIN( RADIANS( 'lat' ) ) * SIN( RADIANS( $fLat ) ) + COS( RADIANS( 'lat' ) ) * COS( RADIANS( $fLat )) * COS( RADIANS( 'lng' ) - RADIANS( $fLon )) ) * 6380 AS distance FROM 'markers'
WHERE  distance < 10
ORDER BY distance";

$result = mysql_query($sql);

$rows = mysql_fetch_assoc($result));

echo json_encode($rows);  `

【讨论】:

【参考方案2】:

我对三角函数或 SQL 帮助不大,我只是看到了足够多的 Google 地图问题,可以将您指向本教程:

https://developers.google.com/maps/articles/phpsqlsearch#findnearsql

有一个查询可以尝试在半径范围内按距离查找地点,希望对您有用。

使用 3959(英里)或 6371(公里)

【讨论】:

谢谢,我已经看过那个教程了。并复制所有代码(更改相关位)并返回一个空的xml文档。 抱歉没有帮助。如果您遗漏了distance &lt; 25 部分,或者增加了很多,比如数千,我认为它应该返回几个标记。如果不是,可能是数据库中的类型不匹配?数学处理可能不正确。

以上是关于Radius 搜索 PHP、MYSQL 和谷歌地图的主要内容,如果未能解决你的问题,请参考以下文章

PHP 制作雅虎和谷歌搜索查询字符串

谷歌地图和谷歌位置自动完成冲突

百度地图和谷歌地图的选择

即时运行和谷歌地图的问题

Xamarin 和谷歌地图上的不同距离

Laravel 和谷歌地图:foreach 纬度/经度显示标记或地图